自定义广播
当使用不同的应用时就不能使用系统提供的API动作了,因此需要我们自定义自己的广播。
首先创建一个项目模块用来接收其他应用发过来的广播
分别创建三个都继承自BroadcastReceiver的类:MyBroadcaseReceiver、MyBroadcaseReceiver2、MyBroadcaseReceiver3
方法类似,以MyBroadcaseReceiver以为例:
public class MyBroadcaseReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
System.out.println("receiver1接收到了广播");
Toast.makeText(arg0, "检查到自定义的广播事件", 1).show();
//终止掉广播
abortBroadcast();
}
}
接下来在清单文件中定义广播接收者:
在application中:
<!--权限最高为1000,最低为负1000,并且权限高的可以调用abortBroadcast()终止掉广播-->
<receiver android:name=".MyBroadcaseReceiver">
<intent-filter android:priority="1000">
<action android:name="a.b.c"/>
</intent-filter>
</receiver>
<receiver android:name=".MyBroadcaseReceiver2">
<intent-filter android:priority="500">
<action android:name="a.b.c"/>
</intent-filter>
</receiver>
<receiver android:name=".MyBroadcaseReceiver3">
<intent-filter android:priority="100">
<action android:name="a.b.c"/>
</intent-filter>
</receiver>
接下来创建另一个项目,用于警报的发送。
mxl文件:
<Button
android:onClick="click"
android:layout_width="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_height="wrap_content"
android:text="发送报警信息,自定义的广播,告诉其它应用模块" />
MainActivity文件:
public void click(View view){
Intent intent = new Intent();
intent.setAction("a.b.c");
//把这个自定义的广播发送出去
//sendBroadcast(intent); 发送一条无序的广播时间
//如果广播时间是无序发送出去的所有的广播接受者都会接收到这个广播事件
//如果广播是有序额发送出去的,广播接受者会按照优先级接收到广播事件
//权限高的广播可以终止掉广播事件
//sendOrderedBroadcast(intent, null);
//以下方法可避免广播被恶意拦截,消除了权限的优先级
sendOrderedBroadcast(intent, null, new FinalRecevier(), null, 0, null, null);
}
为响应第三个发送的方法,在创建一个继承自BroadcastReceiver的类:
public class FinalRecevier extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("我是最终的接收者");
}
}