J1a*_*nd1 31 android android-service
我有一个应用程序,只要手机连接到WiFi,它就会更新数据库.我实现了一个Service和BroadcastReceiver这将运行Service(它会告诉我是什么用网络),但问题是我不知道是什么的在添加manifest文件开始BroadcastReceiver当它连接到某种当网络状态发生变化或网络
nul*_*ent 60
你需要
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
在你的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);
Run Code Online (Sandbox Code Playgroud)
WIFI_STATE_CHANGED
广播<intent-action>表示已启用,禁用,启用,禁用或未知Wi-Fi.一个额外提供此状态为int.如果可用,另一个额外提供先前的状态.
STATE_CHANGE
广播<intent-action>指示Wi-Fi连接状态已更改.一个额外的以NetworkInfo对象的形式提供新状态.如果新状态是CONNECTED,则额外的附加可以提供接入点的BSSID和WifiInfo.作为一个字符串
此外,您还需要在manifest标记内指定正确的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Run Code Online (Sandbox Code Playgroud)
要检查连接性,您可以使用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);
Run Code Online (Sandbox Code Playgroud)
这是我在连接发生变化时收到通知的方法.您定义a 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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还必须BroadcastReceiver在清单文件中定义并过滤ConnectivityChange.
<receiver android:name=".NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
来源于此
| 归档时间: |
|
| 查看次数: |
54041 次 |
| 最近记录: |