Di android. Periksa apakah data seluler aktif atau nonaktif
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
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
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
}
}
}