Androidのネットワーク状態判断(wifiとモバイルネットワークデータ)
9000 ワード
ネットワークの状態の変化を傍受してユーザーのネットワーク状況をタイムリーに注意する必要がある場合があります.そのため、私たちは多くのネットワークの変化を傍受しなければなりません.くだらないことは言わないで、ネットワークの様々な状況をコードにリストして、必要なものは実際の状況によってヒントを与えることができます.1.まず、ブロードキャストの傍受が必要であり、ネットワーク状態の変化によってブロードキャストがトリガーされる.
以上がブロードキャストの登録であり、wifiの傍受には2種類のブロードキャストがあり、いずれも静的登録をサポートしているが、ネットワーク全体の傍受(wifi+モバイルネットワークデータ)には動的登録しかできない.
2.放送の受信と分析:
以上のように、log印刷は、総ネットワークとwifiネットワークを区別し、上位2つはwifiネットワーク専用の傍受であり、3つ目はネットワーク全体の傍受であるため、区別のためにネットワーク全体の傍受を未総ネットワークと呼ぶ.だから、ネットワークの判断を行うには、最後の総ネットワークで判断することができ、様々な状況が注釈されているので、必要な場合は自分の状況に応じて注意することができます.
//
<receiver
android:name=".receiver.StartServiceReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />// wifi
<action android:name="android.net.wifi.STATE_CHANGE" />// wifi
</intent-filter>
</receiver>
// ,
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);// ( wifi )
以上がブロードキャストの登録であり、wifiの傍受には2種類のブロードキャストがあり、いずれも静的登録をサポートしているが、ネットワーク全体の傍受(wifi+モバイルネットワークデータ)には動的登録しかできない.
2.放送の受信と分析:
public class StartServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// wifi , wifi
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
if (wifiState == WifiManager.WIFI_STATE_DISABLED) {//wifi
MlogUtil.d("netstatus", "wifi ");
} else if (wifiState == WifiManager.WIFI_STATE_ENABLED) {//wifi
MlogUtil.d("netstatus", "wifi ");
} else if (wifiState == WifiManager.WIFI_STATE_ENABLING) {//wifi
MlogUtil.d("netstatus", "wifi ");
} else if (wifiState == WifiManager.WIFI_STATE_DISABLING) {//wifi
MlogUtil.d("netstatus", "wifi ");
}
}
// wifi
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {
Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (parcelableExtra != null) {
MlogUtil.d("netstatus", "wifi parcelableExtra ");
NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {//
MlogUtil.d("netstatus", "wifi ");
if (networkInfo.isAvailable()) {//
MlogUtil.d("netstatus", "wifi , ");
} else {//
MlogUtil.d("netstatus", "wifi , ");
}
} else {//
MlogUtil.d("netstatus", "wifi ");
}
} else {
MlogUtil.d("netstatus", "wifi parcelableExtra ");
}
}
// , , wifi
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
// :wifi
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
MlogUtil.d("netstatus", " wifi ");
} else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
MlogUtil.d("netstatus", " ");
}
//
checkNetworkStatus(networkInfo);
}
}
private void checkNetworkStatus(NetworkInfo networkInfo) {
if (networkInfo != null) {
MlogUtil.d("netstatus", " info ");
if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {//
MlogUtil.d("netstatus", " ");
if (networkInfo.isAvailable()) {//
MlogUtil.d("netstatus", " , ");
} else {//
MlogUtil.d("netstatus", " , ");
}
} else if (networkInfo.getState() == NetworkInfo.State.DISCONNECTED) {//
MlogUtil.d("netstatus", " ");
}
} else {
MlogUtil.d("netstatus", " info ");
}
}
}
以上のように、log印刷は、総ネットワークとwifiネットワークを区別し、上位2つはwifiネットワーク専用の傍受であり、3つ目はネットワーク全体の傍受であるため、区別のためにネットワーク全体の傍受を未総ネットワークと呼ぶ.だから、ネットワークの判断を行うには、最後の総ネットワークで判断することができ、様々な状況が注釈されているので、必要な場合は自分の状況に応じて注意することができます.