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:
- Registre dinámicamente BroadcastReceiver en código;
- Envíe una transmisión explícita, es decir, especifique el nombre del paquete y el nombre de la clase;
- Agregue la bandera Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND a Intent.
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),
por lo que solo se puede codificar como intent.addFlags( 0x01000000 ).
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.
La solución es agregar @SuppressLint("WrongConstant")** al método.
Referencias
- https://blog.csdn.net/wangwei890702/article/details/99644607
- android.content.Intent.java