如何在Android中简单地发送一条广播?
如果你已经知道如何从一个页面跳转到另一个页面,那么发送一条广播对你来说就不是什么大问题了,没错,使用intent就可以实现发送一条广播的功能:
在android活动的父类AppCompatActivity(不同版本可能继承的父类不同,不过没有关系)有一个sendBroadcast()的方法,该方法接受一个Intent实例作为参数:
Intent intent = new Intent(/*输入需要填入的action*/);
系统中有提供许多android自带的action,可以调用它们,也可以自己创建一个action,通常会为了不与其他程序得action冲突,会以”包名+名称“来命名自己的action,但是其实自定义的action并没有绝对的硬性要求,只要时一个字符串就可以了,接着使用activity中得方法sendBroadcast()方法就可以把广播送出去了
当然,有发送广播地方式,就会有接收广播的方式,在androidstudio项目的包下,右键 单击 new----other-----Broadcast Receiver新建一个继承BroadcastReceiver的类:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//接受到广播时,弹出一条提示信息
Toast.makeText(context,"MyReceiver",Toast.LENGTH_SHORT).show();
}
}
使用androidstudio新建BroadcastReceiver会自动在androidmanifest.xml注册新建的BroadcastReceiver子类,如果手动创建一定要手动注册到Android manifest中,否则Receiver不会生效:
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
</receiver>
当然,你还需要加上自定义的过滤器,修改代码如下:
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<action android:name="/*这里是自定义的action*/" />
//category使用默认的DEFAULT就可以了,只是一种过滤机制
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
至此,只要在activity中发送广播,就会弹出"MyReceiver"的提示
以上为静态地为Receiver注册过滤器,接下来我们可以使用代码动态注册Receiver:
MyReceiver myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter("/*这里是自定义的action*/");
registerReceiver(myReceiver,filter);
然后再发送广播,可以达到同样的效果
以上发送的广播都是无序广播,所以符合条件的接收器都均等机会接受到广播
发送有序广播:
只要把sendBroadcast()改成sendOrderedBroadcast()就可以了
Intent intent = new Intent(/*输入需要填入的action*/);
sendOrderedBroadcast(intent,null);//第二个参数表示的是权限,可以为null
接着在Android manifest.xml中Receiver的过滤器中加入优先级设置,值越大,优先级越高
<intent-filter android:priority="100">
<action android:name=/*这里是自定义的action*/ />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
至此,就可以发送有序广播了,在Receiver中,也可以使用abortBroadcast()中止广播继续传播。
注意,如果在无序广播中使用abortBroadcast()会导致程序强制退出