una ser samsung removedor que puedo pueden preinstaladas para instale fabrica eliminar desinstalar como celular borrar app aplicaciones android backup uninstall android-lifecycle android-backup-service

samsung - Android: conservar o eliminar archivos creados por la aplicación al desinstalar



instale una app y no la puedo desinstalar (6)

Creé una aplicación que crea y almacena archivos a sdcard. ¿Hay alguna forma de vincular la carpeta con la aplicación para eliminar todos los archivos cuando el usuario ejecuta la desinstalación en un dispositivo Android?


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), se introdujo la función Copia de seguridad automática para aplicaciones , que permitió a los desarrolladores permitir o evitar la copia de seguridad automática de la aplicación. A partir de 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 optar por la copia de seguridad automática, agregue android:allowBackup="false" al archivo de manifiesto debajo de la etiqueta de la application . Un valor de "verdadero" 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 conservació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 archivos específicos para incluir o excluir y sus rutas asociadas. Agregue la android:fullBackupContent = "@xml/my_backup_rules" al archivo de manifiesto debajo de la etiqueta de la application .

Los archivos especificados se copiarán en Google Drive en la cuenta de correo electrónico principal del dispositivo. Los datos se restaurarán al volver a instalar, siempre que el usuario habilite la siguiente configuración :

Settings -> Backup & Reset -> Automatic Restore .

También se debe tener 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 al mismo desde la aplicación Google Drive desde aquí:

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

Vale la pena señalar que si se utiliza la misma cuenta principal de Google para varios dispositivos, se crean múltiples copias de seguridad de dispositivos. Se puede acceder a las copias de seguridad para dispositivos individuales desde aquí:

Google Drive -> Settings -> Backups


Incluso al usar getExternalCacheDir() , he visto que el directorio de caché, que es el nombre del paquete de su aplicación, no se elimina automáticamente como se indica 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 se desinstaló o se está instalando por primera vez; almacena un valor, tal vez 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, verifica 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 puede hacer algo de limpieza allí.

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


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

No creo que nada se borre de la sdcard. 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.


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

Devuelve la ruta absoluta al directorio en el sistema de archivos externo (que se encuentra 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 el usuario no los suele ver como medios.

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


Parece que ha habido algunos desarrollos desde 2009 :).

De la documentation :

Si está utilizando el nivel de API 8 o superior, use getExternalCacheDir() para abrir un archivo que represente 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 sean necesarios para conservar el espacio de archivos.

Si está utilizando el nivel 7 o inferior de API, use getExternalStorageDirectory() para abrir un archivo que represente la raíz del almacenamiento externo, luego escriba sus datos de caché en el siguiente directorio:

/ Android / data // cache / The es el nombre de su paquete de estilo Java, como "com.example.android.app".


Si desea almacenar datos grandes, guárdelos en un almacenamiento externo con el nombre de la ruta del archivo, como

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

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