Android8.0注册广播无效问题解决方案

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);
    }

猜你喜欢

转载自blog.csdn.net/lanrenxiaowen/article/details/113634320