《第一行代码 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上记录我在学习过程中遇到的问题和解决办法,希望可以在这里学到很多新知识,谢谢。

你可能感兴趣的:(《第一行代码 Android》发送标准广播弹不出两次提示消息)