无线或3Gnetworking状态改变时BroadcastReceiver
我开始开发一个应用程序,每当手机连接到WiFi就会更新数据库。 我已经实现了一个Service
和BroadcastReceiver
将运行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)
方法来注册接收方。
链接到这里的来源
- Android:CoordinatorLayout和SwipeRefreshLayout
- 如何防止自定义视图在屏幕方向更改中丢失状态
- Android应用程序架构 – build议的模型是什么?
- 如何知道我的文本视图是否已被省略?
- Android:如何检测滚动何时结束
- Eclipse的Android和gitignore
- 关于全屏和清单没有标题栏
- android:drawableLeft margin和/或padding
- java.lang.ClassCastException:android.view.ViewGroup $ LayoutParams不能转换为android.widget.Gallery $ LayoutParams