Android四大组件之BroadcastReceiver

           
    ##广播接收者的特点:BroadcastReceiver组件
即使应用程序的进程不存在,当广播事件到来的时候,广播接受者的进程会自动的启动,响应广播事件
4.0,点击了强行停止后,就把某一个程序个冻结了,想要恢复需要手动恢复
6.0最大的改动是 权限机制        
> 电量不足,sd卡被移除,电话外拨,短息到了等等各种各样的事件...

 (1):广播接受者的创建
    1,写一个类继承BroadcastReceiver
        class SDCardStatusReceiver extends BroadcastReceiver
        OnReceive();方法,表示接受到广播的时候调用
        当我们在广播接收者里面开启activity的时候,因为广播接收者的上下文是不包含任务栈的,
        因此直接开启activity会报错,怎么样才能不报错?(提示:加一个flag)
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        
    2,清单文件中配置Receiver
        <receiver android:name="com.itheima.sdstatus.SDCardStatusReceiver" >    类的全路径名
    3,设置action(文件过滤器里面)
        <intent-filter>   (调到对应的频道)
                    <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
                    //指定数据类型
                    <data android:scheme="file"></data>
        </intent-filter>

  (2):广播事件的类型
        * 无序广播
        > 广播消息没有顺序,同时接受广播消息. 效率高.
        sendBroacast();
        * 有序广播
        > 广播消息是按照一定的顺序传达的, 高优先级的先得到广播消息,低优先级的后得到,高优先级的可以拦截广播消息或者修改广播消息. 效率比较低.
        sendOrderdBroadcast(七个参数);
          静态广播(在清单文件中配置)
          动态广播(用代码的方式注册广播)
            注意:四大组件,只有广播提供者可以new出来其他的都不能
            动态注册广播使用到的api大致有:
                
                //注册广播接受者
                receiver = new XXXXXX();
                //类似于清单文件中你的文件过滤器
                IntentFilter filter = new IntentFilter();
                //相当于清单文件里面的action标签
                filter.addAction("android.intent.action.SCREEN_OFF");
                filter.addAction("android.intent.action.SCREEN_ON");
                //最后注册广播
                registerReceiver(receiver, filter);
                
    (3):取消广播接受者(有注册一定要在当前activity销毁的时候要取消广播)
        如果activity结束了,广播接受者还在存在着就会爆出内存泄漏.ManiActivity has leaked IntentReceiver异常
        即使不取消系统也会自动取消,因为导致了内存泄漏了(所以我们不想让logcat里面爆出日志信息实现下面代码即可)
        在onDestroy()方法里面
        unregisterReceiver(receiver);
        receiver=null;

    ##特殊广播事件
    > 在android里面有一些产生非常频繁的广播事件,在清单文件里面配置是不会生效.(因为对内存消耗比较大(如果一下子来了三十个进程),
    且耗电,因为即使应用程序的进程不存在,
    当广播事件到来的时候,广播接受者的进程会自动的启动,响应广播事件)
    > 电量变化 屏幕锁屏/解锁 这些广播事件只能利用代码注册.(动态广播)        
            
            
    系统常见的一些频道
    //SD卡的指定频道
      <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
    //手机的开机启动的广播频道指定(4.0需要一个权限  RECEIVER_BOOT_COMPLETED)
      <action android:name="android.intent.action.BOOT_COMPLETED"/>  
    //电话外播频道
    <action android:name="android.intent.action.NEW_OUTGOING_CALL>
    //短信 (需要添加权限RECEIVE_SMS...)侵犯了隐私4.0之后被谷歌屏蔽了
    <action android:name="android.intent.android.provider.Telephony.SMS_RECEIVED>
    //屏幕频道
      <action android:name="android.intent.action.SCREEN_OFF"/>
      <action android:name="android.intent.action.SCREEN_ON"/>
                

           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值