web-dev-qa-db-ja.com

ネットワークを無効/有効にするには、Android emulator?

Android( http://deaconproject.org/ )のプッシュ通知ライブラリに取り組んでいます。これは、ネットワーク接続が中断または変更された場合にアクションを取る必要があります。つまり、ネットワーク接続が利用可能になるまで、サーバー接続を再開始するか、操作を一時停止する必要があります。これは、「Android.net.ConnectivityManager.CONNECTIVITY_ACTION」のAndroid BroadcastReceiverを使用して正常に動作するようです。

私の問題はライブラリをテストすることです-さまざまな構成条件の下で、破損したネットワーク接続または3GからWiFiへの移行に対するライブラリの応答を自動的にテストしたいと思います。問題は、エミュレータと一緒に座って一日中F8キーを押したくないことです。

機内モードを切り替えることなく、jUnitテスト内からAndroidのネットワーク接続をプログラムで操作する方法はありますか?コンソール経由でエミュレータにコマンドを発行したり、GSMモードなどを操作したりしましたが、ディスプレイの電話の状態が変わっても、インターネット接続は維持されます。

28
mtbkrdave

[プロジェクトエクスプローラ]パネルでプロジェクトを右クリックし、[実行]、[構成の実行]の順に選択します。

モーダルモードで表示されるウィンドウの左側で[Androidアプリケーション]を選択し、同じウィンドウの右側で[ターゲット]タブを選択します。

ウィンドウの下部の「エミュレーター起動パラメーター」セクションには、インターネット接続に関するオプションが多数あります。

これがお役に立てば幸いです。

イゴール

7
Igor

Android Dev Tools アプリが非常に役立つことがわかりました。

ネットワーク接続などの重要なシステム設定を操作できます。さらに、wifiのオンとオフを自動的に切り替える間隔を設定できるため、ネットワーク関連のブロードキャストレシーバーをテストできます。

開発ツールアプリケーションを実際の開発デバイスにインストールする場合は、エミュレータからアプリケーションをコピーしてから、ADBを使用してデバイスにインストールできます。実行中のエミュレータからアプリケーションをコピーするには、次を実行します。

adb -e pull /system/app/Development.apk ./Development.apk

これにより、.apkファイルが現在のディレクトリにコピーされます。次に、接続デバイスに次のようにインストールします:

adb -d install Development.apk

enter image description here

6
Sander Versluys

Eclipseのエミュレーター制御ビューもご覧ください。現時点では、データを強制的に削除することはできませんが、そのように見えますshould

alt text

4
Chris

残念ながら、プログラムでユニットテスト内からネットワークアクセスを完全に無効にする方法はありません。この問題に対して Android拡張リクエスト を提出しました。

4
Jeff Axelrod

シンプルですが、少し長くて重いソリューションは、wifi接続状態モニターに抽象化レイヤーを追加することです。

エンティティ(NetworkStateManager)を追加します。アプリケーションスコープのシングルトンである必要があります(これにRoboGuiceまたはDaggerをきれいに参照するか、アプリケーションインスタンスを介して一意のインスタンスにアクセスします)。

Observable Observerデザインパターンを使用して、このエンティティにリスナーを登録、登録解除するメソッドを追加します。

各アクティビティは、onStartで登録し、onStopで登録解除する必要があります。

エンティティ自体はBroadCastReceiverによって変更されます。

これは完全にテスト可能です。DIフレームワークを使用する場合、アクティビティに駆動可能なスタブを挿入し、ネットワーク状態の変化に対する反応を確認できます。

0
Snicolas