关于BroadcastReceiver的学习与使用

一、 广播的含义

1.广播是Android的四大组件之一,全称是BroadcastReceiver
2.广播分为发送方和接受方(就算没有接收方,发送方也会发送数据)
3.广播可以实现跨多个页面的数据通信
4.广播可以跨进程甚至多个APP间的数据通信

二、广播的分类

分类详解
无序广播无论多少接受者,一发此广播,所有监听此广播的接受者都可收到
有序广播按照接受者的优先级,逐一传递。优先级最高的接收方有是否继续传递的决定权
粘滞广播发出后,如果没有接受方,则会一直等待,直到广播接收

三、静态注册无序广播示例

1.新建类继承BroadcastReceiver,然后在里面实现他的onReceive抽象方法

public class MyBroadcastReceiver extends BroadcastReceiver {


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


        Toast.makeText(context, "我是你爸爸", Toast.LENGTH_SHORT).show();


    }

}

2.在AndroidManifest中注册BroadcastReceiver

 <receiver android:name=".MyBroadcastReceiver">
            <intent-filter >
                <action android:name="broadcast" />
            </intent-filter>
        </receiver>

3.在有Context环境中通过sendBroadcast发送广播

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zhifubao);

        Intent intent=new Intent();
        intent.setAction("broadcast");//选择频道号
        sendBroadcast(intent);//发送广播

四、动态注册发送无序广播示例

1.新建类继承BroadcastReceiver,然后在里面实现他的onReceive抽象方法

public class MyBroadcastReceiver extends BroadcastReceiver {
    private String ATG="";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(ATG,"我是你爸爸");

        Toast.makeText(context, "我是你爸爸", Toast.LENGTH_SHORT).show();
    }
}

2.在代码中实例化MyBroadcastReceiver广播类,并且实例化IntentFilter

 private MyBroadcastReceiver receiver;
 receiver = new MyBroadcastReceiver();
        IntentFilter filter = new IntentFilter();

3.调用IntentFilter对象的addAction方法设置频道号

filter.addAction("broadcast");

4.在有Context环境中通过sendBroadcast发送广播

 //动态注册广播接收器
        registerReceiver(receiver, filter);

在有Context环境中通过unregisterReceiver注销广播

 protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

五、静态注册有序广播示例

1.新建类继承BroadcastReceiver,然后在里面实现他的onReceive抽象方法

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent();
                intent.setAction("broadcast");
               sendOrderedBroadcast(intent,null);
            }
        });

2.分别新建项目B和项目C,新建类继承BroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver {
    private String ATG="";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(ATG,"我是你爸爸");

        Toast.makeText(context, "我是你爸爸", Toast.LENGTH_SHORT).show();
    }
}
public class MyBroadcastReceiver extends BroadcastReceiver {
    private String ATG="";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(ATG,"我是你妈妈");
        Toast.makeText(context, "我是你妈妈", Toast.LENGTH_SHORT).show();
        abortBroadcast();
    }
}

3.在各自的AndroidManifest中注册BroadcastReceiver,这里需要注意的是需要写入priority属性设置优先级
项目B

 <receiver android:name=".MyBroadcastReceiver">
            <intent-filter android:priority="1000">
                <action android:name="broadcast" />
            </intent-filter>
        </receiver>

项目C

 <receiver android:name=".MyBroadcastReceiver">
            <intent-filter android:priority="-1000">
                <action android:name="broadcast" />
            </intent-filter>
        </receiver>

六、动态注册发送无序广播示例

1.新建类继承BroadcastReceiver,然后在里面实现他的onReceive抽象方法
项目B

public class MyBroadcastReceiver extends BroadcastReceiver {
    private String ATG="";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(ATG,"我是你爸爸");

        Toast.makeText(context, "我是你爸爸", Toast.LENGTH_SHORT).show();
    }
}

项目C

public class MyBroadcastReceiver extends BroadcastReceiver {
    private String ATG="";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(ATG,"我是你妈妈");
        Toast.makeText(context, "我是你妈妈", Toast.LENGTH_SHORT).show();
        abortBroadcast();
    }
}

2.与静态的差不多,唯一不同的就是把加到AndroidManifest里的写到代码里
项目B

 private MyBroadcastReceiver receiver;
 receiver = new MyBroadcastReceiver();
        IntentFilter filter = new IntentFilter();
        filter.setPriority(-1000);
        filter.addAction("broadcast");
        //动态注册广播接收器
        registerReceiver(receiver, filter);
    }

    //取消注册
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

}

项目C




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mei_tuan);
        receiver = new MyBroadcastReceiver();
        IntentFilter filter = new IntentFilter();
        filter.setPriority(1000);
        filter.addAction("broadcast");
        //动态注册广播接收器
        registerReceiver(receiver, filter);
    }

3.回到主体类里通过sendOrderedBroadcast来启动

 public void onClick(View view) {
                Intent intent = new Intent();
                intent.setAction("broadcast");
               // sendBroadcast(intent);
                sendOrderedBroadcast(intent,null);


            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值