1)5.2.1弹出两次已连接或者未连接
这是因为你同时打开了流量和WiFi,他就会发出两次广播。
2)5.3.1中发送自定义广播问题
标准广播未能弹出消息:
Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);
上述已经失效了。
修改:
Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");
intent.setPackage("com.example.broadcasttest");
sendBroadcast(intent);
原因:
若App的TargetSDK达到了26, 我们正常静态注册的广播就没有用了。能用的仅有以下豁免的Broadcast, 包括我们自己正常发广播,如果不指定包名, 静态注册的也是收不到的。PS:动态注册是没有影响的。
3)5.3.2发送有序广播时同样的问题
BroadcastTest2接收不到标准广播,未能弹出"received in AnotherBroadcastReceiver"
解决办法:
在发送广播中的那个MainActivity中修改
Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");
intent.setPackage("com.example.broadcasttest");
sendBroadcast(intent);
Intent intent2=new Intent("com.example.broadcasttest.MY_BROADCAST");
intent2.setPackage("com.example.broadcasttest2");
sendBroadcast(intent2);
原因:
依然是因为静态注册未指定包名;
4)截断广播
静态注册的广播不知道能不能截断,但是似乎说是失效了,只能截断动态注册广播。此时我们就会换成动态注册,以后也尽量使用动态注册。也不需要带上setPackage就能发送了,简单多了。
private IntentFilter intentFilter;
private MyBroadcastReceiver myBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
intentFilter = new IntentFilter();
intentFilter.addAction("com.example.broadcasttest.MY_BROADCAST");
intentFilter.setPriority(100);
myBroadcastReceiver = new MyBroadcastReceiver();
registerReceiver(myBroadcastReceiver,intentFilter);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
// intent.setPackage("com.example.mybroadcastreceiver");
sendOrderedBroadcast(intent,null);
// Intent intent2 = new Intent("com.example.broadcasttest.MY_BROADCAST");
// intent2.setPackage("com.example.broadcasttest2");
// sendOrderedBroadcast(intent2,null);
}
});
intentFilter.setPriority(100);
设置优先级,优先级高的先播出。
如果需要截断,就是不向下继续传递广播,就可以在该广播中写如:
abortBroadcast();
以上我将学习《第一行代码》(第二版)广播因代码失效改进的问题。
本文章借鉴如下博客:
这个是原因,但是其中的代码我没有成功实现。
(5条消息) 《第一行代码2》的5.3.1节,发送标准广播后没有弹出提示消息_qq_42332046的博客-CSDN博客
以下是成功实现的代码原博客: