BroadcastReceiver(广播接收器)是应用程序元件之一,类似於订阅与发布的设计模式,分为Broadcaster(广播器)与Receiver(接收器),广波器可发送自定义或系统预设的广播事件,让接收器取得讯息,而接受器则注册特定的频道,等待广播器发送讯息并执行对应的处理。
File→New→Other→Broadcast Receiver
修改Receiver名称後点选Finish
AS会自动产生BroadcastReceiver需要的档案,AndroidManifest.xml也会自动增加Receiver的资讯
在Activity中建立BroadcastReceiver物件,就不必在AndroidManifest.xml新增Receiver标签
private val receiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
intent.extras?.let {
//...下略
}
}
}
//注册
registerReceiver(receiver, IntentFilter("MyBroadcast"))
//注销
unregisterReceiver(receiver)
Receiver注册时,需使用IntentFilter类别定义要接收的事件,而Broadcaster在发送前,也必须定义事件的「识别标签」,识别标签会决定要接收的事件类型,而广播事件的类型分为系统预设与自行定义。
class MainActivity : AppCompatActivity() {
//实作当萤幕开启时显示萤幕开启的Toast
//Step1:建立BroadcastReceiver物件
private val receiver = object : BroadcastReceiver() {
//Step2:在onReceive()中加入接收广播後要执行的动作
override fun onReceive(context: Context, intent: Intent) {
//用Toast显示通知讯息
Toast.makeText(context, "萤幕开启", Toast.LENGTH_SHORT).show()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Step3:建立IntentFilter物件,并指定接收的识别标签为萤幕开启
val intentFilter = IntentFilter(Intent.ACTION_SCREEN_ON)
//Step4:注册Receiver
registerReceiver(receiver,intentFilter)
}
}
class MainActivity : AppCompatActivity() {
//Step1:建立BroadcastReceiver物件
private val receiver = object : BroadcastReceiver() {
//Step2:在onReceive()中加入接收广播後要执行的动作
override fun onReceive(context: Context, intent: Intent) {
intent.extras?.let {
//解析intent取得字串讯息
val msg = "资料:${it.getString("msg")}"
Toast.makeText(context, "萤幕开启", Toast.LENGTH_SHORT).show()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Step3:建立IntentFilter物件,并指定接收的识别标签为MyBroadcast
val intentFilter = IntentFilter("MyBroadcast")
//Step4:注册Receiver
registerReceiver(receiver,intentFilter)
}
}
由於是自定义的事件,因此需要应用程序执行sendBroadcast(),来发送广播让Receiver接收。通常会撰写在其他程序区块
//建立带有识别标签的Intent
val intent = Intent("MyBroadcast")
//发送自定义的广播事件
sendBroadcast(intent.putExtra("msg","data")
tags: 铁人赛 AWS RDS Outposts database 前情提要 差点就跟蔡琴一样,...
06 - Auto-update dependencies 除了 Release Drafter 及...
看完这篇文章你会得到的成果图 这次是我初学 PyQt5 的一些笔记, 每天都学一点点,至於整理的部分...
一、前言 昨天发文後,马上收到系统罐头通知,终於熬到这一天了(我好兴奋啊啊啊!)终於要完成人生首...
突然发现前面应该要多写一点的@@ 我本来没打算花那麽多篇幅讲 Leetcode... 铁人赛有几篇写...