Android中的BroadCast Receiver(广播)详解

广播一般情况下用来监听手机内部的状态的,也可以有消息推送。

广播有两种注册方式:
一种是静态注册(常驻型广播),特点:当APP运行时,广播就已经存在了,即使是退出应用,广播依然存在。通过清单文件的方式注册。

一种是动态注册,特点:当你点击某个事件时,广播才会生成,并且当APP退出时,广播则死亡。但是,在广播死亡之前,你要手动注销掉广播。通过java代码的方式注册。
在隐式意图中,意图过滤器下的action的name="包名.action.intent.类名"(约定格式)


广播分几种?
分两种,普通广播:当有多个广播存在时,接受消息时没有固定顺序。如果为静态注册,则通过清单文件的方式依次向下接受。

              有序广播:它是根据属性值,整形的,数值越大,优先级越高,数值越小,优先级越低。

intent—filter:意图过滤器

静态注册广播步骤:
1.自定义类,继承自BroadCast Receiver,实现onReceiver方法
2.在清单文件中,添加<receiver>标签,<intent-filter>,<action>
3.在主类中通过隐式意图发送广播,sendBroadCast(intent)
4.在广播中接受intent的值
MainActivity.java
Intent intent = new Intent(getApplicationContext(),MyDynamicReceive.class);
intent.setAction(MyDynamicReceive.ACTION);
intent.putExtra("static", "我发送了一条静态消息");
sendBroadcast(intent);

MyDynamicReceive.java
public class MyDynamicReceive extends BroadcastReceiver {
public static final String ACTION = "com.zhiyuan3g.mybroadcast.receiver.action.intent.MyDynamicReceive";

@Override
public void onReceive(Context context, Intent intent) {

    String aStatic = intent.getStringExtra("static");
    Log.d("=====TAG=====", "onReceive:"+aStatic);
    System.exit(0);
}
}

AndroidManifest.xml
<receiver
    android:name=".receiver.MyDynamicReceive"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name=".MyDynamicReceive.ACTION"/>
    </intent-filter>

</receiver>


动态注册广播步骤:
1.自定义类,继承自BroadCast Receiver,实现onReceiver方法
2.在自定义类中,添加一个静态常量ACTION
3.在主类中通过按钮实现注册,调用registerReceiver方法(你要实现的广播类,意图过滤器)
4.发送广播,sendBroadCast(intent)
5.在onDestroy方法中,销毁广播unregisterReceiver,记住要加判断,如果为空,则销毁。
注:不需要配置清单文件了,是动态创建的
MainActivity.java
private MyMoveReceiver mMyMoveReceiver;

if (mMyMoveReceiver == null) {
    mMyMoveReceiver = new MyMoveReceiver();
}
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MyMoveReceiver.ACTION);
registerReceiver(mMyMoveReceiver, intentFilter);
Intent intent1 = new Intent();
intent1.setAction(MyMoveReceiver.ACTION);
sendBroadcast(intent1);

MyMoveReceiver.java
public class MyMoveReceiver extends BroadcastReceiver {
    public static final String ACTION = "com.zhiyuan3g.mybroadcast.action.intent.MyMoveReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("=====TAG=====", "onReceive:我是动态创建");
    }

}


普通广播,如果为静态注册,则根据在清单文件中的位置依次从上至下加载

有序广播,是通过priority(intent—filter标签下的一个属性)来区分的,跟你的清单文件的顺序没有任何关系,并且发送广播的时候不是通过sendBroadCast发送的,而是通过sendOrderedBroadCast发送。priority的值越大,则这个广播的优先级越高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值