ネットワーク情報を取得するには、対応する権限を AndroidManifest.xml ファイルに追加する必要があります。
1) ネットワーク接続があるかどうかを確認します。
public boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); falseを返します。}
2) WIFI ネットワークが利用可能かどうかを確認します。
public boolean isWifiConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWiFiNetworkInfo = mConnectivityManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWiFiNetworkInfo != null) { return mWiFiNetworkInfo.isAvailable(); falseを返します。}
3) MOBILE ネットワークが利用可能かどうかを確認します。
public boolean isMobileConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mMobileNetworkInfo = mConnectivityManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (mMobileNetworkInfo != null) { return mMobileNetworkInfo.isAvailable(); falseを返します。}
4) 現在のネットワーク接続のタイプ情報を取得しますManager) Context .getSystemService
(context.connectivity_service) ; networkinfo mnetworkinfo = mconnectivityManager.getActualInfo ();););););;););;);); ;););;););;);;); 1 ; GetActualNetWorkinfo ();). if (mNetworkInfo != null && mNetworkInfo.isAvailable()) { return mNetworkInfo.getType(); } } return -1 ; }
Android アプリケーションを開発する場合、ネットワーク アクセスに関しては、ユーザーに必要な通知を提供するためにネットワークの状態を確認する必要があることがよくあります。通常、この作業は ConnectivityManager を通じて実行できます。
ConnectivityManager には 4 つの主なタスクがあります。
1.モバイルネットワークステータスを監視します(GPRS、WIFI、UMTSなどを含む)
2. 携帯電話の状態が変化したらブロードキャストを送信します
3. ネットワーク接続障害時のフェイルオーバー
4. 利用可能なネットワークの高精度かつ粗粒度の状態をアプリケーションに提供する
プログラムでネットワークのステータスを監視したい場合は、次のいくつかの手順に従うだけです。
1. onReceive 関数をオーバーロードするように Receiver を定義し、WIFI と GPRS が切断されているかどうかに応じて空間の外観を変更するなど、その中で必要な機能を完了します。
connectionReceiver = new BroadcastReceiver() {
@Override
public void onReceive(コンテキスト コンテキスト, インテント インテント) { 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();
tentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectionReceiver、intentFilter);
3. 必要に応じてレシーバーの登録を解除します。プログラム内でキャンセルできます。onDestroye で次の関数を呼び出すだけです。
if (connectionReceiver != null) { unregisterReceiver(connectionReceiver); }
追伸: インターネット上には TelephonyManager を使用する方法がまだたくさんあります。方法は次のとおりです (ただし、何度か試しましたが、初めてアクティビティに入るたびに自動的に信号を受信するなどの問題がありました)ネットワーク切断やネットワークステータスが変わるたびにコールバックが何度も来てステータスがおかしい。何に注意すればいいのか分からないのでアドバイスください!)
Final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyMgr.listen(new PhoneStateListener(){
@オーバーライド
public void onDataConnectionStateChanged(int state) {
スイッチ(状態){
case TelephonyManager.DATA_DISCONNECTED://ネットワークが切断されました
壊す;
case TelephonyManager.DATA_CONNECTING://ネットワークが接続中です
壊す;
case TelephonyManager.DATA_CONNECTED://ネットワークに接続
壊す;
}
}
}、PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
2番目の方法については、まだ試していません。最初の方法はまだ比較的簡単に使用できますが、プログラムをバックグラウンドに隠したい場合は、サービスを開いてそのサービスに BroadcastReceiver を登録することをお勧めしますが、登録をキャンセルすることを忘れないでください。
テスト中にこのような状況に遭遇しました。現在 Wi-Fi に接続されているルーティング デバイスがオフになっていますが、プログラムは未接続のネットワークをキャプチャしません。これは、おそらくモバイル デバイスがすぐに別のルーティング デバイスに接続されているためだと思われます。
Android監視ネットワークステータス
public static boolean isNetworkAvailable(Context context) { ConnectivityManager 接続 = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity == null) { Log.i(“NetWorkState”, “Unavailabel”); false を返します。} else { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { Log.i(“NetWorkState” 、「利用可能なラベル」); true を返します。falseを返します。}
上記メソッドは、ネットワークが接続されているかどうかを判定し、ネットワークが存在する場合は true を返し、ネットワークが存在しない場合は false を返すコードです。Androidのネットワークアプリケーションの開発では、ネットワークに接続できるかどうかを判断する必要があるため、ネットワークの状態の変化を監視する必要があることがよくあります。
Android のネットワーク ステータス監視では、 BroadcastReceiverを使用してネットワーク ステータス変更のブロードキャストを受信できます。具体的な実装は次のとおり
です 。
ブール値の成功 = false;
//ネットワーク接続サービスを取得
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
// 状態 state = connManager.getActiveNetworkInfo().getState();
状態 state = connManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).getState(); //ネットワーク接続ステータスを取得します
if (State.CONNECTED == state) { // WIFI ネットワークが使用されているかどうかを判断します
success = true;
}
state = connManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE).getState(); // ネットワーク接続ステータスを取得します
if (State.CONNECTED != state) { // GPRS ネットワークが使用されているかどうかを判断します
success = true;
}
if (!success) { Toast.makeText(LocationMapActivity.this, "ネットワーク接続が中断されました", Toast.LENGTH_LONG).show(); }
}
アクティビティの onCreate で:
//ネットワーク監視の登録
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetworkStateReceiver, filter);
//アクティビティの onDestroy:'
unregisterReceiver(mNetworkStateReceiver); //監視をキャンセル
現在の Android プラットフォームの携帯電話に関する限り、4 つの状態がある可能性があるため、多くの友人は Android 開発中に携帯電話のネットワーク タイプの判断に遭遇するでしょう。
1.无网络(这种状态可能是因为手机停机,网络没有开启,信号不好等原因)
2.使用WIFI上网
3.CMWAP(中国移动代理)
4.CMNET上网
ネットワークの判定方法は以下のとおりです。
-
現在のネットワークステータスを取得します -1: ネットワークなし 1: WIFI ネットワーク 2: WAP ネットワーク 3: ネットネットワーク
public static int getAPNType(Context context){
int netType = -1; ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if(networkInfo==null){ return netType; } int nType = networkInfo.getType(); if(nType==ConnectivityManager.TYPE_MOBILE){ Log.e("networkInfo.getExtraInfo()", "networkInfo.getExtraInfo() is "+networkInfo.getExtraInfo()); if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){ netType = CMNET; } else{ netType = CMWAP; } } else if(nType==ConnectivityManager.TYPE_WIFI){ netType = WIFI; } return netType;
}