BroadcastReceiver 广播接收者
2016-09-03 16:17
344 查看
一、定义广播接收者
1)定义类继承BroadcastReceiver,重写onReceive方法
2)清单文件中声明,需要在其中配置指定接收广播的类型;
3)当接收到匹配广播之后就会执行onReceive方法;
4)有序广播中,如果要控制多个接收者之间的顺序,可在配置priority属性,系统默认为0,值越大,优先级越高;
5)BroadcastReceiver除了在清单文件中声明,也可以在代码中声明,使用registerReceiver方法注册Receiver;
二、广播接收者的注册方式
广播接收者的注册方式
4大组件中,只有广播接收者是一个非常特殊的组件,其他3大组件都需要在清单文件中注册;
广播接收者,有2中注册方式:清单文件与代码方式,区别:
1)清单文件注册广播接收者,只要应用程序被部署到手机上,就立刻生效,不管进程是否处于运行状态;
2)代码方式,如果代码运行了,广播接收者才生效,如果代码运行结束,广播接收者,就失效;
这属于动态注册广播,临时用一下,用的时候,register,不用时unregister;
代码方式示例:
// 广播接收者
private class InnerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String phone = getResultData();
String address = AddressDao.queryAddress(getApplicationContext(), phone);
showAddress(address);
}
}
三、发送广播
4、发送广播
1)发送普通广播
①、使用sendBroadcast()方法可发送普通广播;
②、通过Intent确定广播类型,可携带数据,所有接收者都可以接收到数据,数据不能被修改,不会中断;
接收者无序(试验测试,是按照安装顺序来接收的);
③、广播时,可设置接收者权限,仅当接收者含有权限才能接收;
④、接收者的也可设置发送方权限,只接受含有相应权限应用的广播;
发送者:
Intent intent = new Intent(“com.itheima.broadcast.TEST”); // 指定动作;接收者,需要配置 intent filter才能接受到此广播
intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); // 包含未启动的过的应用(也可以收到广播),默认为不包含
intent.putExtra(“data”, “这是来着广播发送者发来的贺电”); // 广播发送者intent中的数据,接收者,修改不了
sendBroadcast(intent, null); // 发送无序广播,异步获取数据,不可中断,接收者之间不可传数据
注意:
如果要在广播接收者中打开Activity,需要设置一下Intent.FLAG_ACTIVITY_NEW_TASK,因为广播接收者是没有Activity任务栈的
四、发送本地广播
1)定义类继承BroadcastReceiver,重写onReceive方法
2)清单文件中声明,需要在其中配置指定接收广播的类型;
3)当接收到匹配广播之后就会执行onReceive方法;
4)有序广播中,如果要控制多个接收者之间的顺序,可在配置priority属性,系统默认为0,值越大,优先级越高;
5)BroadcastReceiver除了在清单文件中声明,也可以在代码中声明,使用registerReceiver方法注册Receiver;
<!-- 配置广播接收者,监听播出电话 --> <receiver android:name="com.itheima.ipdialer.CallReceiver" > <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver>
二、广播接收者的注册方式
广播接收者的注册方式
4大组件中,只有广播接收者是一个非常特殊的组件,其他3大组件都需要在清单文件中注册;
广播接收者,有2中注册方式:清单文件与代码方式,区别:
1)清单文件注册广播接收者,只要应用程序被部署到手机上,就立刻生效,不管进程是否处于运行状态;
2)代码方式,如果代码运行了,广播接收者才生效,如果代码运行结束,广播接收者,就失效;
这属于动态注册广播,临时用一下,用的时候,register,不用时unregister;
代码方式示例:
// 广播接收者
private class InnerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String phone = getResultData();
String address = AddressDao.queryAddress(getApplicationContext(), phone);
showAddress(address);
}
}
// 注册示例代码 public void onCreate() { // == 服务启动时,注册广播接收者 == innerReceiver = new InnerReceiver(); // 指定意图过滤器 IntentFilter filter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL); this.registerReceiver(innerReceiver, filter); } // 销毁 public void onDestroy() { // == 服务停止时,移除广播接收者 == this.unregisterReceiver(innerReceiver); innerReceiver = null; super.onDestroy(); }
三、发送广播
4、发送广播
1)发送普通广播
①、使用sendBroadcast()方法可发送普通广播;
②、通过Intent确定广播类型,可携带数据,所有接收者都可以接收到数据,数据不能被修改,不会中断;
接收者无序(试验测试,是按照安装顺序来接收的);
③、广播时,可设置接收者权限,仅当接收者含有权限才能接收;
④、接收者的也可设置发送方权限,只接受含有相应权限应用的广播;
发送者:
Intent intent = new Intent(“com.itheima.broadcast.TEST”); // 指定动作;接收者,需要配置 intent filter才能接受到此广播
intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); // 包含未启动的过的应用(也可以收到广播),默认为不包含
intent.putExtra(“data”, “这是来着广播发送者发来的贺电”); // 广播发送者intent中的数据,接收者,修改不了
sendBroadcast(intent, null); // 发送无序广播,异步获取数据,不可中断,接收者之间不可传数据
接收者: public class AReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { System.out.println("AReceiver: " + intent.getStringExtra("data")); } } <receiver android:name="com.itheima.a.AReceiver"> <intent-filter android:priority="2" > <action android:name="com.itheima.broadcast.TEST" /> <!—接收指定动作的广播 --> </intent-filter> </receiver>
注意:
如果要在广播接收者中打开Activity,需要设置一下Intent.FLAG_ACTIVITY_NEW_TASK,因为广播接收者是没有Activity任务栈的
四、发送本地广播
public void sendLocalBroadCast(){ LocalBroadcastManager localBroad = LocalBroadcastManager.getInstance(this); localBroad.sendBroadcast(intent); }
相关文章推荐
- Android中BroadcastReceiver(异步接收广播Intent)的使用
- Android使用BroadcastReceiver实现手机开机之后显示画面的功能
- Android提高之BroadcastReceiver实例详解
- 详解Android中BroadCastReceiver组件
- Android采取BroadcastReceiver方式自动获取验证码
- Android编程四大组件之BroadcastReceiver(广播接收者)用法实例
- Android开发之BroadcastReceiver用法实例分析
- Android BroadcastReceiver广播机制概述
- 广播 BroadCastReceiver
- BroadcastReceiver应用详解
- Android中利用广播接受者简单几步实现拨号显示归属地
- 拦截短信
- Android中BroadcastReceiver理解
- 关于安卓手机开机自启动APP无法成功的问题
- Android开发学习之路 -- 关于BroadcastReceiver
- android 监听SDCard安装和卸载的代码
- BroadcastReceiver实现android来去电录音功能(外录)
- 小米手机不支持对去电的拦截解决方案(BroadcastReceiver)
- BroadcastReceiver之开机自启动程序