No android. Verifique se os dados móveis estão ativados ou desativados
Meu aplicativo precisa de uma função para verificar se o celular do usuário ativou os dados móveis ou não.
Eu referenciei este link: # 32239785
Aqui está o código fornecido nesse tópico
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;
}
}
Este código funciona na maioria do meu celular.
Exceto no "Nokia 8" (Android 9)
Até eu desliguei os dados móveis. Esta função ainda retorna verdadeiro.
Por quê?
Respostas
Você realmente precisa verificar se a configuração de dados móveis está habilitada ou desabilitada ou o que você realmente está tentando fazer é verificar se o dispositivo atualmente tem conexão de dados móveis?
Se for o último caso, você deve usar CONNECTIVITY_SERVICE
, exemplo dos documentos :
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);
O link de documentos acima também tem alguns links para outras classes relevantes que você pode querer verificar como NetworkInfo.DetailedStateeConnectivityManager.NetworkCallback
Verifique se isso ajuda:
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
}
}
}