关于android中的广播简单讲解

如何在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()会导致程序强制退出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值