2012-09-10 20 views
6

Voglio che la mia app verifichi se "Modalità rete dati" o "Dati mobili" è abilitata, anche se non è attualmente attiva. In altre parole, ho bisogno di verificare se l'app potrebbe potenzialmente incorrere in addebiti sui dati mobili, anche se il telefono è attualmente connesso tramite WiFi.Come verificare se Android "Dati mobili" è

Su google Ho trovato il seguente codice che controlla se "Dati mobili" è "attivo".

Il problema con questo codice è che se il WiFi è attivo, i dati mobili non vengono segnalati come attivi anche se è acceso.

È possibile modificare il codice per determinare se i dati mobili sono "abilitati" e quindi potenzialmente attivi, piuttosto che con questo codice se è la modalità di connessione attualmente attiva?

+0

vedere questo: http://stackoverflow.com/questions/3644144/how-to-disable-mobile-data-on-android – Sharp80

+0

vedere questo: http://stackoverflow.com/questions/3644144/how -to-disable-mobile-data-on-android – Sharp80

+0

hai trovato una soluzione a questo? –

risposta

2

Prova questa

ConnectivityManager cm = (ConnectivityManager) 
      activity.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
     // if no network is available networkInfo will be null 
     // otherwise check if we are connected 
     if (networkInfo != null && networkInfo.isConnected()) { 
      return true; 
     } 
     return false; 
+0

Grazie per il suggerimento; tuttavia, questo codice restituisce true se è disponibile una connessione dati WiFi o mobile. Sto cercando di rilevare specificamente se i dati mobili sono abilitati (indipendentemente dal fatto che ci sia una connessione WiFi). – prepbgg

0

Si prega di guardare questo codice: (codice di una delle mie applicazioni pubblicate sul Play Store)

private static boolean isAPNEnabled(Context paramContext) { 
    try { 
     NetworkInfo networkInfo = ((ConnectivityManager) paramContext.getSystemService("connectivity")).getActiveNetworkInfo(); 
     return networkInfo.isConnected(); 
    } catch (Exception e) { 
     return false; 
    } 
} 
+0

Grazie per il suggerimento; tuttavia, questo codice restituisce true se è disponibile una connessione dati WiFi o mobile. Sto cercando di rilevare specificamente se i dati mobili sono abilitati (indipendentemente dal fatto che ci sia una connessione WiFi). – prepbgg

2

Prova questa, funziona nella maggior parte dei casi.

ConnectivityManager cm = 
       (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     boolean isConnected = activeNetwork != null && 
       activeNetwork.isConnected(); 

     if (!isConnected) 
     { 
      return false; 
     } 
+0

Nota: 'getNetworkInfo()' è obsoleto dall'API 23. – milosmns

0

io non sono sicuro che questo è funziona su tutti i dispositivi, ma funziona su alcuni ho provato:

private boolean isMobileDataEnabled(Context ctx) { 
    int mobileData = Settings.Secure.getInt(ctx.getContentResolver(), "mobile_data", 0); 
    return mobileData == 1; 
} 

Sembra di restituire il risultato corretto, anche se ho un WiFi attiva connessione.

Problemi correlati