我有一个应用程序,每当手机连接到WiFi时,该应用程序都会更新数据库。我已经实现了Service
并BroadcastReceiver
可以运行Service
(它会告诉我正在使用什么网络),但是问题是我不知道要在网络状态更改或何时连接到某种网络时在manifest
文件中添加什么内容来启动BroadcastReceiver
。网络的
3 回答

你需要
<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
广播,<intent-action>指示Wi-Fi连接状态已更改。一个额外的功能以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);

这是我要在连接更改时得到通知的方法。您定义一个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>

补充@Dantalian的答案。从Android Nougat开始,您不应在清单上声明接收器,因为它不会接收CONNECTIVITY_ACTION
广播。您应该改为使用Context.registerReceiver(Receiver, Intent)
方法注册您的接收器。
添加回答
举报