- 標(biāo)準(zhǔn)廣播
異步奠衔、效率高 - 有序廣播
同步執(zhí)行谆刨,優(yōu)先級(jí)高的 BroadcastReceiver 先收到廣播信息,調(diào)用 abortBroadcast() 截?cái)嗾趥鬟f的廣播
注冊(cè)廣播
- 動(dòng)態(tài)注冊(cè)
class MainActivity : AppCompatActivity() {
lateinit var timeChangeReceiver: TimeChangeReceiver
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val intentFilter = IntentFilter()
intentFilter.addAction("android.intent.action.TIME_TICK")
timeChangeReceiver = TimeChangeReceiver()
registerReceiver(timeChangeReceiver, intentFilter)
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(timeChangeReceiver)
}
inner class TimeChangeReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context, "Time has changed", Toast.LENGTH_SHORT).show()
}
}
}
- 靜態(tài)注冊(cè)
→New→Other→Broadcast Receiver
Exported屬性表示是否允許這個(gè)BroadcastReceiver 接收本程序以外的廣播
Enabled屬性表示是否啟用這個(gè)BroadcastR eceiver
Android Studio 自動(dòng)在 ANdroidManifest.xml文件中完成注冊(cè)
發(fā)送廣播
- 發(fā)送標(biāo)準(zhǔn)廣播
val intent = Intent("com.example.broadcasttest.MY_BROADCAST")
intent.setPackage(packageName)
sendBroadcast(intent)
默認(rèn)發(fā)送隱式廣播归斤,調(diào)用 setPackage() 傳入要接收廣播的應(yīng)用程序包名痊夭,從而將它變成了顯式廣播,否則靜態(tài)注冊(cè)的BroadcastReceiver將無(wú)法接到這條廣播脏里。
- 發(fā)送有序廣播
sendOrderedBroadcast(intent, null)