我有一个应用程序,每当手机连接到WiFi时,它就会更新数据库。我已经实现了一个将运行Service
的Service
和BroadcastReceiver
(它将告诉我正在使用哪个网络),但问题是,我不知道在网络状态更改或连接到某种网络时在manifest
文件中添加什么来启动BroadcastReceiver
发布于 2012-05-24 15:40:39
你需要
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>
在您的receiver
标签中。
或者,如果您想要对其进行更多控制,请在注册BroadcastReceiver
之前设置以下内容:
final IntentFilter filters = new IntentFilter();
filters.addAction("android.net.wifi.WIFI_STATE_CHANGED");
filters.addAction("android.net.wifi.STATE_CHANGE");
super.registerReceiver(yourReceiver, filters);
WIFI_STATE_CHANGED
广播<intent-action>
,表示Wi-Fi已启用、禁用、启用、禁用或未知。一个额外的函数将此状态作为int提供。另一个额外提供以前的状态(如果可用)。
STATE_CHANGE
表示Wi-Fi连接状态已更改的广播<intent-action>
。一个额外的以NetworkInfo对象的形式提供新状态。如果新状态已连接,则其他附加设备可能会提供接入点的BSSID和WifiInfo。作为字符串
此外,您还需要在manifest
标记中指定正确的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
要检查连接,您可以使用ConnectivityManager
,因为它会告诉您可用的连接类型。
ConnectivityManager conMngr = (ConnectivityManager)this.getSystemService(this.CONNECTIVITY_SERVICE);
android.net.NetworkInfo wifi = conMngr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
android.net.NetworkInfo mobile = conMngr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
发布于 2015-07-21 19:53:30
这就是我在连接发生变化时得到通知的方法。您需要定义一个BroadCastReceiver
来接收广播。
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isConnected = wifi != null && wifi.isConnectedOrConnecting() ||
mobile != null && mobile.isConnectedOrConnecting();
if (isConnected) {
Log.d("Network Available ", "YES");
} else {
Log.d("Network Available ", "NO");
}
}
}
您还必须在清单文件中定义该BroadcastReceiver
,并按ConnectivityChange
进行过滤。
<receiver android:name=".NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
源here
发布于 2017-09-22 00:16:24
来补充@Dantalian的答案。从Android Nougat开始,您不应该在清单中声明您的接收器,因为它不会接收CONNECTIVITY_ACTION
广播。相反,您应该使用Context.registerReceiver(Receiver, Intent)
方法注册接收器。
指向源here的链接
https://stackoverflow.com/questions/10733121
复制相似问题