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