用于注册广播接收器。在OnReceive中的广播接收类中:NetworkInfo ne">
我已经用Wifi广播接收器开发了一个应用程序。我的要求是在Wifi通过获取IP地址连接到路由器时获得功能调用,以及当Wifi与先前连接的路由器断开连接时调用另一个函数。
--我在Manifest中使用了这个
<action android:name="android.net.wifi.STATE_CHANGE" />
用于注册广播接收器。
在OnReceive
中的广播接收类中:
NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
NetworkInfo.State state = networkInfo.getState();
if (state == NetworkInfo.State.CONNECTED) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wi = wifiManager.getConnectionInfo();
Log.e("++++WiFi Conected","++++WiFi Conected");
Flags.wifiState = true;
updateWifiSyncTrue(context);
if (wi.getIpAddress() != 0) {
intent = new Intent(context, ConnectionService.class);
intent.putExtra("intentValue", "signalOn");
intent.putExtra("bssId", wi.getBSSID());
context.startService(intent);
}
}
if (state == NetworkInfo.State.DISCONNECTED) {
Log.e("++++WiFi DisConected","++++WiFi DisConnected");
Flags.wifiState = false;
updateWifiSyncFalse(context);
updateRouterSyncFalse(context);
intent = new Intent(context, ConnectionService.class);
intent.putExtra("intentValue", "signalOff");
context.startService(intent);
}
每样东西都能工作到KitKat为止,但是当我用棒棒糖版本进行测试时,收到了很多次请求。
当我把我的WiFi打开其结果的为状态时:空闲--连接有时也会断线。
同时关闭。连接--断开--断开
NetworkInfo
的调试结果如下所示:
[type: WIFI[], state: CONNECTING/CONNECTING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/AUTHENTICATING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/AUTHENTICATING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/CONNECTING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/OBTAINING_IPADDR, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/CAPTIVE_PORTAL_CHECK, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/CAPTIVE_PORTAL_CHECK, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false].
我也恳请你帮助我。使用我的代码打开wifi时,CONNECTED
状态会执行多次,DISCONNECTED
状态也会执行多次。
当WIFI被关闭时,连接状态被生成,然后4-5断开状态。
我用HTC手机做测试。
我使用了简单的编码,是否需要对此进行更深入的条件检查?(详细情况等)
处理此解决方案的最佳方法是什么?
发布于 2016-12-29 02:04:51
当您使用意图过滤器android.net.wifi.STATE_CHANGE
时,它将多次触发广播接收器.例如,如果您正在打开wifi,那么广播的onreceive
将在任何地方调用1-5次多次。因此,它将为您提供多个NetworkInfo.State.CONNECTED
,与断开连接相同。
因此,如果您只想有一个连接或断开,它的输出意味着只需使用一个布尔标志,并正确设置它的方式,首先,如果启用wifi,意味着它应该忽略剩余的wifi连接意图和类似的wifi断开也。
https://stackoverflow.com/questions/40360665
复制