当前位置:
文档之家› Android应用开发技术第8章
Android应用开发技术第8章
在Activity中绑定接收者必须依附该应用程序存在,或者一个 BroadcastReceiver用于更新UI,就没有必要再程序关闭时接收 者还运行,故无需在AndroidManifest.xml中注册而可以放在 Activity中注册。动态注册的生命周期跟程序的生命周期是一样 的,程序关闭后动态注册的广播是不能再接收到广播的。
1
学习目标
重点
Off li•ne广B播적화
• 广播接收者注册
掌握 • 广播接收者的种类
了解
• 预定义广播接收者
目录
8.1 BroadcastReceiver简介 8.2 BroadcastReceiver的种类 8.3 自定义广播接收者
action android:name=" com.example.MyBroadcastReceiver.hello "/> </intent-filter> </receiver>
14
广播实现步骤
2)动态注册:在适当位置填写如下代码
MyBroadCastReceiver receiver =new MyBroadCastReceiver(); //实例化过滤器并设置要过滤的广播 String action = " com.example.MyBroadcastReceiver.hello "; IntentFilter intentFilter = new IntentFilter(action); //注册广播 registerReceiver(receiver, intentFilter);
• 必须使用Context.registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法动态注册广播接收者。其中参 数receiver系统或者自定义的广播接收者;filter是广播接收者 对应的意图过滤器。
• 在程序结束之前,必须使用 Context.unregisterReceiver(BroadcastReceiver receiver) 方法注销广播接收者,其中参数receiver表示与注册相同的广 播接收者。
12
8.3 自定义广播接收者
13
广播实现步骤
(1)自定义类继承BroadcastReceiver并重写onReceive()方 法。 (2)注册广播接收者 1)静态注册:在清单文件中增加 <receiver android:name="com.example.MyBroadcastReceiver "> <intent-filter android:priority="20">
15
广播实现步骤
(3)通过Intent发送广播信号 Intent intent=new Intent(); intent.setAction("com.example.MyBroadcastReceive
r.hello "); intent.putExtra("msg", "hello"); sendBroadcast(intent);
广播接收者调用abortBroadcast()方法可以终止广播信号 的传播。广播接受者可以将处理结果存入数据,可通过 setResultExtras(Bundle)或者setResultData(String)方法将数据 传递给下一级接收者,通过getResultExtras(true) 或者 getResultData()获取上一级传递过来的数据。
@Override public void onReceive(Context context, Intent intent) {
//接收广播处理代码 } }
5
广播接收者的创建与注册
(2)注册广播接收者 ①静态注册(在AndroidManifest.xml中注册)
在配置文件中注册的接收者的特点是即使应用程序已被关闭, 该接收者依然可接受它感兴趣的广播,比如手机电池电量的广播 接收者,没有必要将某个程序开启。 ②动态注册(在Activity中注册)
6
8.2 BroadcastReceiver的种类
1 常驻型广播和非常驻型广播
2
有序广播和无序广播
7
常驻型广播和非常驻型广播
(1)常驻型广播 常驻型广播在应用程序关闭后,广播接收器同样的能接受
到广播信息,其注册方式为静态注册。
8
常驻型广播和非常驻型广播
(2)非常驻型广播
当应用程序结束后,广播接收者自然消亡,此时的广播接收 器就是非常驻型。比如在Activity中的onCreate()或者 onResume()方法中注册广播接收者,在onDestory()方法中注 销广播接收器。
8.4 预定义广播接收者
3
8.1 BroadcastReceiver简介
4
广播接收者的创建与注册
(1)创建广播接收者 创建广播接收者需要新建一个继承BroadcastReceiver的
子类,需在此类中重写onReceive()方法。 public class MyBroadcastReceiver extends BroadcastReceiver {
传播。它是一种同步执行的广播,在广播发出之后,同一时刻只 会有一个广播接收器能够接收到这条消息,当这个广播接收器中 的逻辑执行完毕后,广播才会继续传递。
11
有序广播和无序广播
(2)有序广播 有序广播中的优先级用整数表示,取值范围:-1000~1000,
数越大优先级越高。优先级的声明可以在清单文件中通过 <intent-filter android:priority="100"/>的方式实现,也可以调用 IntentFilter对象的setPriority()方法设置。
9
有序广播和无序广播
(1)无序广播 实现过程完全异步,逻辑上广播信号可以被任何广播接收
者在同一时刻接收到这条广播,没有任何先后顺序,故其优点是 效率较高。缺点是接收者不能将处理结果传递给其他接收者,并 无法终止广播Intent的传播。
10
有序广播和无序广播
(2)有序广播 广播信号按照被接收者的优先级顺序,在被接收者中依次