android 广播(二)

来源:互联网 发布:中科软件招聘 编辑:程序博客网 时间:2024/04/26 22:22

发送有序广播
a. sendOrderedBroadcast() 发送有序广播;
b. 通过Intent确定广播类型, 携带数据,Intent的数据同样修改无效;
c. 跟普通广播一样,也可以设置相应的权限;
d. 接收者可在定义android:priority定义优先级,数字越大,优先级越高;
e. 有序广播会被接收者逐个接收,中途可以中断,或添加、修改数据;
f. 可以指定一个自己的广播接收者, 这个接收者将最后一个收到广播、不会被中断、不需要任何权限、不需要配置;
g. 可以指定一个Handler用来在自己的接收者中进行线程通信;

发送者:
Intent intent = new Intent(“com.itheima.broadcast.TEST”); // 指定动作;接收者,需要配置 intent filter才能接受到此广播
intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); // 包含未启动的过的应用(也可以收到广播),默认为不包含
intent.putExtra(“data”, “这是来着广播发送者发来的贺电”); // 广播发送者的intent中的数据,接收者,修改不了
// == 有序广播时,传递的数据可修改 ==
Bundle bundle = new Bundle();
bundle.putString(“name”, “关羽”);
bundle.putInt(“age”, 22);
/* 定义权限,要求接收者,要有 com.itheima.permission.broadcast.RECEIVE 才能接收;
* 配置了最后接收者,Creceiver,无论你们怎么弄,我都可以收到广播,而且我不要配置,不要权限
* handle为null,表示使用系统默认的
* 传递了数据 1, “MainActivity”, bundle 这些都是可以在接收者修改的
*/
this.sendOrderedBroadcast(intent, “com.itheima.permission.broadcast.RECEIVE”, new CReceiver(), null, 1, “MainActivity”, bundle);

<permission android:name="com.itheima.permission.broadcast.RECEIVE" >

接收者AReceive:
public void onReceive(Context context, Intent intent) {
System.out.println(“AReceiver: ” + intent.getStringExtra(“data”));
Bundle bundle = this.getResultExtras(true); // 设置为true,表示即使没有传递Bundle数据,不会出现空指针
String message = String.format(“%s : %s : %s, %s”, getResultCode(), getResultData(), bundle.getString(“name”), bundle.getInt(“age”));
System.out.println(message); // 如果优先级高于其他接收者,将打印发送者的数据

    // == 修改有序发送者,发来的数据 ==    bundle.putString("name", "赵子龙");    bundle.putInt("age", 222);    this.setResult(2, "AReceiver", bundle);    // == 修改Intent中的数据,无效 ==    intent.putExtra("data", "AReceiver 修改了数据");    this.setResultData("这是来自AReceiver的信息");    // this.abortBroadcast();                       // 中断,比它优先级低的接收者,将不能接收到广播了}//-- 要求广播发送者必须有对应的权限,我才收  <receiver  android:name="com.itheima.a.AReceiver"        android:permission="com.itheima.permission.broadcast.RECEIVE" >         <intent-filter android:priority="2" >            <action android:name="com.itheima.broadcast.TEST" />        </intent-filter>    </receiver>
0 0
原创粉丝点击