Android网络状态监听
时间: 2023-10-25 07:07:13 浏览: 45
Android提供了一个ConnectivityManager类来监听网络状态的变化。ConnectivityManager类可以通过注册BroadcastReceiver来实现网络状态的监听,也可以通过调用该类的方法来获取当前网络状态。
以下是通过注册BroadcastReceiver来监听网络状态的代码示例:
1. 创建一个BroadcastReceiver类
```
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 获取网络状态
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
// 网络已连接
} else {
// 网络未连接
}
}
}
```
2. 在AndroidManifest.xml文件中注册BroadcastReceiver
```
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
...
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
...
</application>
```
在上面的代码中,我们注册了两个IntentFilter,一个是CONNECTIVITY_CHANGE,另一个是WIFI_STATE_CHANGED。这样,当网络状态发生变化时,系统会发送一个广播,我们的BroadcastReceiver就会接收到这个广播,并在onReceive方法中处理。
通过调用ConnectivityManager类的方法来获取当前网络状态的代码示例:
```
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
// 网络已连接
} else {
// 网络未连接
}
```
在上面的代码中,我们通过调用ConnectivityManager类的getActiveNetworkInfo方法来获取当前网络状态。如果返回的networkInfo对象不为空,并且isConnected方法返回true,那么就表示当前网络已连接。否则,就表示当前网络未连接。