2012-01-18 23 views
10

Tengo una aplicación que mantiene un registro de las aplicaciones desarrolladas internamente instaladas en el dispositivo. Tras la instalación de un receptor de radiodifusión Intent.PACKAGE_ADDED se invoca y registra el nombre del paquete usando el siguiente código:Cómo encontrar el nombre del paquete que se ha desinstalado al usar Intent.ACTION_PACKAGE_REMOVED

public class NewInstallReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle b = intent.getExtras(); 
     int uid = b.getInt(Intent.EXTRA_UID); 
     String[] packages = context.getPackageManager().getPackagesForUid(uid); 

     ApplicationService appService = new ApplicationService(context); 
     appService.ApplicationInstalled(packages); 
    } 
} 

El problema que estoy enfrentando es cuando se usa un receptor de radiodifusión para Intent.PACKAGE_REMOVED, toda referencia al paquete a través del identificador único (UID) regresa con información nula (como era de esperar, dado que ya se ha desinstalado). Aunque tengo una solución temporal, pero no es muy elegante, y para la próxima versión me gustaría tener un código más limpio. Un ejemplo de cómo el código debería funcionar:

public class RemoveApplicationReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle b = intent.getExtras(); 
     int uid = b.getInt(Intent.EXTRA_UID); 
     String[] packages = context.getPackageManager().getPackagesForUid(uid); 

     ApplicationService appService = new ApplicationService(context); 
     appService.ApplicationRemoved(packages); 
    } 

} 

Así que para recapitular, la pregunta es:

Cómo, después de un programa se ha eliminado, puede hacer referencia a que el nombre del paquete en un receptor de radiodifusión para el intento. PACKAGE_REMOVED.

Gracias

+0

También obtengo null de getPackagesForUid (uid). Lo que quiero es obtener una lista de todos los paquetes instalados para el usuario actual. ¿Alguien puede aportar algo? – Pratik

Respuesta

13

El paquete nombres están en el Intento que obtuvo de BroadcasReceiver, utilice la función "getData()", existe la ComponentMame del paquete instalado/desinstalado.

+12

Funcionó de maravilla ... simplemente usó getData(). GetSchemeSpecificPart(). Gracias – Kennifer

+4

Cuando imprimo intent.toString() puedo ver el nombre del paquete, pero cuando uso intent.getData(). GetSchemeSpecificPart() obtengo una cadena vacía. ¿Qué estoy haciendo mal? – gonzobrains

+3

@gonzobrains ¿Probablemente no configuró el esquema? En el manifiesto, debería verse así: ''. –

Cuestiones relacionadas