2013-04-02 9 views
6

Chcę ustawić test, aby sprawdzić, czy mój kod działa poprawnie, gdy nie ma dostępu do Internetu. Czy istnieje sposób na czasowe wyłączenie dostępu do Internetu w celu przeprowadzenia testu?Tymczasowo wyłączasz dostęp do Internetu w systemie Android?

Próbowałem rozejrzeć się, ale nie mogłem go znaleźć.

Dzięki z góry, klasą

+0

Chcesz to zrobić w kodzie? Lub po prostu wyłączyć go ręcznie na swoim urządzeniu? –

+0

w kodzie idealnie, chciałbym móc włączyć to do testu JUnit. – Classtronaut

Odpowiedz

4

Ten przykładowy kod powinien działać na telefonach z systemem Android pierników i wyższy: To włączanie/wyłączanie połączenia danych

private void setMobileDataEnabled(Context context, boolean enabled) { 
    final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    final Class conmanClass = Class.forName(conman.getClass().getName()); 
    final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 
    iConnectivityManagerField.setAccessible(true); 
    final Object iConnectivityManager = iConnectivityManagerField.get(conman); 
    final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); 
    final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
    setMobileDataEnabledMethod.setAccessible(true); 
    setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled); 
} 

Nie zapomnij dodać tę linię do pliku manifestu

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 

Ponadto, W zależności od włączania lub wyłączania Wi-Fi:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE); 
wifiManager.setWifiEnabled(status); 

gdzie status może być prawdziwy lub fałszywy zgodnie z wymaganiami.

Również w manifeście:

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
+0

Dziękuję, to jest dokładnie to, o co prosiłem.:) – Classtronaut

+0

Niż jest to dobry pomysł, aby zaakceptować odpowiedź. – JacksOnF1re

+0

To nie działa dla mnie. Otrzymuję ten błąd 'java.lang.NoSuchMethodException: setMobileDataEnabled [boolean]'. Urządzenie: Nexus 5x, wersja Androida: 7.1.1 –

2

Dobrze, aby wyłączyć Wi-Fi, można użyć tego kodu:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE); 
wifiManager.setWifiEnabled(true); // "true" TO ENABLE || "false" TO DISABLE 

Aby wyłącz połączenie danych, możesz użyć rozwiązania tutaj: https://stackoverflow.com/a/4304110/450534. Metoda ta jednak nie robi prace nad 2.3 lub nowszym

Ta odpowiedź tutaj ma rozwiązanie zarówno dla 2.3+ i 2.2 oraz poniżej: https://stackoverflow.com/a/12535246/450534. Możesz zrobić proste sprawdzenie interfejsu API i zdecydować, który fragment kodu ma zostać uruchomiony. Coś takiego powinno ci ustawić:

int currentAPIVersion = android.os.Build.VERSION.SDK_INT; 
if (currentAPIVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) { 
    // RUN THE CODE FOR 2.3+ 
} else { 
    // RUN THE CODE FOR API LEVEL BELOW 2.3 
} 

Zobacz, które z dwóch prac dla Ciebie. Podejrzewam, że to będzie późniejsze. Osobiście nigdy nie udało mi się przetestować włączania i wyłączania łączności danych.

Rekwizyty dla autorów połączonych rozwiązań. ;-)

UWAGA:Rozwiązania Data Connectivity są oparte na nieoficjalnych API i mogą nie działać w przyszłych wersjach.

Powiązane problemy