BroadcastReceiver 不工作(检测是不是连接了wifi)
Posted
技术标签:
【中文标题】BroadcastReceiver 不工作(检测是不是连接了wifi)【英文标题】:BroadcastReceiver is not working (detect if wifi is connected)BroadcastReceiver 不工作(检测是否连接了wifi) 【发布时间】:2014-06-19 19:14:21 【问题描述】:我正在尝试使用 BroadcastReceiver 来检测 wifi 是否已连接,并在状态更改(wifi 断开/重新连接/关闭)时简单地显示一个 toast,但它似乎不起作用。有什么想法吗?
ConnectionChangeReceiver 类:
public class ConnectionChangeReceiver extends BroadcastReceiver
@Override
public void onReceive( Context context, Intent intent )
ConnectivityManager connMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final boolean isWifiConn = networkInfo.isConnected();
Log.d("debug", "Wifi connected: " + isWifiConn);
Toast toast = Toast.makeText(context, "Wifi connected: " + isWifiConn, Toast.LENGTH_LONG);
toast.show();
清单:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<receiver android:name="ConnectionChangeReceiver" android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>
</receiver>
我进入应用程序,然后断开 wifi,重新连接,没有 toast。我禁用了wifi,没有吐司。重新启用它,没有吐司。我怀疑广播接收器有问题。
提前致谢。
【问题讨论】:
【参考方案1】:我搞定了。
我的问题出在 Manifest 中。我将接收器块放在应用程序标签之外。一旦我把它移到里面,它就完美地工作了。
【讨论】:
我猜这会在 wifi 改变一次时触发多次? 是的,你是对的。从WIFI关闭->打开时,我注意到它会触发两次。一次 isAvaialble() true && isConnected() false,第二次 isAvailable() true && isConnected() true。不过,它不应该对应用程序造成太大压力,而且我还没有找到另一种解决方法。我相信这是正确的实现方式。以上是关于BroadcastReceiver 不工作(检测是不是连接了wifi)的主要内容,如果未能解决你的问题,请参考以下文章
Android:BroadcastReceiver 意图检测拍摄的相机照片?
执行 createChooser(context,intent,IntentSender) 后不调用 BroadcastReceiver
Android 3.1 USB-Host - BroadcastReceiver 不接收 USB_DEVICE_ATTACHED