1. 程式人生 > >《第一行程式碼》 第五章:全域性大喇叭 筆記(基於Android8.0)

《第一行程式碼》 第五章:全域性大喇叭 筆記(基於Android8.0)

由於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