6

我已经注册到ConnectivityManager.CONNECTIVITY_ACTIONBroadcastReceiver,用于接收网络状态事件,但是onReceive当我打开或关闭我的 wifi 连接时,我的函数没有被调用。

正如文档中提到的,这是一个粘性广播接收器,当我们注册它时会被触发。

但是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 是否正确注册?

谢谢。

4

4 回答 4

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());
  }
}

并且不要忘记注册所有网络权限。

于 2012-01-25T09:25:03.003 回答
3

使用清单文件尝试

<receiver android:name=".MyNetworkStateReceiver" >
    <intent-filter >
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

MyNetworkStateReceiver应该扩展BroadcastReceiver

于 2012-01-22T13:14:33.133 回答
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),我可以通过 C 中的 SDK 过滤(设备必须植根)。但是使用这些权限我没有问题。

于 2012-01-24T15:20:30.717 回答
0

看起来像一个较低级别的问题 - 谷歌搜索错误显示多个 ROM 黑客论坛及其 wifi 故障。你在测试什么?尝试在其他设备或模拟器上进行测试。(我假设您已尝试重新启动您的 :))

另外,请确保在您的活动/服务被破坏时取消注册接收器(可能这与连接错误有关)

PS我知道你说你做了,但仍然仔细检查你有

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在你的清单中。

于 2012-01-23T13:31:59.377 回答