1.概述*:
BroadcastReceiver本质上是一种全局的监听器,用于监听系统全局的广播消息。可以非常方便的实现系统中不同组件之间的通信。
用于接收程序(包括用户开发的程序和系统内建的程序)所发出的Broadcast Intent。
(1)广播类型:标准广播和有序广播
标准广播(Normal broadcasts):完全的异步执行的广播,广播发出之后,所有的广播接收器几乎同一时间接收到广播消息。
有序广播(Ordered broadcasts):同步执行的广播,一条广播发出后,同一时间,只有一个广播接收器能收到这条广播。此时,广播接收器时有优先顺序的。且前面的优先级高的接收器可以截断赈灾传递的广播,这样后面的广播就收不到广播了。
2.步骤*:
1>自定义接收器类,继承BroadcastReceiver类。实现onReceive()方法。
2>注册广播,注册的方法有两种,后面介绍。
3>发送广播:sendBroadcast(intent);前提是创建intent,且其中添加action。
发送广播演示:
3.注册*:
注册方式包括静态常驻型和动态注册。
动态注册(即在代码中注册):
@1利用registerReceiver()方法:
@2动态注册的广播一定要在destroy()中取消注册:
静态方法:在manifest.xml中注册:
在< receiver/ >标签中注册:
4.利用系统本身的action,监听特定事件:(注意获得权限)
比如:网络改变时,系统会发出一条值为anroid.net.conn.CONNECTIVITY_CHANGE的广播。
这里可以创建一个广播接收器接收此广播,使网络一变化时,执行接收器中操作。
注:如果这里在接收器中,对网络情况进行查询了,那么android系统为了保证应用程序的安全性,需要在配置文件中声明权限,否则程序会崩溃。所以这里网络状态的查询需要声明权限:
可以到API:Manifest.permission中查看权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
5.范例1:发送标准广播(且自定义广播)
1)自定义广播接收器:
2)静态注册:
3)发送自定义广播
6.范例2:发送有序广播
步骤:
1>另自定义一个广播接收器。。
2>在配置文件中注册,要使其有优先级,需在配置时加上android:priority=””
3>发送广播时,用sendOrderedBroadcase(intent,null);参数是intent和与权限有关的字符串。
4>要实现拦截,不让以后的接收器再接收。
要在自定义的接收器中截断广播:abortBroadcast();
7.范例3:利用广播建闹钟
1)利用AlarmManager管理闹钟
2)打开闹钟:利用AlarmManager中的setRepeating()方法;
3)关闭闹钟:利用AlarmManager中的manager.cancel(pending)方法;
示例:
创建AlarmManager实例:
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);// 1.获得alarammanager,通过获取系统服务
打开闹钟:
解析:
PendingIntent pending = PendingIntent.getBroadcast(
getApplicationContext(), 0x22, intent,
PendingIntent.FLAG_UPDATE_CURRENT);//0x22为其特有的唯一的标识符。
manager.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + 3000, 6000, pending);//参数为:tpye类型,闹钟响的时间,间隔时间,延时intent
关闭闹钟:
自定义的接收广播中进行闹钟设置,这里以弹出Toast消息代替。
效果演示:
8.范例:接收系统的广播:
需要权限:广播允许监听文件卸载
注册:
9.使用本地广播*
1)概述:
之前我们发送和接收的广播都是属于系统全局广播,即发出的广播其他任何应用程序都可以接收到,这样容易引起安全性的问题。
这里介绍的本地广播,只能在应用程序的内部进行传递,且广播的接收器也只能接收来自本应用程序发出的广播。
2)用法:
与之前的广播的区别:
1>获得LocalBroadcastManager实例
2>利用LocalBroadcastManager来发送广播,和注册广播
3)范例:
创建实例:
动态注册:
发送广播:
效果演示: