BroadCastReceiver的使用分为两部分
1、接受系统发送的广播
新建一个类实现BroadCastReceiver ,并实现重写onReceive()方法
//检测系统的sd卡是否挂载
public class SdCardBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if ("android.intent.action.MEDIA_MOUNTED".equals(action)) {
System.out.println("sd卡已挂载");
} else if ("android.intent.action.MEDIA_UNMOUNTED".equals(action)) {
System.out.println("sd卡已卸载");
}
}
}
在清单文件中进行注册,并设置要接受的广播的意图
<receiver android:name="com.example.sdbroadcast.SdCardBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.MEDIA_UNMOUNTED" />
<data android:scheme="file" />
</receiver>
2、发送和接受自己定义的广播
发送无序广播:
Intent intent = new Intent();
intent.setAction("com.example.test");
intent.putExtra("key", "发送了自定的广播");
sendBroadcast(intent);
发送有序广播
Intent intent = new Intent();
intent.setAction("com.example.test");
intent.putExtra("key", "发送了自定的广播");
// sendOrderedBroadcast(intent, null, new
// FinalReceiver(), null, 0, "发了奖金100元", null);
sendOrderedBroadcast(intent,//意图动作,指定action动作
null, //receiverPermission,接收这条广播具备什么权限
new FinalReceiver(),//resultReceiver,最终的广播接受者,广播一定会传给他
null, //scheduler,handler对象处理广播的分发
0,//initialCode,初始代码
"发了奖金100元", //initialData,初始数据
null//initialExtras,额外的数据,如果觉得初始数据不够,可以通过bundle来指定其他数据
);
接受广播都一样
(1) 新建一个类继承子BroadCastReceiver
(2) 在清单文件中进行注册
(3) 在清单文件中进行设置过滤条件,如果是有序广播我们还可以设置优先级属性 android:priority =”1000” 范围为-1000 ~ 1000,如果是有序广播的话,优先级越高,最先收到广播
常用API说明
getResultData(); 获取广播中携带的数据
setResultData(); 重新设置广播中最初始化的数据
abortBroadcast(); 终止广播的发送,如果比它自己优先级小的广播就接收不到了
有序广播和无序广播的区别
- 无序广播
CCTV 广播电台 所有的人同时接收到消息,无法拦截.
- 有序广播
发布一个文件–一级一级向下传达的–上一级就可以修改下一级的数据
高优先级的可以拦截广播,可以修改广播的数据.