《第一行代码 Android》发送标准广播弹不出两次提示消息

《第一行代码 Android》5.3.2发送有序广播遇到的问题

1、新建项目BroadcastTest2,然后新建一个广播接收器AnotherBroadcastReceiver

2、在activity_main.xml里添加action

3、书上意思是直接运行,然后在模拟器里跳到主界面,再调出BroadcastTest这个app,点击按钮,发送广播后,由于两个app都有监听器所以会分别弹出两次提示信息,但是我一开始只弹出了一次提示消息,是来自BroadcastTest的app,没有来自BroadcastTest2的提示消息

4、问题在于BroadcastTest中MainActivity的代码:

Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");
        
        //保留原来的静态广播,但是加入Component参数
        // 参数1是自定义广播的包名,参数2是自定义广播的路径
        //一个容器只能对应一个包名 

        intent.setComponent(new ComponentName("com.example.broadcasttest",
                "com.example.broadcasttest.MyBroadcastReceiver"));
        sendBroadcast(intent);
    }
});

Component参数是因为安卓版本更新所以发送广播时要加这个,但是在发送有序广播时也是因为Compnent参数中只有BroadcastTest的路径,所以点击按钮只能弹出BroadcastTest的提示消息,我先是再写了同样的Component参数,把路径改为BroadcastTest2中的路径,但是也只弹出了一个提示框,但是是来自BroadcastTest2的提示框,不难推测出Component参数只能设置一个路径,重复写也只是重置参数,只会取最后一个参数的值

Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");
        
       /*intent.setComponent(new ComponentName("com.example.broadcasttest",
                "com.example.broadcasttest.MyBroadcastReceiver"));*/
        intent.setComponent(new ComponentName("com.example.broadcasttest2",
                "com.example.broadcasttest2.AnotherBroadcastReceiver"));
        sendBroadcast(intent);  
    }
});

5、所以只要把原来Component参数中原来BroadcastTest的路径改为BroadcastTest2的路径就好啦,想要达到书上的效果的话,至少我还做不到,但是到这一步这个实验就算成功了。

最后,我是刚学安卓的新手,今后会持续在CSDN上记录我在学习过程中遇到的问题和解决办法,希望可以在这里学到很多新知识,谢谢。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值