无线或3Gnetworking状态改变时BroadcastReceiver

我开始开发一个应用程序,每当手机连接到WiFi就会更新数据库。 我已经实现了一个ServiceBroadcastReceiver将运行Service (它会告诉我什么networking正在使用),但问题是我不知道要在清单文件中添加什么来启动BroadcastReceiver当networking状态改变或什么时候它连接到某种networking

谢谢。

你会想要的

 <intent-filter> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> <action android:name="android.net.wifi.STATE_CHANGE"/> </intent-filter> 

在您的接收器标签中。

或者,如果您想对其进行更多的控制,请在注册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

广播意图操作,表示Wi-Fi已启用,禁用,启用,禁用或未知。 一个额外提供这个状态作为一个int。 如果可用,另一个额外提供以前的状态。

STATE_CHANGE

广播意图操作,指示Wi-Fi连接状态已更改。 一个额外的提供了一个NetworkInfo对象forms的新状态。 如果新状态是CONNECTED,则额外的额外资源可以提供接入点的BSSID和WifiInfo。 作为一个string

另外,你需要在“manifest”标签中指定正确的权限:

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

要检查连通性,可以使用ConnectivityManager,因为它告诉您可用的连接types。

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

您还必须在清单中定义BroadCast并通过ConnectivityChange进行过滤。

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

来源于此

您应该制作一个在连接状态发生变化时将被触发的BroadcastReceiver

这里同样的问题如何在整个应用程序中定期检查Internet连接?

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

链接到这里的来源