¿Es posible detectar la desinstalación de la aplicación de Android?

Estos son los aspectos más destacados para lograr la solución:

1. Cada vez que el usuario vaya a Configuración -> Administrar aplicaciones -> Selecciona una aplicación en particular , recibimos una transmisión android.intent.action.QUERY_PACKAGE_RESTART con el nombre del paquete de la aplicación como extras.

2. Después de eso, cuando hacemos clic en el botón Desinstalar (con el instalador del paquete), se abre una actividad llamada – com.android.packageinstaller.UninstallerActivity

El flujo de control será como:

En Configuración de la aplicación, el usuario hace clic en el botón Desinstalar -> Obtenemos el control para mostrar un diálogo / iniciar otra actividad / etc -> Terminamos nuestra tarea previa a la desinstalación -> El usuario vuelve a la pantalla de confirmación de desinstalación -> El usuario confirma y desinstala el aplicación

Método utilizado

Implementaremos un BroadcastReceiver en nuestra aplicación para escuchar la acción ” android.intent.action.QUERY_PACKAGE_RESTART ” y unir el nombre de nuestro paquete dentro del método onReceive (). Si se recibió la transmisión para la selección de nuestro paquete de aplicación deseado, entonces iniciaremos un subproceso en segundo plano que seguirá monitoreando las actividades en ejecución en primer plano utilizando el ActivityManager.

Una vez que encontremos que la actividad en primer plano es ” com.android.packageinstaller.UninstallerActivity “, se confirmará que el usuario desea desinstalar nuestra aplicación. En este punto realizaremos las tareas deseadas (ya sea mostrar un diálogo o iniciar otra actividad superponiendo la ventana de desinstalación, etc.) que se realizarán antes de la desinstalación. Después de realizar nuestra tarea, permitiremos que el usuario continúe confirmando el proceso de desinstalación.

Implementación / Código fuente:

En manifest.xml

agregar permiso:

y receptor de difusión:

No querida, no puedes comprobar que tu aplicación se va a desinstalar.

Cuando el usuario desinstala la aplicación, al principio se elimina el proceso, luego se eliminan el archivo apk y el directorio de datos, junto con los registros en el Administrador de paquetes que indican a otras aplicaciones para qué filtros de intención se ha registrado.

Pero puede crear su carpeta en su directorio de caché para que cuando se elimine su aplicación todas las carpetas y archivos se eliminen automáticamente.

Compruébalo: App Cleaner & Uninstaller para Mac – Descarga GRATIS

Por lo tanto, no hay forma de que su aplicación sepa que se está desinstalando (sin modificar el núcleo). Todos los archivos creados en data / data / your.app.package se eliminan automáticamente al desinstalar.

Otro enfoque podría ser tener otra aplicación que verifique si esta aplicación está instalada o no. Si no, puede hacer el trabajo de limpieza.

Puede registrar un evento de transmisión y, si el usuario desinstala cualquier aplicación, puede recibir el nombre del paquete. Lamentablemente, la intención ACTION_PACKAGE_REMOVED se enviará a todos los receptores, excepto el suyo. Esto se confirma aquí.

Citando la documentación de Android:

ACTION_PACKAGE_REMOVED

Acción de difusión: un paquete de aplicación existente se ha eliminado del dispositivo. Los datos contienen el nombre del paquete. El paquete que se está eliminando no recibe esta intención.

Sí.

Las aplicaciones de Android pueden escuchar la transmisión ACTION_PACKAGE_REMOVED . Esto le dará los detalles sobre la desinstalación de todas las aplicaciones, excepto la suya.

Para eso, puede usar la consola de desarrollador de Android. El problema con esto es que no obtienes detalles específicos, como cuándo se desinstaló la aplicación. Quién desinstaló exactamente la aplicación (ID de usuario específico de la aplicación / ID de Android). La solución es que su aplicación se ponga en contacto con el servidor todos los días y le diga que está activa. Luego, si constantemente no recibió ninguna solicitud de la aplicación, entonces ese usuario en particular probablemente haya desinstalado la aplicación.

NO, no hay manera, ya que el proceso en sí mismo se eliminará o quedará inactivo en ese momento. Puede atrapar el Evento de desinstalación, pero eso debe implementarse en otro proceso y no en el que va a desinstalar. no es posible que la aplicación que se va a eliminar se intimide o tome alguna acción al desinstalarla.

Pero espere hay una manera si está utilizando el servidor CCM del servidor FireBase. el ID del dispositivo se invalidará y, por lo tanto, sabrá que el usuario / dispositivo ha desinstalado la aplicación y puede comunicarse con ellos por separado por correo o por cualquier otro medio si mantiene su información para buscar sugerencias y comentarios, etc.

Un truco rápido para esto es registrar un servicio en segundo plano para que se ejecute cada n segundos (donde n> 60 o más para una mejor duración de la batería) y busque su aplicación requerida en la lista de no totales . de aplicaciones instaladas en el dispositivo.

Este es un consumo de batería serio debido al temporizador, pero hace el trabajo sin dependencias externas o bibliotecas.