Dans Android. Vérifiez si les données mobiles sont activées ou désactivées

Aug 19 2020

Mon application a besoin d'une fonction pour vérifier que le téléphone mobile de l'utilisateur a activé les données mobiles ou non.

J'ai référencé ce lien: # 32239785

Voici le code fourni dans cette rubrique

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;
    }
}

Ce code fonctionne dans la plupart de mon téléphone mobile.

Sauf sur «Nokia 8» (Android 9)

Même moi, j'ai désactivé les données mobiles. Cette fonction renvoie toujours true.

Pourquoi?

Réponses

marmor Aug 20 2020 at 11:36

Avez-vous vraiment besoin de vérifier si le paramètre pour les données mobiles est activé ou désactivé, ou ce que vous essayez vraiment de faire est de vérifier si l'appareil dispose actuellement d'une connexion de données mobiles?

Si c'est le dernier cas, vous devriez utiliser CONNECTIVITY_SERVICE, exemple de la documentation :

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);

Le lien vers la documentation ci-dessus contient également des liens vers d'autres classes pertinentes que vous voudrez peut-être consulter comme NetworkInfo.DetailedStateetConnectivityManager.NetworkCallback

DiwakarSingh Aug 20 2020 at 11:40

Vérifiez avec ceci, si cela aide:

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
    }
}
}