requerido quitar puedo play permisos permiso necesario los inhabilitaste habilitar google desactivado dar contactos como aplicaciones administrador activar android permissions broadcastreceiver

android - quitar - no puedo dar permisos a aplicaciones



Cómo hacer que mi aplicación reciba difusión cuando otras aplicaciones se instalan o eliminan (3)

Debe eliminar android.intent.action.PACKAGE_INSTALL ya que está en desuso y ya no se recomienda, ya que es solo para el sistema. Todo lo demás es perfecto y recomendaría que, en lugar de 100, coloque 999, la documentación no indique el número máximo o mínimo de uso, cuanto mayor sea el número, mayor prioridad tendrá el receptor para esa intención. Lo siento por el traductor. Hablo y escribo en español. Information

<receiver android:name=".apps.AppListener"> <intent-filter android:priority="999"> <action android:name="android.intent.action.PACKAGE_ADDED"/> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <data android:scheme="package"/> </intent-filter>

Quiero hacer una aplicación que pueda recibir transmisión cuando se instalen o eliminen otras aplicaciones en el dispositivo.

mi código

en conjunto:

<receiver android:name=".apps.AppListener"> <intent-filter android:priority="100"> <action android:name="android.intent.action.PACKAGE_INSTALL"/> <action android:name="android.intent.action.PACKAGE_ADDED"/> <action android:name="android.intent.action.PACKAGE_REMOVED"/> </intent-filter> </receiver>

en AppListener:

import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class AppListener extends BroadcastReceiver { @Override public void onReceive(Context context, Intent arg1) { // TODO Auto-generated method stub Log.v(TAG, "there is a broadcast"); } }

pero no puedo recibir ninguna transmisión. Creo que este problema se debe a los permisos de la aplicación, ¿alguna idea?

Gracias por ayudar.


En tu manifiesto:

<receiver android:name=".apps.AppListener"> <intent-filter android:priority="100"> <action android:name="android.intent.action.PACKAGE_INSTALL"/> <action android:name="android.intent.action.PACKAGE_ADDED"/> <action android:name="android.intent.action.PACKAGE_REMOVED"/> </intent-filter> </receiver>

Agregue la línea antes de la etiqueta de filtro de intento

<data android:scheme="package"/>

Entonces tu manifiesto debería verse así:

<receiver android:name=".apps.AppListener"> <intent-filter android:priority="100"> <action android:name="android.intent.action.PACKAGE_INSTALL"/> <action android:name="android.intent.action.PACKAGE_ADDED"/> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <data android:scheme="package"/> </intent-filter> </receiver>

No estoy seguro de la intención de PACKAGE_REMOVED en cuanto a si está disponible.


Grandes respuestas, solo queda una pequeña cosa:

En cada actualización de la aplicación, primero se llamará a ACTION_PACKAGE_REMOVED seguido de ACTION_PACKAGE_ADDED. Si desea ignorar estos eventos, simplemente agréguelo a su onReceive ():

if(!(intent.getExtras() != null && intent.getExtras().containsKey(Intent.EXTRA_REPLACING) && intent.getExtras().getBoolean(Intent.EXTRA_REPLACING, false))) { //DO YOUR THING }

Esto es de los documentos:

EXTRA_REPLACING Añadido en la cadena API nivel 3 EXTRA_REPLACING Se utiliza como un campo extra booleano en ACTION_PACKAGE_REMOVED para indicar que se trata de un reemplazo del paquete, por lo que esta transmisión será seguida inmediatamente por una transmisión adicional para una versión diferente del mismo paquete. Valor constante: "android.intent.extra.REPLACING"