Resolver el problema de que los receptores de transmisión estática no pueden recibir transmisiones implícitas

En Android 8.0 y superior (Build.VERSION.SDK_INT>=26), si:
1) BroadcastReceiver está registrado estáticamente en AndroidManifest.xml;
2) Envía una transmisión implícita.
En este momento, el sistema informará el siguiente error:
BroadcastQueue: Ejecución en segundo plano no permitida: Intento de recepción...
Hay tres soluciones:

  1. Registre dinámicamente BroadcastReceiver en código;
  2. Envíe una transmisión explícita, es decir, especifique el nombre del paquete y el nombre de la clase;
  3. Agregue la bandera Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND a Intent.
    inserte la descripción de la imagen aquí
    Sin embargo, dado que FLAG_RECEIVER_INCLUDE_BACKGROUND está anotado con **@hide , el código de la capa de aplicación no puede encontrar esta variable (el código no se puede compilar correctamente),
    inserte la descripción de la imagen aquí
    por lo que solo se puede codificar como intent.addFlags( 0x01000000 ).
    inserte la descripción de la imagen aquí
    Se encuentra que el código todavía está marcado en rojo en Android Studio Aunque se puede compilar con éxito, la línea de código en realidad no se compila ni empaqueta en el apk.
    inserte la descripción de la imagen aquí
    La solución es
    agregar @SuppressLint("WrongConstant")** al método.

Referencias

  1. https://blog.csdn.net/wangwei890702/article/details/99644607
  2. android.content.Intent.java

Supongo que te gusta

Origin blog.csdn.net/wudexiaoade2008/article/details/116905007
Recomendado
Clasificación