我有一个应用程序,它更新每当手机连接到无线网络的数据库。 我实现了一个Service
和BroadcastReceiver
将运行Service
(它会告诉我是什么用网络),但问题是我不知道是什么在添加manifest
文件,以启动BroadcastReceiver
时,网络状态的改变或在它连接到某些类型的网络
Answer 1:
你需要
<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>
指示无线网络连接已被启用,禁用启用,禁用或未知。 一个额外提供了这种状态为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);
Answer 2:
这是我做什么来得到通知时,连接已经改变。 你定义一个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>
来源这里
Answer 3:
你应该做的BroadcastReceiver
,当连接状态已经改变,将触发:
这里同样的问题, 如何检查在整个应用程序的Internet连接定期?
Answer 4:
为了补充@ Dantalian的答案。 与Android牛轧糖开始,你不应该宣布你对你的清单接收器,因为它不会收到CONNECTIVITY_ACTION
广播。 而应该注册使用该接收机Context.registerReceiver(Receiver, Intent)
方法。
链接到源在这里
Answer 5:
声明意图过滤传递到广播接收器
IntentFilter filter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(mReceiver, filter);
在广播接收器,则检查EXTRA_WIFI_STATE;
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
switch (action)
{
case WifiManager.WIFI_STATE_CHANGED_ACTION:
int extra = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,0);
if(extra==WifiManager.WIFI_STATE_ENABLED)
{
}//...else WIFI_STATE_DISABLED, WIFI_STATE_DISABLING, WIFI_STATE_ENABLING
break;
}
}
};
文章来源: BroadcastReceiver when wifi or 3g network state changed