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>

运行程序,打开数据连接、关闭数据连接,效果如下:

posted @ 2017-07-19 15:28  最咸的鱼  阅读(936)  评论(0编辑  收藏  举报