Broadcast ------传消息和事件的工具
1.注册一个广播
创建一个继承 BroadcastReceiver的类,重写onReceive()
Kotlin
class PlayMusicReceiver(private val callback:(Boolean)->Unit):BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val isPlay = intent!!.getBooleanExtra("EXTRA",true)
callback(isPlay)
}
}
在Service中获取刚创建的 BroadcastReceiver和传入了与之前Intent内部action相同的IntentFilter,进行判断可以注册后,调用registerReceiver()注册Broadcast
Kotlin
fun createReceiver(){
val intentFilter = IntentFilter("com.example.zj_action")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
registerReceiver(mReceiver,intentFilter,Context.RECEIVER_EXPORTED)
}else{
registerReceiver(mReceiver,intentFilter)
}
}
2.发送广播
自带sendBroacast(),传入一个Intent(action)即可 ,悄悄说,action是自己取名字当标识符
Intent.putExtra()可以传递额外值给目标
Kotlin
fun playBroadcast(){
val intent = Intent("com.example.zj_action")
intent.putExtra("EXTRA",true)
sendBroadcast(intent)
}
3.接收广播
Receiver类中通过高阶函数callback回调了Blooean值,再传递给PlayMusicReceiver的实例化类中
Kotlin
mReceiver = PlayMusicReceiver{
if (it){
playMusic("音频的url地址")
}else{
player.stop()
}
}
createReceiver()