Android: preservar o eliminar archivos creados por la aplicación al desinstalar

He creado una aplicación que crea y almacena archivos en sdcard. ¿Hay una manera de atar la carpeta con la aplicación con el fin de eliminar todos los archivos cuando el usuario ejecuta desinstalar en el dispositivo Android?

No hay forma de que su aplicación sepa que está siendo desinstalada (sin modificar el kernel). Todos los archivos creados en el archivo data / data / your.app.package se eliminan automáticamente durante la instalación.

No creo que se haya borrado nada de la tarjeta SD. Usted puede hacer una prueba rápida y encontrar eso.

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

Parece que ha habido algunos desarrollos desde 2009 :).

De la documentación :

Si utiliza API de nivel 8 o superior, utilice getExternalCacheDir() para abrir un archivo que representa el directorio de almacenamiento externo donde debe guardar los archivos de caché. Si el usuario desinstala su aplicación, estos archivos se eliminarán automáticamente. Sin embargo, durante la vida de su aplicación, debe administrar estos archivos de caché y eliminar aquellos que no son necesarios para preservar el espacio de archivos.

Si está utilizando API Nivel 7 o inferior, use getExternalStorageDirectory() para abrir un archivo que representa la raíz del almacenamiento externo y, a continuación, escriba los datos de la caché en el siguiente directorio:

/ Android / data // cache / Es el nombre del paquete de estilo Java, como "com.example.android.app".

Incluso cuando se utiliza el getExternalCacheDir() , he visto que el directorio de caché, que es el nombre del paquete de su aplicación, no se quita automáticamente como se dice en la documentación de Android, al menos no en el Lenovo A1. Podría ser un poco ingenuo, pero es posible que desee limpiar los datos anteriores durante la reinstalación. Allí, puede averiguar si su aplicación no se ha instalado o se está instalando por primera vez: almacena un valor, tal vez un booleano, utilizando las preferencias compartidas. Puede ser algo como:

 SharedPreferences sharedPrefs = getSharedPreferences(INSTALL_PREFS, MODE_PRIVATE); if(sharedPrefs.getBoolean("AppInstalled", false) == false){ //DELETE APP DIRECTORY SharedPreferences.Editor editor = sharedPrefs.edit(); editor.putBoolean("AppInstalled", true); editor.commit(); } 

De esta manera, cada vez que se ejecuta la aplicación, comprueba si es la primera vez que se ejecuta. Cuando se elimine la aplicación, también lo harán las preferencias compartidas de la aplicación. Entonces, la próxima vez que se instale, el if (…) será verdad y usted puede hacer un poco de limpieza allí.

Sé que esto no responde a la pregunta directamente y no es bueno dejar datos no utilizados en los dispositivos de los usuarios, pero creo que podría ser una alternativa a tratar de limpiar cuando una aplicación se está eliminando, lo que es sensato, pero parece imposible.

Parece que desde entonces hay una soltuión adecuada, Context.getExternalFilesDir () :

Devuelve la ruta absoluta al directorio del sistema de archivos externo (que está en algún lugar de Environment.getExternalStorageDirectory ()) donde la aplicación puede colocar los archivos persistentes que posee. Estos archivos son privados para las aplicaciones y normalmente no son visibles para el usuario como medios.

Esto es como getFilesDir () en que estos archivos se eliminarán cuando la aplicación se desinstale

Estoy agregando esto porque las respuestas existentes están obsoletas en 2017. Si bien es cierto que no hay devolución de llamada en la desinstalación de la aplicación, se han proporcionado algunos mecanismos para preservar los datos de la aplicación más allá de la desinstalación.

  • Desde Android 6.0 (API 23), se introdujo la función de Copia de seguridad automática para aplicaciones , que permitió a los desarrolladores permitir o impedir la copia de seguridad automática de la aplicación. Desde la API 23, la copia de seguridad está habilitada de forma predeterminada.

  • Se han introducido dos nuevas etiquetas de application para el archivo de manifiesto: android:allowBackup y android:fullBackupContent .

Para inhabilitar la copia de seguridad automática, agregue android:allowBackup="false" al archivo de manifiesto bajo la etiqueta de la application . Un valor de "true" guardará automáticamente las preferencias y bases de datos compartidas en la nube, así como otros archivos .

En segundo lugar, puede ser muy específico acerca de los archivos que desea incluir o excluir para su eliminación o preservación en la desinstalación con la etiqueta android:fullBackupContent . Este atributo apunta a un archivo XML que contiene reglas de copia de seguridad. Cree un archivo de configuración XML en el directorio res/xml/ con la siguiente sintaxis:

 <full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> </full-backup-content> 

Aquí puede agregar los tipos de archivo específicos que se incluirán o excluirán y sus rutas de acceso asociadas. Agregue la android:fullBackupContent = "@xml/my_backup_rules" al archivo de manifiesto bajo la etiqueta de la application .

Los archivos especificados se copiarán en Google Drive bajo la cuenta de correo electrónico principal del dispositivo. Los datos se restaurarían en la reinstalación siempre que el usuario habilite la siguiente configuración :

Settings -> Backup & Reset -> Automatic Restore .

También debe tenerse en cuenta que los datos de copia de seguridad no pueden ser leídos por el usuario u otras aplicaciones en el dispositivo.

Introduzca aquí la descripción de la imagen

Lo mismo se puede acceder desde la aplicación de Google Drive desde aquí:

Google Drive -> Settings -> Auto backup for apps -> Backup and reset

Introduzca aquí la descripción de la imagen

Cabe señalar que si se utiliza la misma cuenta principal de Google para varios dispositivos, se crean varias copias de seguridad de dispositivos. Las copias de seguridad de los dispositivos individuales se pueden acceder desde aquí:

Google Drive -> Settings -> Backups

Google Drive -> Configuración -> Copias de seguridad

Si desea almacenar datos grandes, guárdelo en un almacenamiento externo con nombre de ruta de acceso de archivo, como

 Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName" 

Donde nombre del paquete es el nombre del paquete de la aplicación, por ejemplo, com.think.abc

  • Ciclo de vida del fragmento con respecto a su actividad
  • Ciclo de vida de BroadcastReceiver
  • Ciclo de vida de android onActivityResult vs onStop
  • Diferenciar entre Android matando la aplicación y el usuario deslizarlo en la lista de aplicaciones recientes
  • Fragmento de Android superpuesto por otro fragmento todavía se muestra y no onPause
  • Mal comportamiento de Backstack de la actividad cuando la actividad destruida
  • Devolución de llamada cuando la aplicación se cancela al pasar
  • NullPointerException en Fragment Listener
  • Vista de Android - onAttachedToWindow y onDetachedFromWindow - cuándo se llaman en el ciclo de vida de la actividad?
  • Ciclo de vida del objeto estático de Android
  • Una Actividad y todos los otros Fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.