PACKAGE_ADDED BroadcastReceiver no funciona

Tengo un receptor de radiodifusión registrado en Manifest:

<application ...> <receiver android:name="com.some.pkg.NewAppReceiver" > <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> </intent-filter> </receiver> </appcication> 

Y el receptor:

 public class NewAppReceiver extends BroadcastReceiver { private static final String TAG = "NewAppReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "Intent: " + intent.getAction()); } } 

Y no se recibe nada cuando instalo APK manualmente o desde el Android Market . ¿Por qué?

¿Has ejecutado la aplicación que contiene este broadcastReceiver antes de instalar las otras aplicaciones?

A partir de alguna versión de API, broadcastReceivers no funcionará hasta que ejecutes la aplicación. Poner una actividad y ejecutarla.

Además, no olvide añadir lo siguiente al broadcastReceiver:

 <data android:scheme="package" /> 

Dado que android.intent.action.PACKAGE_ADDED es un intento del sistema (tenga en cuenta que su propia aplicación no lo recibirá en su instalación), su BroadcastReceiver recibirá mensajes de fuentes externas a su aplicación. Por lo tanto, compruebe que NO puso: android: exportado = "false"

También puede ser necesario agregar:

 <data android:scheme="package" /> 

Por lo tanto, su BroadcastReceiver en su AndroidManifest.xml debe verse así:

 <application ...> <receiver android:name=".NewAppReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <data android:scheme="package" /> </intent-filter> </receiver> </appcication> 

Si todavía no funciona, puede intentar poner una prioridad más alta, como: android: priority = "1000"

Echa un vistazo a: http://developer.android.com/guide/topics/manifest/receiver-element.html

¿Está intentando recibir la intención en la aplicación que está instalando? La documentación de ACTION_PACKAGE_ADDED dice:

Tenga en cuenta que el paquete recién instalado no recibe esta transmisión.

Otra posibilidad es que esta intención no se puede entregar a los componentes registrados a través del manifiesto, pero sólo manualmente (como se describe en una respuesta de Mark Murphy a la pregunta de desbordamiento de pila No se pueden recibir transmisiones para intentos PACKAGE ).

Si intenta recibir algún otro paquete, debe ser trabajado.

(Como @Savvas anotado) Si intenta recibir la adición de su propio paquete, no puede recibirlo. Incluso si su receptor de difusión tiene action.PACKAGE_ADDED , el método onReceive del receptor no se activa .

En este caso lo mejor es guardar estos datos. Mediante el uso sharedPreferences , agregue una clave como "appIsWorkedBefore", y en el método onCreate de su lanzador Activity, establezca esta variable como "true". Y puedes hacer tus obras con respecto a este Booleano.

  • ¿Es el contexto de la aplicación siempre el mismo sin importar la clase?
  • Obtener la intensidad de la señal WiFi de la red conectada
  • BroadcastReceiver no funciona después de BOOT_COMPLETED
  • ¿Es posible leer el historial de costos de llamadas desde el diálogo planteado después de finalizar la llamada de prepago?
  • Android BroadcastReceiver android.intent.action.BATTERY_CHANGED
  • Cómo iniciar un IntentService de un WakefulBroadcastReceiver
  • Android - Iniciar el servicio en el arranque
  • WARN / ActivityManager (5038): Permiso denegado: checkComponentPermission
  • Creación de una notificación en un momento determinado mediante el Administrador de alarmas
  • SMS enviados / entregados: ¿cómo identificas a qué SMS pertenece la emisión?
  • Escaneado Wi-Fi sin receptor de difusión?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.