《第一行程式碼》 第五章:全域性大喇叭 筆記(基於Android8.0)
阿新 • • 發佈:2018-12-13
由於Android8.0對廣播機制做了很大的調整理,導致《第一行程式碼》中很多例項無法正常執行,因此我結合書本,自行整理了一下。
廣播需要接收器和傳送器。系統的動作都會發送一條廣播,例如電量的變化,系統的開機。我們的應用程式如果需要,可以通過接收器接到這樣的訊息。接收器有兩種宣告方式:靜態接收器和動態接收器。在8.0中,靜態接收器被大幅度削弱,因此我們先來看
動態接收器。
①動態接收器首先在活動中宣告一個內類,該類繼承自BroadCastReceiver,在其中重寫onReceiver方法。裡面加上你接收到廣播之後要進行的操作。
②隨後在主類中宣告InterFilter類的例項,並給他的物件.addAction("要接受的廣播");然後建立內部類的例項;最後對InterFilter和內部類的例項進行註冊即可,註冊方式為
registerReceiver(myReceiver,intentFilter);
③動態註冊的接收器必須要要有取消註冊的操作,在主類中重寫onDestory方法
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
到此,我們動態建立的接收器完成了。接下來看
靜態建立接收器
①在包上new-other-BroadCast Receiver,finish
②在onReceive方法中,新增接受到廣播後的邏輯。
③注意AndroidManIfest.xml,在它裡面自動添加了<receiver>標籤,我們在標籤之間新增
<intent-filter>
<action android:name="要接受廣播名稱/>
</intent-filter>
在8.0中,靜態接收器已經收不到大部分廣播了。
在廣播接收器中不允許開啟多執行緒的,所以在其中不要新增耗費時間的操作。當onReceive方法運行了較長時間而沒有結束時,程式就會報錯。
認識廣播發送器
廣播發送器比較簡單兩句話
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);//全域性廣播
如果希望本應用程式的靜態接收器接受到本應用程式發出的廣播,那麼程式碼如下:
Intent intent=new Intent("廣播名");
intent.setCompanent(new ComponentName(自定義廣播的包名,廣播接收器的類));
//參考https://blog.csdn.net/a773608079/article/details/79665798