2013-04-02 12 views
6

Ich möchte einen Test einrichten, um zu sehen, ob mein Code ordnungsgemäß funktioniert, wenn kein Internetzugang vorhanden ist. Gibt es eine Möglichkeit, den Internetzugang für einen Test vorübergehend herunterzufahren?Vorübergehend den Internetzugang in Android deaktivieren?

Ich versuchte mich umzusehen, aber ich konnte es nicht finden.

Vielen Dank im Voraus, Classy

+0

Sie wollen es in dem Code zu tun? Oder deaktivieren Sie es einfach manuell auf Ihrem Gerät? –

+0

im Code idealerweise möchte ich in der Lage sein, dies in einen JUnit-Test zu integrieren. – Classtronaut

Antwort

4

Lebkuchen und höher mit diesem Codebeispiel sollte für Android-Handys funktionieren: Diese aktivieren/deaktivieren Datenverbindung

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

Sie

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

nicht vergessen, diese Zeile in die Manifest-Datei hinzufügen Auch, Ich weiß über die Aktivierung oder Deaktivierung von wifi:

wobei der Status je nach Anforderung wahr oder falsch sein kann.

Auch bei manifest:

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

Danke, das ist genau das, was ich gesucht habe.:) – Classtronaut

+0

Dann ist es eine gute Idee, die Antwort zu akzeptieren. – JacksOnF1re

+0

Es funktioniert nicht für mich. Ich erhalte diesen Fehler 'java.lang.NoSuchMethodException: setMobileDataEnabled [boolean]'. Gerät: Nexus 5x, Android-Version: 7.1.1 –

2

Nun, zu deaktivieren, Wireless-LAN, können Sie diesen Code verwenden:

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

zu Deaktivieren Sie die Datenverbindung, Sie könnten die Lösung hier verwenden: https://stackoverflow.com/a/4304110/450534. Dieses Verfahren ist jedoch, tut nicht Arbeit auf 2.3+

Diese Antwort hier eine Lösung für beide 2.3+ und 2.2 hat und unten: https://stackoverflow.com/a/12535246/450534. Sie können eine einfache API-Prüfung durchführen und entscheiden, welcher Code ausgeführt werden soll. So etwas sollte Sie einrichten:

Sehen Sie, welche der beiden für Sie arbeitet. Ich vermute, es wäre der spätere. Ich bin persönlich nie dazu gekommen, die Aktivierung oder Deaktivierung der Datenverbindung zu testen.

Requisiten für die Autoren der verknüpften Lösungen. ;-)

HINWEIS:Die Data Connectivity-Lösungen basieren auf inoffiziellen APIs und funktionieren möglicherweise nicht in zukünftigen Versionen.

Verwandte Themen