Android 系统会发送一些系统级的广播,当设备的网络状态发生变化时,系统会发送一个名为 CONNECTIVITY_ACTION 的广播,开发者可以通过接收这个广播来获取设备的网络状态。
以下是一个简单的广播接收器示例,用于接收系统发出的关于网络状态变化的广播:
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.isAvailable()) {
Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
}
}
}
在 AndroidManifest.xml 文件中注册此广播接收器:
<receiver
android:name=".NetworkChangeReceiver"
android:exported="true" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
需要注意的是,从 Android N(7.0)开始,系统对 CONNECTIVITY_ACTION 广播做了一些限制,只有当应用处于运行状态时,才能在动态注册的广播接收器中接收到此广播。也就是说,你不能再在 AndroidManifest.xml 中静态注册 CONNECTIVITY_ACTION 广播。 如果你需要在应用不运行时也能接收到网络变化的通知,你可能需要使用 JobScheduler,或者考虑使用第三方的网络监听库。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/171982.html