我已注册到ConnectivityManager.CONNECTIVITY_ACTION
BroadcastReceiver,用于接收网络状态事件,但是当我打开或关闭wifi连接时,我的onReceive
功能未被调用。
正如文档中所提到的,这是一个粘滞广播接收器,当我们注册它时会被触发。
但是当我注册这个接收器时,我的onReceive
函数没有收到任何事件,可能是什么原因?
在我的清单文件中,我拥有访问Internet /网络/ Wifi连接及其状态的所有权限。
我正在使用以下代码注册此意图:
registerReceiver(mNetworkStateReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
在我的Logcat中,我得到以下错误消息寄存器:
01-01 00:05:29.804: ERROR/WifiHW(1305): Unable to open connection to supplicant on "/data/system/wpa_supplicant/wlan0": Connection refused
可能是什么原因?有没有办法找出BroadcastReceiver是否正确注册?
感谢。
答案 0 :(得分:4)
这对我有用:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name=".receiver.ConnectivityReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
代码:
public class ConnectivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(ConnectivityReceiver.class.getSimpleName(), "action: "
+ intent.getAction());
}
}
并且不要忘记注册所有网络权限。
答案 1 :(得分:3)
使用清单文件
进行尝试<receiver android:name=".MyNetworkStateReceiver" >
<intent-filter >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
课程MyNetworkStateReceiver
应该扩展BroadcastReceiver
答案 2 :(得分:0)
看起来像是一个较低级别的问题 - 谷歌搜索错误显示多个ROM黑客论坛和他们的wifi故障。你在测试什么?尝试在其他设备或模拟器上进行测试。 (我假设你已经尝试重启你的:))
此外,请确保在活动/服务被销毁时取消注册接收方(可能这与连接错误有关)
PS我知道你说过你这么做,但还是要仔细检查一下
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在你的清单中。
答案 3 :(得分:0)
您也可以尝试获取Internet,WIFI和多播锁的权限,尝试将这些权限添加到权限中。
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
我需要将这些权限用于我构建的内部应用程序,该应用程序不仅使用WiFi来发送和接收网络数据,还使用任何类型的网络适配器(LAN,RADIO),我可以通过SDK过滤C(设备必须植根)。但是使用这些权限我没有问题。