Di android. Periksa apakah data seluler aktif atau nonaktif

Aug 19 2020

Aplikasi saya membutuhkan fungsi untuk memeriksa ponsel pengguna telah mengaktifkan data seluler atau tidak.

Saya telah mereferensikan tautan ini: # 32239785

Berikut adalah kode yang diberikan dalam topik itu

boolean mobileYN = false;

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getSimState() == TelephonyManager.SIM_STATE_READY) {
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1)
    {
        mobileYN = Settings.Global.getInt(context.getContentResolver(), "mobile_data", 1) == 1;
    }
    else{
        mobileYN = Settings.Secure.getInt(context.getContentResolver(), "mobile_data", 1) == 1;
    }
}

Kode ini berfungsi di sebagian besar ponsel saya.

Kecuali di "Nokia 8" (Android 9)

Bahkan saya mematikan data seluler. Fungsi ini masih mengembalikan nilai true.

Mengapa?

Jawaban

marmor Aug 20 2020 at 11:36

Apakah Anda benar-benar perlu memeriksa apakah setelan untuk data seluler diaktifkan atau dinonaktifkan, atau yang sebenarnya Anda coba lakukan adalah memeriksa apakah perangkat saat ini memiliki sambungan data seluler?

Jika ini kasus terakhir, Anda harus menggunakan CONNECTIVITY_SERVICE, contoh dari dokumen :

private static final String DEBUG_TAG = "NetworkStatusExample";
...
ConnectivityManager connMgr =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isWifiConn = false;
boolean isMobileConn = false;
for (Network network : connMgr.getAllNetworks()) {
    NetworkInfo networkInfo = connMgr.getNetworkInfo(network);
    if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
        isWifiConn |= networkInfo.isConnected();
    }
    if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
        isMobileConn |= networkInfo.isConnected();
    }
}
Log.d(DEBUG_TAG, "Wifi connected: " + isWifiConn);
Log.d(DEBUG_TAG, "Mobile connected: " + isMobileConn);

Tautan dokumen di atas juga memiliki beberapa tautan ke kelas relevan lainnya yang mungkin ingin Anda lihat seperti NetworkInfo.DetailedStatedanConnectivityManager.NetworkCallback

DiwakarSingh Aug 20 2020 at 11:40

Periksa dengan ini, jika itu membantu:

class InternetNetwork {
companion object {
    fun isOnline(context: Context): Boolean {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val connectivityManager =
                context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            val capabilities =
                connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
            if (capabilities != null)
                when {
                    capabilities.hasTransport(TRANSPORT_CELLULAR) -> {
                        Log.i("Internet", "NetworkCapabilities.TRANSPORT_CELLULAR")
                        return true
                    }
                    capabilities.hasTransport(TRANSPORT_WIFI) -> {
                        Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI")
                        return true
                    }
                    capabilities.hasTransport(TRANSPORT_ETHERNET) -> {
                        Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET")
                        return true
                    }
                }
        } else {
            val connectivityManage =
                context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            val netInfo = connectivityManage.activeNetworkInfo
            return netInfo != null && netInfo.isConnected
        }

        return false
    }
}
}