インターネットにアクセスできないときにコードが正しく動作するかどうかを確認するテストをセットアップしたいと考えています。テストのためにインターネット アクセスを一時的にシャットダウンする方法はありますか?
辺りを見回してみたが見つからなかった。
このコード サンプルは、gingerbread 以降を実行している Android スマートフォンで動作するはずです。このデータ接続の有効化/無効化
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);
}
この行をマニフェスト ファイルに追加することを忘れないでください
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
また、wifiを有効または無効にすることも知っています:
WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);
status は、要件に応じて true または false の場合があります。
マニフェストでも:
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Well, to disable Wifi, you can use this code:
WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true); // "true" TO ENABLE || "false" TO DISABLE
To disable the Data connection, you could use the solution here: https://stackoverflow.com/a/4304110/450534. This method, however, does not work on 2.3+
This answer here has a solution for both 2.3+ and 2.2 and below: https://stackoverflow.com/a/12535246/450534. You could do a simple API check and decide which piece of code to run. Something like this should get you set up:
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
}
See which of the two works for you. I suspect, it would be the later. I have personally never gotten around to testing the enabling or disabling Data connectivity though.
Props to the authors of the linked solutions. ;-)
NOTE: The Data Connectivity solutions are based on unofficial API's and may not work in future releases.
If you are using emulator, you can turn off internet access for it in DDMS
settings.
Check out: