安卓 四大组件之一 广播 BroadcastReceiver

 一. 广播作为四大组件之一,组件有什么特色呢?第一组件都要在清单进行注册,第二个组件间的通信都是intent在管理第三个需要继承原始类。BroaderRecevier(负责通信).一种通讯方式

   二.适用的场景主要有哪些呢?1.是同一app具有多个进程不同组件之间的消息通信;2.是不同app之间的组件的通信3.Andriod系统在特定情况下与app之间消息的通信

不适宜用广播的场景:1.同一app的同一组件可以使用handler2.同一app内部不同组件之间可以使用接口回调(观察者模式,eventbus)

   三.广播的使用:有发送方和接收方,如何接受到别人发的广播呢?主要靠action,通过过滤器intentfilter就可以筛选,这个action这个就是系统的所有的自带的动作,比如开关机,获取sd卡,或者短信什么什么的,intentfilter相当于是一个频道过滤器它的里面放了一个你要的action,有这个action那么就会收到广播,就能够收到带过来的消息,消息是放在intent里面的,广播活了之后就可以调用那个里面的方法public void onReceive(Context context, Intent intent)

四.首先介绍一下接广播,有两种注册,1.写个class继承广播2.实现方法3.清单注册。

1.写一个类MyReciver继承了BroadcastReceiver 里面只有一个方法需要实现,当你收到广播,就会调这个方法,你要的数据就在intent里面,你只要从intent拿到就可以了

public class MyReciver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent intent1=new Intent(context,PlayerActivity.class);
        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent1);
}
}
2.有两种注册方式:一个是静态,一个是动态,首先介绍下静态。静态注册比较消耗资源(开机启动),静态注册程序关闭后依然能接收到消息。现在来做一个开机启动,不如开机以后我就给发送一条广播,然后就让该app完成页面跳转
 
 Intent intent1=new Intent(context,PlayerActivity.class);
//在你进行跳转的时候由于该页面PlayerActivity还没有在栈里面,所以没法跳转,那么就要给创一个栈

        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//然后就可以跳转
        context.startActivity(intent1);
3.然后进行注册
//你的recicer的名字
<receiver android:name=".MyReciver">
//这个就是筛选想要的广播,比如开机广播,短信广播,电池耗电量广播
    <intent-filter >
//action只能设置一个
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
//这个是对action的限制条件
        <category android:name="android.intent.category.DEFAULT"/>

    </intent-filter>
//这个是因为有些广播会被关闭,这个时候我们可以利用一个手机卡的确保发了广播。
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED"/>
        <action android:name="android.intent.action.PACKAGE_REMOVED"/>
        <action android:name="android.intent.action.PACKAGE_REPLACED"/>
        <data android:scheme="package"/>

        </intent-filter>
</receiver>
3.360管家可能会关闭某些广播,这个时候可以监听sd卡,同时还需要加上权限。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>如果是特殊权限还需要用户动态授权
上面这同时种清单注册就属于静态注册,同时我们在静态注册中我们只是进行广播没有发消息,下面我们进行动态注册,发消息。

动态注册:会注册的进程共存亡,(activty和服务会注册),尝试在activty里面注册广播,修改button的文本

1.首先new一个receiver,

 BroadcastReceiver receiver=new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
            int level=intent.getIntExtra("level",-2);
              int scale=intent.getIntExtra("scale",-2);
                but.setText("level"+level +"scale"+scale);
            }
        };
2.注册时还需要一个filter,设置一个action
IntentFilter filter=new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
3.注册reciver
  this.registerReceiver(receiver,filter);
4.接收到广播后然后取出来
 int level=intent.getIntExtra("level",-2);
              int scale=intent.getIntExtra("scale",-2);
                but.setText("level"+level +"scale"+scale);
下面时activity里的所有代码

public class NotifictionActivity extends AppCompatActivity {
       Button but;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notifiction);
        BroadcastReceiver receiver=new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
            int level=intent.getIntExtra("level",-2);
              int scale=intent.getIntExtra("scale",-2);
                but.setText("level"+level +"scale"+scale);
            }
        };
        IntentFilter filter=new IntentFilter();
        filter.addAction(Intent.ACTION_BATTERY_CHANGED);
      this.registerReceiver(receiver,filter);













  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值