2012-09-10 6 views
6

Chcę, aby moja aplikacja sprawdzała, czy "Tryb sieci danych" lub "Mobilne dane" jest włączony, nawet jeśli obecnie nie jest aktywny. Innymi słowy, muszę sprawdzić, czy aplikacja będzie potencjalnie obciążać opłaty za transmisję danych mobilnych, nawet jeśli telefon jest obecnie podłączony przez WiFi.Jak sprawdzić, czy Android "Mobilne dane" jest na

W googlach znalazłem następujący kod, który sprawdza, czy "Mobilne dane" są "aktywne".

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

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE; 

Problem z tym kodem polega na tym, że jeśli połączenie Wi-Fi jest aktywne, dane mobilne nie są zgłaszane jako aktywne, nawet jeśli są włączone.

Czy kod można zmodyfikować, aby określić, czy dane komórkowe są "włączone", a zatem potencjalnie aktywne, a nie jak w przypadku tego kodu, czy jest to aktualnie aktywny tryb połączenia?

+0

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

+0

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

+0

znalazłeś rozwiązanie tego? –

Odpowiedz

2

Spróbuj

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

Dzięki za sugestię; jednak ten kod zwraca wartość true, jeśli jest dostępne połączenie Wi-Fi lub komórkowe połączenie danych. Próbuję wykryć, czy dane komórkowe są włączone (niezależnie od tego, czy jest połączenie Wi-Fi). – prepbgg

0

Proszę spojrzeć na ten kod: (kod jednego z moich opublikowanych aplikacji w Sklepie Play)

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

Dzięki za sugestię; jednak ten kod zwraca wartość true, jeśli jest dostępne połączenie Wi-Fi lub komórkowe połączenie danych. Próbuję wykryć, czy dane komórkowe są włączone (niezależnie od tego, czy jest połączenie Wi-Fi). – prepbgg

2

Spróbuj tego, to działa w większości przypadków.

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

Uwaga: 'getNetworkInfo()' jest przestarzałe od API 23. – milosmns

0

nie jestem pewien, że to będzie działać na wszystkich urządzeniach, ale działa na niektóre Próbowałem:

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

Wydaje zwróci prawidłowy wynik, nawet jeżeli mam aktywną WiFi połączenie.