您的位置:首页 > 移动开发 > Android开发

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 ——系统启动完成

这这是一些常见的系统广播常量,我们可以通过接受这些广播来实现对系统状态的监听。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息