Android'de. Mobil verinin açık mı kapalı mı olduğunu kontrol edin

Aug 19 2020

Uygulamamın, kullanıcının cep telefonunun mobil veriyi açıp açmadığını kontrol etmek için bir işleve ihtiyacı var.

Bu bağlantıya başvurdum : # 32239785

İşte o konuda verilen kod

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

Bu kod cep telefonumun çoğunda çalışıyor.

"Nokia 8" (Android 9) hariç

Ben bile mobil veriyi kapattım. Bu işlev yine de true döndürür.

Neden?

Yanıtlar

marmor Aug 20 2020 at 11:36

Mobil veri ayarının etkin mi yoksa devre dışı mı olduğunu gerçekten kontrol etmeniz gerekiyor mu yoksa gerçekten yapmaya çalıştığınız şey cihazın şu anda mobil veri bağlantısına sahip olup olmadığını kontrol etmek mi?

İkinci durumsaCONNECTIVITY_SERVICE , dokümanlardaki örneği kullanmanız gerekir :

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

Yukarıdaki dokümanlar bağlantısında, kontrol etmek isteyebileceğiniz diğer ilgili sınıflara bazı bağlantılar da vardır NetworkInfo.DetailedStateveConnectivityManager.NetworkCallback

DiwakarSingh Aug 20 2020 at 11:40

Yardımcı olacaksa şuna bir bak:

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