一,什么是廣播?
廣播, 做為Android的四大組件之一,被用于發(fā)送和接收,來自系統(tǒng)或其它app的消息。其設計原理,是基于觀察者模式來設計的,即先訂閱,后接收。廣播消息,并不受限于某一個單一進程。因此,它可以用于跨進程間的通信,在多個App之間傳遞消息。
二,廣播的分類。
根據(jù)廣播的訂閱(定義)方式和生命周期,我們可以將廣播歸納為2種類型,即靜態(tài)廣播與動態(tài)廣播。
- 靜態(tài)廣播
靜態(tài)注冊的廣播,在App被安裝后,就自動被系統(tǒng)的PackageManager注冊保存起來。這樣,哪怕你的app,沒有在運行,你的app也可以接收到廣播。訂閱這樣一個廣播,我們需要分2步實現(xiàn)。第1步,是創(chuàng)建一個類,繼承自BroadcastReceiver。第2步,是在配置清單文件(AndroidManifest.xml)里面,進行配置第1步所創(chuàng)建的類。
- 創(chuàng)建繼承自BroadcastReceiver的類,代碼如下:
class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// 當接收到廣播時,這個方法會被調用,intent參數(shù),包含了廣播所附帶的數(shù)據(jù)。
}
}
- 在AndroidManifest.xml里面,配置剛剛定義的類。這個<receiver></receiver>標簽,必須放在<application></application>標簽中間,與<activity/>標簽同層級。
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>
</receiver>
- 動態(tài)廣播
動態(tài)廣播,是指通過代碼,來動態(tài)訂閱。每一個動態(tài)廣播,都綁定一個上下文Context,要么是某個Activity的,要么是Application的。它的特點是,生命周期只局限于某個頁面的生命周期,亦或是App的生命周期。當綁定廣播的Activity或App被銷毀后,就無法再接收廣播。同樣地,訂閱這樣一個廣播,我們需要分2步走。第1步,是創(chuàng)建一個類,繼承自BroadcastReceiver,熟悉的配方,一樣的方式。第2步,創(chuàng)建該類的實例。
- 創(chuàng)建繼承自BroadcastReceiver的類,代碼如下:
class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// 當接收到廣播時,這個方法會被調用,intent參數(shù),包含了廣播所附帶的數(shù)據(jù)。
}
}
- 創(chuàng)建BroadcastReceiver子類的實例,代碼如下:
val br: BroadcastReceiver = MyBroadcastReceiver()
- 創(chuàng)建IntentFilter,添加訂閱事件,并注冊廣播。
val filter = IntentFilter()
// 添加要訂閱的廣播事件
filter.addAction(Intent.ACTION_SCREEN_OFF)
// 注冊廣播
registerReceiver(br, filter)