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