Escuche su propio evento de desinstalación de aplicaciones en Android

Por lo que sé, las aplicaciones no pueden obtener intenciones para su propia desinstalación:

  • ACTION_PACKAGE_FULLY_REMOVED
  • ACTION_PACKAGE_REMOVED

¿ Pero cómo Dolphin Browser consigue recibir un evento "eliminado" e iniciar un navegador como en la imagen adjunta ?

Introduzca aquí la descripción de la imagen

ADB: 10-20 12:37:00.997: D/BackupManagerService(527): Received broadcast Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:mobi.mgeek.TunnyBrowser flg=0x8000010 (has extras) } 10-20 12:37:00.997: V/BackupManagerService(527): removePackageParticipantsLocked: uid=10112 #1 10-20 12:37:01.007: D/dalvikvm(527): GC_EXPLICIT freed 2247K, 12% free 20128K/22868K, paused 3ms+10ms, total 212ms 10-20 12:37:01.107: D/dalvikvm(527): GC_FOR_ALLOC freed 1508K, 15% free 19649K/22868K, paused 60ms, total 60ms 10-20 12:37:01.137: D/AndroidRuntime(4028): Calling main entry com.android.commands.am.Am 10-20 12:37:01.137: D/dalvikvm(4028): Note: class Landroid/app/ActivityManagerNative; has 163 unimplemented (abstract) methods 10-20 12:37:01.147: I/ActivityManager(527): START u0 {act=android.intent.action.VIEW dat=http://survey.dolphin.com/int/uninstall?id=014f4d1981d6f88bb56630e7a3a7550a&pn=mobi.mgeek.TunnyBrowser&v=248&s=ofw&it=1382250136565&ut=1382250127000&m=Nexus 4&os=android&osv=4.3&cc=US&no=40471&lang=en&jk=uninstalled&ft=212&ht=957&ct=0&nt=1&res=768*1184&ifi=1&lts=1&iow=0&iom=0&iospd=0&iogs=0&debug=false&t=1382252820000 flg=0x10000000 cmp=com.android.chrome/com.google.android.apps.chrome.Main} from pid 4028 10-20 12:37:01.157: D/AndroidRuntime(4028): Shutting down VM 

Esta es una forma en la que puedes obtener el evento de desinstalación de tu propia aplicación.

Uso de inotify en código nativo. Por ejemplo: Puede utilizar inotify_add_watch para supervisar la carpeta de caché de datos de su aplicación como: /data/data/your-package-name/cache .
Cuando se desinstale su aplicación, puede obtener el evento de eliminación de la carpeta.

Otro punto clave es que inotify debe ejecutarse en un proceso separado de su propia aplicación.
Puede invocar fork() para hacer esto.

Ya he verificado la lógica. 🙂

Este es un problema de seguridad en Andorid, que ya se ha informado al equipo de Google y se ha solucionado en Android 4.4. Aquí está mi explicación de cómo puede funcionar.

Cuando el usuario vaya al administrador de aplicaciones en la configuración del teléfono y haga clic en su aplicación, recibirá una transmisión que contenga el nombre de su aplicación en extras, si el usuario hace clic en desinstalar btn, se debe iniciar la com.android.uninstaller.UnistallerActivity .

Si obtiene una intención y el nombre de su aplicación en extras, significa que el usuario hizo clic en su aplicación en "administrador de aplicaciones", use PackageManager para iniciar un observador de actividad y obtener la actividad visible superior y su paquete, si el usuario hace clic en botón de desinstalación usted consigue UnistallerActivity como actividad superior allí usted puede hacer UnistallerActivity una encuesta en el web browser o hacer qué usted quiere hacer allí.

  • Java.lang.SecurityException: Permiso Negación: no se permite enviar broadcast android.intent.action.MEDIA_MOUNTED en KitKat solamente
  • Escuchar el acceso a la ubicación desactivar / activar en la configuración
  • Transmisión local desde Servicio no recibido por Actividad
  • Receptor de difusión no funciona después de reiniciar el dispositivo en Android
  • WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION nunca se despide
  • ¿Está bien cancelar el registro de 'BroadcastReceiver' dinámico del propio método onReceive () del receptor?
  • Cómo hacer que el receptor de difusión de la aplicación siga escuchando sin tener un servicio ejecutándose en segundo plano
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.