Android学习七 BroadcastReceiver广播接收者

来源:互联网 发布:lm算法 编辑:程序博客网 时间:2024/06/07 01:44

        BroadcastReceiver广播接收者也是Android四大组件之一,Android中有些应用在特定的情景下会发送广播,利用广播接收者可以实现对广播的接收。广播接收者可以监控一些行为的发生,在此基础上进行一些操作。广播的发送的一般应用场合:发送频率低的情况可以使用,数据量小的情况可以使用。下面来看一下具体的内容。

一、实现广播接收者

1.定义一个类继承BroadCastReceiver ,并且重写其中的onReceive方法。
2.注册广播接收者

有两种方式注册广播接收者,分别为静态注册和动态注册。

静态注册:在清单文件里配置,下面是代码

        <receiver android:name="">//这里填写类名            <intent-filter >                <action android:name="android.intent.action.BOOT_COMPLETED"/>//这里填写要监听的事件            </intent-filter>        </receiver>

动态注册:用Java代码注册,代码如下

        MyReceiver receiver=new MyReceiver();//广播接受者实例        IntentFilter intentFilter=new IntentFilter();        intentFilter.addAction("android.intent.action.BOOT_COMPLETED");//添加监听事件        registerReceiver(receiver,intentFilter);
当监听的事件发生时,就会去执行广播接收器中的onReceiver方法。通常来说使用动态注册和静态注册都可以,但是也有例外。即对于操作比较频繁的广播事件(如屏幕的解屏和锁屏、电池电量的变化等),在清单文件里配置无效,必须在代码中动态配置(可能会报mainActivity has leaked的错误)。

下面是一个监听sd卡状态的小案例:

//当sd卡被卸载 或者被挂载上来的时候 会执行@Overridepublic void onReceive(Context context, Intent intent) {//[1]获取到当前广播的事件类型 String action = intent.getAction();//[2]对action做一个判断 if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){System.out.println("说明sd卡 卸载了");}else if ("android.intent.action.MEDIA_MOUNTED".equals(action)) {System.out.println("说明sd卡挂载了");}}
清单文件中的配置:

        <receiver android:name="com.itheima.sdcardstate.SdcardReceiver">            <intent-filter >                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>                <action android:name="android.intent.action.MEDIA_MOUNTED"/>                 <action android:name="android.intent.action."/>                <!--想让上面的这2个事件生效 必须加上这样的一个data   -->                <data android:scheme="file"/>            </intent-filter>        </receiver>
二、发送广播

1、无序(普通)广播。无序广播就是发出的广播同时到达各广播接收者,没有先后之分。广播不可以被终止,数据不会被修改。

发送一条无序广播的代码:

Intent intent = new Intent();//设置action intent.setAction("...");//设置接收的类(广播接收者)intent.putExtra("name", "这是一条无序广播");//设置数据//发送一条广播 发送无序广播sendBroadcast(intent);

2、有序广播。有序广播会按照优先级被一级一级的接收,有序广播可以被终止,数据可能会被修改。

发送一条有序广播的核心代码:

//发送一条有序广播 Intent intent = new Intent();//设置一个actionintent.setAction("com.itheima.rice");sendOrderedBroadcast(intent, null);
配置优先级(在广播接收者的清单文件中配置)

        <receiver android:name="...">            <intent-filter  android:priority="1000">                <action android:name="..."/>            </intent-filter>        </receiver>
或者在代码中动态的配置
filter.setPriority(999);
关于优先级的大小:貌似官方的说法是-1000到1000,但是实际并不是这样,只要是在整数的范围内(-2147483648到2147483647)应该都可以。

有序广播的截止和修改:在广播接收者中调用abortBroadcast();这个方法,可以使有序广播终止传递(比此广播接受者优先级低的将不会接收到这条广播)。调用setResultData(“”);这个方法可以对有序广播携带的数据进行修改。

原创粉丝点击