Android8.0之后注册广播需要指明包名和类名,如果还是按照以前的方法注册时接收不到广播的
先看一下8.0之前注册广播的方式
先创建一个广播接收类
/**
* 静态广播接收器执行方法(接收)
*/
public static class StaticReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("接收到的广播","------------1"+intent.getStringExtra("msg"));
//需要更新的内容
}
}
在清单文件中注册此广播
<!-- 注册自定义静态广播接收器 -->
<receiver android:name=".fragment.RecheckedInfoFragment$StaticReceiver">
<intent-filter>
<action android:name="com.recheckedinfoadapter.recheckedinfoadapterreelectbarrel.staticreceiver" />
</intent-filter>
</receiver>
然后在需要发送广播的地方写
public static final String RECHECKEDACTION = "com.recheckedinfoadapter.recheckedinfoadapterreelectbarrel.staticreceiver"; //静态广播的Action字符串
Intent intent = new Intent();
intent.setAction(RECHECKEDACTION); //设置Action
intent.putExtra("msg", "发送的广播"); //添加附加信息
context.sendBroadcast(intent);
执行发送广播就会在广播接收器收到信息,但是在Android8.0之后就不一样了,前面两段代码不用动,只是在发送的时候指明包名类名就可以了
//context就是当前的类名
Intent intent = new Intent();
intent.setAction(RECHECKEDACTION); //设置Action
intent.setComponent(new ComponentName(context, RecheckedInfoFragment.StaticReceiver.class));
context.sendBroadcast(intent);
加个判断
if (Build.VERSION.SDK_INT >= 26) {
Intent intent = new Intent();
intent.setAction(RECHECKEDACTION); //设置Action
intent.setComponent(new ComponentName(context, RecheckedInfoFragment.StaticReceiver.class));
context.sendBroadcast(intent);
}else {
Intent intent = new Intent();
intent.setAction(RECHECKEDACTION); //设置Action
intent.putExtra("msg", "重选泡药桶成功"); //添加附加信息
context.sendBroadcast(intent);
}