Android基础----BroadcastReceiver
2016-07-02 11:21
337 查看
简介:
BroadcastReceiver(广播接收者)可以接收发出来的广播,通过不同的广播来进行不同的业务处理。,例如接收到开机时系统启动的广播就可以激活相对应的Service,即实现了开机自启动功能。基本用法:
实现自定义广播接收者,继承自系统的BroadcastReceiver,并实现相应的方法。注册广播,分为两种方式,可以在AndroidManifest.xml文件中注册,也可以在Activity中通过registerReceiver()方法来注册,同时需要为其制定要接收的广播,即IntentFilter。
ps:需要注意的是,在Activity中创建的BroadcastReceiver和主线程是在同一个线程中,即在Activity直接进行onReceive()处理有可能导致ANR出现(BroadcastReceiver在10 seconds内无法处理完任务)
1. 实现自定义的广播,并实现相应的方法
public class MyReceiver extends BroadcastReceiver { //当接收到广播时调用该方法 @Override public void onReceive(Context context, Intent intent) { //可以根据Intent的不同,来进行不同的处理 } }
2. 注册广播
在AndroidManifest.xml中注册
<receiver android:name=".MyReceiver" > <intent-filter> <!--接收"电池电量低"这个广播--> <action android:name="android.intent.action.BATTERY_LOW" /> </intent-filter> </receiver>
在Activity中注册
MyReceiver myReceiver = new MyReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.intent.action.BATTERY_LOW"); registerReceiver(myReceiver, intentFilter);
广播的分类:
广播主要分为两种,普通广播(Normal Broadcast)和有序广播(Ordered Broadcast)。
一般通过sendBroadcast()发送的广播的都是普通广播,其是异步的,即逻辑上是可以同时接受到的。
通过sendOrderedBroadcast()发送的都是有序广播,这种广播根据广播接收者的优先级进行发送。即广播最先发送给优先级最高的接受者,优先级最高的接受者处理完之后在将其传给次一级的接受者,直到有接受者结束了广播,其就不会继续往下传。
<!--在intent-filter中设置优先级,范围在-1000-1000,值越大优先级越高--> <intent-filter android:priority="100"> <!--接收"电池电量低"这个广播--> <action android:name="android.intent.action.BATTERY_LOW" /> </intent-filter>
系统广播:
有时我们需要接受系统的广播来进行一些事件的处理,例如根据电池电量来给出充电的提醒,根据系统日期来给出日程提醒等,这时我们就需要接受来自系统的广播,并根据接收到的广播来进行响应的处理。ACTION_TIMEZONE_CHANGED——系统时区改变
ACTION_TIME_CHANGED——系统时间改变
ACTION_UID_REMOVED——用户ID被移除
ACTION_UMS_DISCONNECTED——关闭了USB大容量存储器模式
ACTION_BATTERY_CHANGED——电池电量改变
ACTION_BATTERY_LOW——电池电量低
ACTION_BATTERY_OKAY ——电池电量正常
ACTION_BOOT_COMPLETED ——系统启动完成
这这是一些常见的系统广播常量,我们可以通过接受这些广播来实现对系统状态的监听。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories