Solution de problème invalide de diffusion d'enregistrement Android8.0

Après Android 8.0, vous devez spécifier le nom du package et le nom de la classe lors de l'enregistrement de la diffusion. Si vous ne parvenez toujours pas à recevoir la diffusion lors de l'enregistrement selon la méthode précédente

Jetons un coup d'œil à la manière d'enregistrer les diffusions avant la version 8.0

Créez d’abord une classe de réception de diffusion

    /**
     * 静态广播接收器执行方法(接收)
     */
    public static class StaticReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.e("接收到的广播","------------1"+intent.getStringExtra("msg"));
            //需要更新的内容
        }
    }

Enregistrez cette diffusion dans le fichier manifeste

        <!-- 注册自定义静态广播接收器 -->
        <receiver android:name=".fragment.RecheckedInfoFragment$StaticReceiver">
            <intent-filter>
                <action android:name="com.recheckedinfoadapter.recheckedinfoadapterreelectbarrel.staticreceiver" />
            </intent-filter>
        </receiver>

Ensuite, écrivez où vous devez envoyer la diffusion

    public static final String RECHECKEDACTION = "com.recheckedinfoadapter.recheckedinfoadapterreelectbarrel.staticreceiver";    //静态广播的Action字符串
    Intent intent = new Intent();
    intent.setAction(RECHECKEDACTION);        //设置Action
    intent.putExtra("msg", "发送的广播");    //添加附加信息
    context.sendBroadcast(intent);

L'exécution de l'envoi d'une diffusion recevra les informations dans le récepteur de diffusion, mais c'est différent après Android 8.0. Les deux premiers morceaux de code n'ont pas besoin d'être déplacés, spécifiez simplement le nom du package et le nom de la classe lors de l'envoi.

    //context就是当前的类名
    Intent intent = new Intent();
    intent.setAction(RECHECKEDACTION);        //设置Action
    intent.setComponent(new ComponentName(context,    RecheckedInfoFragment.StaticReceiver.class));
    context.sendBroadcast(intent);

ajouter un jugement

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

 

Je suppose que tu aimes

Origine blog.csdn.net/lanrenxiaowen/article/details/113634320
conseillé
Classement