无法接收网络相关事件
Posted
技术标签:
【中文标题】无法接收网络相关事件【英文标题】:Not able to receive network related events 【发布时间】:2012-02-09 17:26:39 【问题描述】:我已经注册到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 是否注册正确?
谢谢。
【问题讨论】:
如果您通过清单注册接收器,您会看到同样的问题吗?您的wifi连接可用于数据传输吗?是否可以在onReceive()
中为mNetworkStateReceiver
发布您使用的代码?
我没试过通过manifest文件注册,我先试试!
你可以考虑奖励赏金吗?否则它会白费
【参考方案1】:
这对我有用:
<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());
别忘了注册所有网络权限。
【讨论】:
够了<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
吧!还是我们必须添加任何其他权限?【参考方案2】:
使用清单文件尝试一下
<receiver android:name=".MyNetworkStateReceiver" >
<intent-filter >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
MyNetworkStateReceiver
类应该扩展 BroadcastReceiver
【讨论】:
我是通过JAVA代码做的,不需要在manifest文件中添加这个。【参考方案3】:看起来像一个较低级别的问题 - 谷歌搜索错误显示多个 ROM 黑客论坛及其 wifi 故障。你在测试什么?尝试在其他设备或模拟器上进行测试。 (我假设您已尝试重新启动您的 :))
另外,请确保在您的活动/服务被破坏时取消注册接收器(可能这与连接错误有关)
PS 我知道你说过你做了,但还是要仔细检查一下
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在您的清单中。
【讨论】:
【参考方案4】:您也可以尝试获取互联网、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 发送和接收网络数据,还使用我可以通过 SDK 过滤的任何类型的网络适配器(LAN、RADIO) C(设备必须植根)。但是使用这些权限我没有问题。
【讨论】:
以上是关于无法接收网络相关事件的主要内容,如果未能解决你的问题,请参考以下文章