¿Se puede llamar al código cuando mi aplicación Android se desinstala?

¿Alguien sabe si un método específico está disponible para ser anulado cuando se desinstala mi aplicación? Sería bueno para eliminar a estos usuarios de la base de datos del lado del servidor cuando esto ocurre.

Desafortunadamente, actualmente no hay forma de que un paquete de Android ejecute código cuando se elimine. Sin embargo, puede registrar un BroadcastReceiver para ACTION_PACKAGE_REMOVED en un paquete diferente al que se llamará cuando los paquetes se eliminen del teléfono.

También vea esta pregunta .

Sé que llego tarde a la fiesta, pero supongo que ya que para ti, la desinstalación de la aplicación es suficiente para expulsar al usuario del servidor (a diferencia de que el usuario seleccione explícitamente una opción de "eliminar mi cuenta"), Crearía un trabajo en el servidor / servicio que escanea para usuarios inactivos cada N unidades de tiempo (por ejemplo, 30 días) y los elimina. ¿Por qué? Una aplicación que nunca se conecta a su servidor es tan buena como una aplicación que se desinstala.

Sin embargo, a continuación, puede crear lógica en su aplicación para manejar el caso cuando los usuarios que nunca desinstalaron la aplicación, pero no iniciar sesión en más de N unidades de tiempo, eventualmente volver. Entonces, usted podría:

  1. Haga que la aplicación envíe una cookie especial "Ya estoy instalado" al servidor, que luego le indica a la aplicación que le envíe suficiente información en caché de la parte de la aplicación para reconstruir los datos de usuario en el servidor mientras dice "Espere, sincronizando con el servidor. .. ". Esto debería funcionar siempre y cuando los datos del usuario no sean enormes (por ejemplo, algún tipo de biblioteca de imágenes), y si es así, lo mejor es indicar en letras GRANDES que las cuentas inactivas serán eliminadas.
  2. O, por supuesto, también podría restablecer la aplicación a su estado original y espero que el usuario no te odia.

Usted podría ir la ruta para instalar un servicio como parte de su aplicación que se despierta una vez al día y cuando WiFi está disponible y el dispositivo está en el aire acondicionado, envía un "latido" a su servicio diciendo "Estoy instalado" . Si el latido del corazón se detiene durante más de unos días, puede suponer que el usuario desinstaló la aplicación y eliminó los datos del usuario. Pero tenga en cuenta que esto no es infalible, ya que el usuario puede simplemente haber apagado el dispositivo durante muchos días. En ese caso, ahora tiene que manejar la situación cuando un latido llega para un usuario que ya no está activo en el sistema, momento en el que tendrá que construir en la lógica de reconstrucción como antes (que no le compra nada por haber pasado por Este dolor de construir el latido del corazón, gracias mucho), o, simplemente restablecer la aplicación a su estado fresco y espero que el usuario no te odia (que de nuevo te compra nada por haber pasado por este dolor de construir el latido del corazón, gracias mucho).

¡Aquellos molestos usuarios! D

Sí, hay una forma en la que puede utilizar la aplicación de escucha de Android para instalar y desinstalar la aplicación.

La instalación y desinstalación de la aplicación enviará una transmisión cuando la instalación de la aplicación esté completa, el sistema escuchará la transmisión android.intent.action.PACKAGE_ADDED . El nombre del paquete que fue instalado por intent.getDataString() . Cuando el sistema de programa de desinstalación escucha android.intent.action.PACKAGE_REMOVED la radio. El mismo intent.getDataString() para obtener el nombre del paquete de desinstalación. La aplicación no puede supervisar la instalación y desinstalación, pero la cubierta de la instalación puede escuchar su propia emisión android.intent.action.PACKAGE_REMOVED .

Ejemplo

Archivo de configuración de AndroidManifest.xml:

 <receiver android:name="com.sarbjot.MyApp.BootReceiver" > <intent-filter> <category android:name="android.intent.category.DEFAULT" /> <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package"/> </intent-filter> </receiver> 

Y el receptor llama:

 package com.sarbjot.MyApp; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // install call if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) { //code here on install Log.i("Installed:", intent.getDataString()); } // uninstall call if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) { //code here on uninstall Log.i("Uninstalled:", intent.getDataString()); } } } 

Espero que les ayude a todos.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.