广播分2种 sendBroadcast,sendOrderedBroadcast分别 为有序广播和无序广播。
广播是四大组件之一需要在清单文件中配置。
使用无序广播
发广播:
public void click(View view){
//发送一个自定义的广播.
Intent intent = new Intent();
intent.setAction("com.lxcay.mybroadcast.xxx");
sendBroadcast(intent);//发送一条无序广播
}
接收广播:
在需要接受广播的应用对应的 AndroidManifest.xml中的组件节点下
<receiver android:name="com.lxcay.myreceiver.MyReceiver" >
//配置广播过滤器,只接受某种类型的广播
<intent-filter android:priority="1000"> // android:priority 是优先级,1000代表最高
//配置广播过滤条件
<action android:name="com.lxcay.mybroadcast.xxx" />
</intent-filter>
</receiver>
使用有序广播
发广播:
public void click(View view){
//发送一个自定义的广播.
Intent intent = new Intent();
intent.setAction("com.lxcay.mybroadcast.xxx");
sendOrderedBroadcast(intent, null);//发送一条有序广播
}
接受广播:
在需要接受广播的应用对应的AndroidManifest.xml中的组件节点下
<receiver android:name="com.lxcay.myreceiver.MyReceiver" >
//配置广播过滤器,只接受某种类型的广播
<intent-filter android:priority="1000"> // android:priority 是优先级,1000代表最高
//配置广播过滤条件
<action android:name="com.lxcay.mybroadcast.xxx" />
</intent-filter>
</receiver>
这种在 AndroidManifest.xml 使用广播的方式是全局(整个手机)有效的。
有序广播和无序广播的区别:
有序广播可以中断广播 abortBroadcast(),可以修改广播的值 setResultData(),
无序广
播不可以使用这个2个函数。
eg: 有序广播
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("我是自定义的广播接受者 , 我接收到了广播事件");
System.out.println("习大大说:举国同庆,放假3天");//原广播内容
setResultData("习大大说:放假3天");//在接受广播后,修改广播内容
}
}
public class MyReceiver1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("我是自定义的广播接受者 , 我接收到了广播事件");
String message = getResultData();//接受广播,的内容
System.out.println(message);//因为优先级的缘故,这里打印的是“习大大说:放假3天”
setResultData("放假3天");//在接受广播后,修改广播内容
abortBroadcast();//中断广播(有序广播在中断广播后,后面的广播是接收不了广播的,后面值得是android:priority=""更低的优先级)
}
}
发送广播必须接收广播有权限
eg: 发送方
public void sendOrdered(View v) {
Intent intent = new Intent("lxcay.broadcast.ORDERED");
//启动从没有启动过的广播
intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
intent.putExtra("data", "ordered"); // 接收者之间不能修改
Bundle bundle = new Bundle();
bundle.putString("name", "张三");
//第二个参数,是限定接受广播的要这个权限,如果没有是接受不到
sendOrderedBroadcast(intent, "lxcay.permission.BROADCAST", new ResultReceiver(), null, 1, "MainActivity", bundle);
}
eg:接受方
//接收方,需要在清单文件中配置,不然接受不到广播
<uses-permission android:name="lxcay.permission.BROADCAST"/>
接收放需要发送方需要权限
eg:接收方
<receiver android:name="com.lxcay.areceiver.A_Receiver"
//这个是需要发送方需要的权限,没有的话,这个广播是不会受理发送的广播 android:permission="lxcay.permission.BROADCAST">
<intent-filter>
<action android:name="lxcay.broadcast.NORMAL" />
</intent-filter>
//这个是优先级
<intent-filter android:priority="1">
<action android:name="lxcay.broadcast.ORDERED" />
</intlter>
<receiver>
时间: 2024-10-23 19:43:34