0
我需要检查我的设备是否连接到WiFi网络。但是发生的事件让我感到困惑。下面是步骤来重现:了解Android的Wifi状态
registerReceiver
所以我注册了一个接收器与行动WifiManager.NETWORK_STATE_CHANGED_ACTION)
:
private void registerReceiver() {
Log.v(TAG, "registerReceiver");
final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
broadcastReceiver = new ConnectivityBroadcastReceiver();
context.registerReceiver(broadcastReceiver, intentFilter);
}
的onReceive
这就是我如何接收的事件。
private class ConnectivityBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("Broadcast", "onReceive: " + intent.getAction());
final NetworkInfo networkInfo =
intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (networkInfo != null) {
final NetworkInfo.State state = networkInfo.getState();
final NetworkInfo.DetailedState detailedState = networkInfo.getDetailedState();
Log.d(TAG, "NetworkInfo.State: " + state);
Log.d(TAG, "NetworkInfo.DetailedState: " + detailedState);
}
final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
final WifiInfo wifiInfo = wifiManager.getConnectionInfo();
final SupplicantState supplicantState = wifiInfo.getSupplicantState();
final NetworkInfo.DetailedState detailedState = wifiInfo.getDetailedStateOf(supplicantState);
Log.d(TAG, "SupplicantState: " + supplicantState.toString());
Log.d(TAG, "DetailedStateOfSupplicant: " + detailedState.toString());
}
}
用户输入
- 我启动应用程序,拉Android的菜单从上往下,开wifi设置(保持的WiFi标志),并连接到WiFi网络。然后我回到我的应用程序。
或
- 我启动应用程序,从快速设置拉Android的菜单从上面,活性的WiFi下来。然后我回到我的应用程序。我的设备自动连接到已知的无线网络。
- 为什么这四个事件触发?
输出
首先,我收到有关CONNECTING
和AUTHENTICATING
一些事件。在这里一切似乎都很正常。
但后来我在一个设置获得连胜这个输出四次:
onReceive: Broadcast android.net.wifi.STATE_CHANGE
NetworkInfo.State: CONNECTED
NetworkInfo.DetailedState: CONNECTED
SupplicantState: COMPLETED
DetailedStateOfSupplicant: OBTAINING_IPADDR
即请求者状态COMPLETED
被映射到OBTAINING_IPADDR
根据文档似乎逻辑:
SupplicantState完成:
此状态表示请求者已经完成了其处理 用于关联相和数据连接完全配置为 。但请注意,可能没有任何与该连接相关联的IP地址 。通常,此时需要发送DHCP请求 以获取地址。
似乎是一个错误......当你调用'isConnectedWifi()'右后发生的,因为一个新建立的WiFi连接的无线网络事件,那么'getActiveNetworkInfo()'返回null,因为Android在那段时间无法切换默认值 – winklerrr