一:什么是BroadcastReceiver

Broadcast(广播)是一种广泛运用于在应用程序之间一步传播消息的机制
系统消息
Android系统发出的,电池不足、来电信息等
自定义消息
第三方应用发出的广播消息

广播消息本质上就是一个Intent对象
Intent是一对一的通信,广播消息是一对多的通信

BroadcastReceiver用于接受并处理广播消息
BroadcastReceiver没有用户界面
借助其他方式和用户交互,例如,启动Activity、使用Notification等

二.广播消息的处理流程

1.广播消息的处理分为三个环节:1.消息发送  2.BroadcastReceiver注册   3.消息处理

2.系统广播都被定义为android.content.Intent中的Action常量

3.利用BroadcastReceiver实现onReceive方法 。捕获系统广播ACTION_BOOT_COMPLETED可以轻松实现开机后程序自动运行

4.在AndroidManifest.xml文件中增加应用权限声明

 

<uses-permission android:name="com.mybroadcast.permission"/>

广播消息发送方式有多种
无序广播:sentBroadcast(),效率高,但是消息处理器之间没有关联
有序广播:sendOrderedBroadcast(),可以传递处理数据
持续广播:sendStickyBroadcast()发送的广播一直存在

三.发送一个普通广播

 1.发送一个普通广播

//发送一个普通广播(1:发广播,2:注册一个接收者,3:处理广播)
    public void send_broadcast(View iew){
        Intent intent=new Intent();
        intent.setAction("com.gdnf.broadcast_1");//自定义一个广播地址
        intent.putExtra("message","2018年1月1号放假一天");
        //开始广播
        sendBroadcast(intent,"com.mybroadcast.permission");
    }

 

 2.静态注册一个接收者

1 <!--静态注册一个广播接收者-->
2         <receiver
3             android:permission="com.mybroadcast.permission"
4             android:name="com.example.broadcast_receiver.Broadcast_Receiver_1">
5             <!--过滤接收什么样的广播-->
6             <intent-filter>
7                 <action android:name="com.gdnf.broadcast_1"/>
8             </intent-filter>
9         </receiver>

 

 3.定义一个广播接收者

/**
 * 定义了一个广播接收者
 */
public class Broadcast_Receiver_1 extends BroadcastReceiver{

    //对接收到的广播进行处理
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("Broadcast_Receiver_1","Broadcast_Receiver_1接收到广播");
        String message=intent.getStringExtra("message");
        Log.i("Broadcast_Receiver_1","Broadcast_Receiver_1收到消息:"+message);
    }
}

 

四.发送一个有序广播

1.

   //发送有序广播
    public void send_order_broadcast(View view){
        Intent intent=new Intent("com.gdnf.broadcast_order");

sendOrderedBroadcast(intent,null,null,null,0,"发放1万过年补贴",null);
 }

 

2.注册接收者,并且声明接收者收到广播的先后顺序

priority降序排列,值最大的,最先收到广播。依次类推
        <receiver android:name="com.example.broadcast_receiver.OrderBroadcast_1">
            <intent-filter android:priority="10">
                <action android:name="com.gdnf.broadcast_order"/>
            </intent-filter>
        </receiver>
        <receiver android:name="com.example.broadcast_receiver.OrderBroadcast_2">
            <intent-filter android:priority="9">
                <action android:name="com.gdnf.broadcast_order"/>
            </intent-filter>
        </receiver>
        <receiver android:name="com.example.broadcast_receiver.OrderBroadcast_3">
            <intent-filter android:priority="8">
                <action android:name="com.gdnf.broadcast_order"/>
            </intent-filter>
        </receiver>

 

3.以上面为例 priority="10"最先收到广播可以对广播内容进行修改后再把广播发送出去

public class OrderBroadcast_1 extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String message=intent.getStringExtra("message");
        String date=getResultData();//获取数据
        Log.i("OrderBroadcast_1","OrderBroadcast_1第一个收到广播"+message);
        Log.i("OrderBroadcast_1","通知内容是:"+date);
        setResultData("发放3000过年补贴");
    }
}

 

priority="9"接收到的内容已经改变,依次类推。