Android学习——动态注册监听网络变化
新建一个BroadcastTest项目,然后修改MainActivity中的代码,如下:
1 public class MainActivity extends AppCompatActivity { 2 private IntentFilter intentFilter; 3 private NetworkChangeReceiver networkChangeReceiver; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 intentFilter=new IntentFilter(); 10 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //广播接收器想要监听什么广播,就在这里添加相应的action 11 networkChangeReceiver=new NetworkChangeReceiver(); 12 registerReceiver(networkChangeReceiver,intentFilter); //调用resigerReceiver()方法进行注册 13 } 14 15 @Override 16 protected void onDestroy(){ 17 super.onDestroy(); 18 unregisterReceiver(networkChangeReceiver); 19 } 20 21 class NetworkChangeReceiver extends BroadcastReceiver{ 22 @Override 23 public void onReceive(Context context, Intent intent){ 24 // Toast.makeText(context,"network changes",Toast.LENGTH_SHORT).show(); 25 ConnectivityManager connectionManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); //得到系统服务类 26 NetworkInfo networkInfo=connectionManager.getActiveNetworkInfo(); 27 if(networkInfo!=null&&networkInfo.isAvailable()){ 28 Toast.makeText(context,"network is available",Toast.LENGTH_SHORT).show(); 29 }else{ 30 Toast.makeText(context,"network is unavailable",Toast.LENGTH_SHORT).show(); 31 } 32 } 33 } 34 }
动态注册的广播接收器一定要取消注册才行,在onDestroy()方法中通过调用unregisterReceiver()方法来实现。
访问系统的网络状态需要声明权限,打开AndroidManifest.xml文件,在里面加入权限,如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.administrator.broadcasttest"> 4 5 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 6 <application 7 android:allowBackup="true" 8 android:icon="@mipmap/ic_launcher" 9 android:label="@string/app_name" 10 android:supportsRtl="true" 11 android:theme="@style/AppTheme"> 12 <activity android:name=".MainActivity"> 13 <intent-filter> 14 <action android:name="android.intent.action.MAIN" /> 15 16 <category android:name="android.intent.category.LAUNCHER" /> 17 </intent-filter> 18 </activity> 19 </application> 20 21 </manifest>
运行程序,打开数据连接、关闭数据连接,效果如下: