Android内置了許多系統級别的廣播,我們可以在應用程式中通過監聽廣播來得到各種系統的狀态資訊。
我們要想收到廣播,就先得有廣播接收器。(就像是電台,會有許多頻道,如果你要收聽頻道,首先就得有收音機)
/**
* 建立一個廣播接收器
*/
public class MyReceiver extends BroadcastReceiver {
//1.建立一個類繼承BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent) {
//2.重寫onReceive方法(收到廣播時的動作,比如提示,日志,做下一步操作,看個人需求)
Toast.makeText(context,"network change",Toast.LENGTH_SHORT).show();
}
}
有了廣播接收器之後,接下來就是監聽注冊了。(有了收音機之後,可以确定要收聽的頻道了。)
第一種:(動态注冊)在代碼中注冊
//在MainActivity中重寫onCreate
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1.建立IntentFilter執行個體
IntentFilter intentFilter = new IntentFilter();
// 2.addAction(“廣播名”),要監聽什麼,就添加什麼廣播名
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//網絡變化是發出的廣播就是“android.net.conn.CONNECTIVITY_CHANGE”
// 3.調用registerReceiver()方法,把接收器(MyReceiver)和IntentFilter傳進去
myReceiver = new MyReceiver();
registerReceiver(myReceiver, intentFilter);
// 4.動态注冊的廣播接收器一定要取消注冊,
@Override
protected void onDestroy() {
super.onDestroy();
//onDestory中調用unregisterReceiver
unregisterReceiver(myReceiver);
}
注意:Android系統為了保證系統安全性,是以要聲明權限!不然程式可能會直接崩潰!這一點很重要!!
<!-- 通路網絡狀态的權限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
第二種:靜态注冊(AndroidManifest中)
這裡是開機廣播
<receiver android:name=".receiver.MyReceiver">
<intent-filter>
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED">
</action>
</intent-filter>
</receiver>
最後,和動态注冊一樣别忘了聲明權限
<!--接收開機-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
總結:動态注冊靈活,但必須要程式啟動後才能接收廣播;靜态注冊可以在程式未啟動的情況下就接收到廣播
學習參考:
《第一行代碼——Android》