Android學習——動態註冊監聽網路變化,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"); //廣播接收器想要監聽什麼廣播,就在這裡添加相應的action11 networkChangeReceiver=new NetworkChangeReceiver();12 registerReceiver(networkChangeReceiver,intentFilter); //調用resigerReceiver()方法進行註冊13 }14 15 @Override16 protected void onDestroy(){17 super.onDestroy();18 unregisterReceiver(networkChangeReceiver);19 }20 21 class NetworkChangeReceiver extends BroadcastReceiver{22 @Override23 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>
運行程式,開啟資料連線、關閉資料連線,效果如下: