广播BroadcastReceiver

广播接收器详解
本文详细介绍了Android中广播接收器的使用方法,包括如何创建BroadcastReceiver类、在AndroidManifest.xml中注册及配置意图过滤器,同时提供了发送和接收自定义有序与无序广播的具体实例。

接收系统的广播步骤
(1) 新建一个类继承BroadcastReceiver

以监听sd卡状态的广播接收者为例

public class SdCardBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if("android.intent.action.MEDIA_MOUNTED".equals(action)){
            System.out.println("sd卡已挂载");
        }else if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){
            System.out.println("sd卡已卸载");
        }
    }

}

形象一点的比喻, 这一步相当于买了个收音机

(2) 在清单文件中注册

<!-- 相当于装电池 -->
        <receiver android:name="com.example.sdbroadcast.SdCardBroadcastReceiver">
            <!-- 相当于调频道 -->
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_MOUNTED"/>
                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
                <data android:scheme="file"/>
            </intent-filter>
        </receiver>

这一步相当于装电池

(3) 在清单文件中添加意图过滤器,action里写监听的内容

<!-- 相当于调频道 -->
 <intent-filter>
   <action android:name="android.intent.action.MEDIA_MOUNTED"/>                 <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
 <data android:scheme="file"/>          
  </intent-filter>
  1. 发送自定义的无序广播

(1) 发送广播

public void startBroadcast(View view){
        //开启广播
        //创建一个意图对象
        Intent intent = new Intent();
        //指定发送广播的频道
        intent.setAction("com.example.BROADCAST");
        //发送广播的数据
        intent.putExtra("key", "发送无序广播,顺便传递的数据");
        //发送
        sendBroadcast(intent);
    }

(2) 接收广播

新建一个类,继承BroadcastReceiver

public class UnorderedReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        String data = intent.getStringExtra("key");

        System.out.println("接受到了广播,action:"+ action +",data:"+data);

        //接受到了广播,action:com.example.BROADCAST,data:发送无序广播,顺便传递的数据
    }

}

记得在清单文件中进行注册

<receiver android:name="com.example.selfreceiver.UnorderedReceiver">
            <intent-filter>
              <action android:name="com.example.BROADCAST"/>
             </intent-filter>
</receiver>
  1. 发送自定义的有序广播
    (1) 发送广播
// 发送有序广播
    public void sendOrderedBroad(View view) {
        Intent intent = new Intent();
        intent.setAction("com.example.ORDERED");
        // 发送无序广播
        sendOrderedBroadcast(intent,//意图动作,指定action动作
                null, //receiverPermission,接收这条广播具备什么权限
                new FinalReceiver(),//resultReceiver,最终的广播接受者,广播一定会传给他
                null, //scheduler,handler对象处理广播的分发
                0,//initialCode,初始代码
                "每人发10斤大米,不得有误!", //initialData,初始数据
                null//initialExtras,额外的数据,如果觉得初始数据不够,可以通过bundle来指定其他数据
                );
    }

权限从-1000 至 1000

1) 权限高的广播接收者可以修改广播,甚至可以终止广播

权限高的广播接收者1:

public class ShengReceiver extends BroadcastReceiver {

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

        //获取广播的数据
        String data = getResultData();

        //修改
        setResultData("中央下达福利,每人5斤大米");

        System.out.println("省政府收到指示, data : "+data);
    }

}

在这里, 这个接收者修改广播为: “中央下达福利,每人5斤大米”

权限低的广播接收者

public class PeopleReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //获取广播的数据
        String data = getResultData();
        System.out.println("老百姓收到福利,感谢党, data : "+data);
    }

}

权限低的接收者 接收到的广播就是修改后的了

2) 终止广播

权限高的广播接收者:

public class ShengReceiver extends BroadcastReceiver {

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

        //获取广播的数据
        String data = getResultData();

        //也可以终止广播,权限小的接收者就接收不到广播了
        abortBroadcast();

        System.out.println("省政府收到指示, data : "+data);
    }

}

(3) resultReceiver

可以在广播发送者的应用中建一个resultReceiver, 用于接收最终到达的广播,

无论广播是否终止,都会被resultReceiver接收

public class FinalReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String resultData = getResultData();
        System.out.println("人民收到的最终福利是: "+ resultData);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值