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?
- DialogFragment - retención del oyente tras la rotación de la pantalla
- SavedInstanceState vs getIntent (). GetExtras ()
- Android: onDestroy () o un método similar en la clase Application
- La aplicación se bloquea en rotación sin stackTrace
- ¿Puede Android Service superar el objeto de aplicación?
- ¿Puede algunos dibujar el ciclo de vida de Fragment y su FragmentActivity padre?
- ¿Cómo puedo guardar la pila trasera de la aplicación en un lote?
- Actividad Ciclo de vida X Botón de encendido X Pantalla de bloqueo
- Android: Aplicación onCreate llamada cada vez que la aplicación va al fondo
- Dejar la aplicación de Android con el botón Atrás
- Cómo manejar AsyncTask onPostExecute cuando se pausan para evitar IllegalStateException
- ¿Cómo detectar los cambios de orientación pero dejar que el android los maneje?
- ¿Este patrón de mensajería de Servicio de Actividad causa una pérdida de memoria?
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
yandroid: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.
Lo mismo se puede acceder desde la aplicación de Google Drive desde aquí:
Google Drive -> Settings -> Auto backup for apps -> Backup and reset
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
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