Android: conserva o elimina archivos creados por la aplicación al desinstalar
-
10-07-2019 - |
Pregunta
Creé una aplicación que crea y almacena archivos en sdcard. ¿Hay alguna manera de vincular la carpeta con la aplicación para eliminar todos los archivos cuando el usuario ejecuta la desinstalación en un dispositivo Android?
Solución
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 la aplicación.
No creo que se haya borrado nada de la tarjeta sd. Puedes hacer una prueba rápida y descubrirlo.
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.
Otros consejos
Parece que ha habido algunos desarrollos desde 2009 :).
De la documentación :
Si está utilizando API Nivel 8 o mayor, use
getExternalCacheDir ()
para abrir un archivo que representa el directorio de almacenamiento externo donde debería guardar los archivos de caché. Si el usuario desinstala tu aplicación, estas Los archivos se eliminarán automáticamente. Sin embargo, durante la vida de tu aplicación, debe administrar estos archivos de caché y eliminar aquellos que no son necesarios para preservar espacio de archivo.Si está utilizando API Nivel 7 o inferior, use
getExternalStorageDirectory ()
para abrir un archivo que representa la raíz del almacenamiento externo, luego escriba sus datos de caché en el siguiente directorio:/ Android / data // caché / El es tu estilo Java nombre del paquete, como " com.example.android.app " ;.
Incluso cuando se usa el getExternalCacheDir ()
, he visto que el directorio de caché, que es el nombre del paquete de su aplicación, no se elimina automáticamente como dice en la Documentación de Android, al menos no en el Lenovo A1. Puede ser un poco ingenuo, pero es posible que desee limpiar los datos anteriores durante la reinstalación. Allí, puede averiguar si su aplicación se desinstaló o si se está instalando por primera vez: almacena un valor, quizás un booleano, utilizando 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 elimina la aplicación, también lo harán las preferencias compartidas para la aplicación. Luego, la próxima vez que se instale, el if (...) será verdadero y podrá limpiarlo allí.
Sé que esto no responde 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 intentar limpiar cuando se elimina una aplicación, lo cual es sensato pero parece imposible.
Estoy agregando esto porque las respuestas existentes están desactualizadas 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), el Copia de seguridad automática para Aplicaciones Se introdujo la característica, que permitía a los desarrolladores permitir o impedir la copia de seguridad automática de la aplicación. A partir de API 23, la copia de seguridad está habilitada de forma predeterminada.
-
Se han introducido dos nuevas etiquetas
application
para el archivo de manifiesto:android: allowBackup
yandroid: fullBackupContent
.
Para desactivar la copia de seguridad automática, agregue android: allowBackup = " false "
al archivo de manifiesto bajo la etiqueta application
. Un valor de "verdadero" guardará automáticamente las preferencias compartidas y las bases de datos en la nube, así como otros archivos .
En segundo lugar, puede ser muy específico acerca de los archivos que desea incluir o exclude para eliminar o preservación al desinstalar con la etiqueta android: fullBackupContent
. Este atributo apunta a un archivo XML que contiene reglas de respaldo. 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 para incluir o excluir y sus rutas asociadas. Agregue la etiqueta android: fullBackupContent = " @ xml / my_backup_rules "
al archivo de manifiesto bajo la etiqueta application
.
Los archivos especificados serían respaldados en Google Drive bajo la cuenta de correo electrónico principal del dispositivo. Los datos se restaurarán al reinstalar siempre que el usuario habilite la siguiente configuración :
Configuración - > Copia de seguridad y amp; Restablecer - > Restauración automática
.
También debe tenerse en cuenta que el usuario u otras aplicaciones en el dispositivo no pueden leer los datos de la copia de seguridad.
También se puede acceder a la misma desde la aplicación Google Drive desde aquí:
Vale la pena señalar que si se usa la misma cuenta de Google primaria para múltiples dispositivos, entonces se crean múltiples copias de seguridad del dispositivo. Se puede acceder a las copias de seguridad para dispositivos individuales desde aquí:
parece que desde entonces hay una solución adecuada, Context.getExternalFilesDir () :
Devuelve la ruta absoluta al directorio en el sistema de archivos externo (que está en algún lugar en Environment.getExternalStorageDirectory ()) donde la aplicación puede colocar archivos persistentes que posee. Estos archivos son privado para las aplicaciones, y normalmente no visible para el usuario como medios de comunicación.
Esto es como getFilesDir () en que estos archivos se eliminarán cuando la aplicación se desinstala
si desea almacenar datos grandes, almacénelos en un almacenamiento externo con el nombre de la ruta del archivo, como
Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName"
donde el nombre del paquete es el nombre del paquete de su aplicación, por ejemplo, com.think.abc