2012-06-28 14 views
15

Quiero hacer una aplicación que pueda recibir difusión cuando se instalan o eliminan otras aplicaciones en el dispositivo.Cómo hacer que mi aplicación reciba difusión cuando se instalan o eliminan otras aplicaciones

mi código

en manifset:

<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 todo tipo de transmisiones. Creo que este problema se debe a los permisos de la aplicación, ¿alguna idea?

Gracias por su ayuda.

Respuesta

40

En el 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> 

Añadir la línea antes de la etiqueta-filtro intención

<data android:scheme="package"/> 

Así que su manifiesta debería tener este aspecto:

<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 acerca el intento PACKAGE_REMOVED en eso si realmente está disponible.

+0

Funcionó 1 .. thnx –

+2

@ arg1.getDataString rup35h() devolverá "paquete: TheInstalledPackageName" igual "paquete: com.google.joke " – wangqi060934

+0

' PACKAGE_INSTALL' es inútil, obsoleto y nunca ha sido utilizado por Google: https://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_INSTALL – Solidak

17

Debe eliminar android.intent.action.PACKAGE_INSTALL ya que está en desuso y ya no se recomienda, porque es solo para el sistema. Todo lo demás es perfecto y recomendaría que en lugar de 100, ponga 999, la documentación no dé el número máximo o mínimo para usar, cuanto mayor sea el número, mayor será la prioridad que tendrá su receptor para esa intención. Perdón por el traductor Yo 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> 

+0

Gracias mucho @kiddie .... –

7

grandes respuestas, sólo una cosa pequeña a la izquierda:

En cada actualización de la aplicación ACTION_PACKAGE_REMOVED primero se llamará seguido por ACTION_PACKAGE_ADDED- si desea ignorar estos eventos, sólo tiene que añadir que en su OnReceive():

if(!(intent.getExtras() != null && 
    intent.getExtras().containsKey(Intent.EXTRA_REPLACING) && 
    intent.getExtras().getBoolean(Intent.EXTRA_REPLACING, false))) { 

    //DO YOUR THING 
} 

se trata de los documentos:

EXTRA_REPLACING añadido en el nivel API de 3 cuerdas EXTRA_REPLACING utiliza como un valor lógico campo extra en las intenciones ACTION_PACKAGE_REMOVED para indicar que este es un reemplazo del paquete, por lo que esta emisión se estar inmediatamente seguido por una emisión complemento para un diferente versión de el mismo paquete. Valor fijo: "android.intent.extra.REPLACING"

+0

Quiero que mi transmisión desencadene eventos solo cuando la aplicación se instala o desinstala, pero no cuando se actualiza la aplicación. ¿Cómo manejar esto? –

Cuestiones relacionadas