AndroidはConnective ityManagerでネットワーク状態をチェックします。
2637 ワード
Androidアプリケーションの開発においては、ネットワークアクセスを行うには、ユーザーに必要な注意喚起を提供するために、常にネットワーク状態のチェックが必要です。一般的にはConnective ityManagerでこの作業が完了します。
Connectivity Managerには4つの主要な任務があります。
1、携帯電話のネットワーク状態を傍受する(GPRS、WIFI、UMTSなどを含む)
2、携帯の状態が変わったら、放送を送ります。
3、ネットワーク接続に失敗した時、故障の切り替えを行う
4、アプリケーションのために利用可能なネットワークを取得できる高精度かつ粗い状態を提供します。プログラムの中でネットワークの状態をモニターしたい場合、いくつかのステップを実行すればいいです。
1、Receiverの重負荷のうちのonReceive関数を定義し、WIFIとGPRSによって切断されたかどうかによって空間の外観を変えるために必要な機能を完成させる。
テスト中にこのような状況に遭遇して、現在Wifiに接続されているルーティング装置をクローズしましたが、プログラムはunconnect networkを捉えていません。携帯機器がすぐに他のルート機器に接続されているためかもしれません。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
Connectivity Managerには4つの主要な任務があります。
1、携帯電話のネットワーク状態を傍受する(GPRS、WIFI、UMTSなどを含む)
2、携帯の状態が変わったら、放送を送ります。
3、ネットワーク接続に失敗した時、故障の切り替えを行う
4、アプリケーションのために利用可能なネットワークを取得できる高精度かつ粗い状態を提供します。プログラムの中でネットワークの状態をモニターしたい場合、いくつかのステップを実行すればいいです。
1、Receiverの重負荷のうちのonReceive関数を定義し、WIFIとGPRSによって切断されたかどうかによって空間の外観を変えるために必要な機能を完成させる。
connectionReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
Log.i(TAG, "unconnect");
// unconnect network
}else {
// connect network
}
}
};
2、適切な場所にReceiverを登録して、プログラムに登録できます。onCreateでは下記の関数を呼び出してもいいです。
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectionReceiver, intentFilter);
3、適切な時にReceiverの登録をキャンセルして、プログラムの中でキャンセルできます。on Destroyeで下記の関数を呼び出してもいいです。
if (connectionReceiver != null) {
unregisterReceiver(connectionReceiver);
}
Ps:インターネット上にはTelephonyManagerを使う方法がたくさんありますが、何度も試してみましたが、Activityに入ると自動的にネットワークが切断された信号が送られてきます。毎回、ネットワークの状態が変わった時に何度もリピートされて、状態が正しくないです。何か注意すべきところがありますか?教えてください。)
final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyMgr.listen(new PhoneStateListener(){
@Override
public void onDataConnectionStateChanged(int state) {
switch(state){
case TelephonyManager.DATA_DISCONNECTED://
break;
case TelephonyManager.DATA_CONNECTING://
break;
case TelephonyManager.DATA_CONNECTED://
break;
}
}
}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
第二の方法については、私は試したことがありません。第一の方法はやはり比較的に使いやすいです。もしプログラムがバックグラウンドに隠れているなら、serviceを開いて、BroadcastReceviceをserviceに登録することを提案します。でも登録のキャンセルを忘れないでください。テスト中にこのような状況に遭遇して、現在Wifiに接続されているルーティング装置をクローズしましたが、プログラムはunconnect networkを捉えていません。携帯機器がすぐに他のルート機器に接続されているためかもしれません。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。