22

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 el dispositivo Android?Android - Conservar o eliminar archivos creados por la aplicación en la desinstalación

+0

La aplicación 'NQ Mobile Security' está llamando a una actividad en la mirada de desinstalación en el http://i.imgur.com/ Fos9N.png, http://i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png y la pregunta http://stackoverflow.com/questions/10219328/how-to- show-an-activity-before-my-app-is-uninstalled-android –

Respuesta

10

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 durante la instalación.

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

+0

La aplicación 'NQ Mobile Security' está llamando a una Actividad en la vista de desinstalación en http://i.imgur.com/Fos9N.png, http: //i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png y la pregunta http://stackoverflow.com/questions/10219328/how-to-show-an-activity-before-my-app-is-uninstalled-android –

+0

Para las aplicaciones compiladas para Android 6.0 o posterior y las copias de seguridad en la nube habilitadas, vea la respuesta de Y.S. – dermatthias

23

Parece que ha habido algunos desarrollos desde 2009 :).

Desde el documentation:

Si está utilizando la API de nivel 8 o mayor , utilice getExternalCacheDir() a 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 conservar el espacio de archivos .

Si está utilizando la API de nivel 7 o inferior, uso getExternalStorageDirectory() a abrir un archivo que representa la raíz del almacenamiento externo, a continuación, escribir sus datos de la caché en el siguiente directorio:

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

0

si desea almacenar grandes cantidades de datos a continuación, almacenarlo en almacenamiento externo con el nombre de la ruta de archivo, como

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

en nombre del paquete es la aplicación nombre del paquete por ejemplo com.think.abc

4

Incluso cuando utilizo el getExternalCacheDir(), he visto que el directorio del caché, que es el nombre del paquete de su aplicación, no se elimina automáticamente como dice 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 fue desinstalada o si está siendo instalada por primera vez; usted almacena un valor, quizás un booleano, usando 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, se comprueba si es la primera vez que se está ejecutando. 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á cierto y podrá hacer algo de limpieza allí.

Sé que esto no responde la pregunta directamente y no es agradable dejar 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.

+0

No sé si no lo entendí, pero parece que funcionará como se espera si lo usa desde el primer lanzamiento de la aplicación, ¿está de acuerdo? –

3

parece desde luego hay un soltuion adecuada, Context.getExternalFilesDir():

devuelve la ruta absoluta al directorio del sistema de archivos externo (es decir en algún lugar de Environment.getExternalStorageDirectory()) en donde la aplicación puede coloque los archivos persistentes que posee. Estos archivos son privados para las aplicaciones y no suelen ser visibles para el usuario como .

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

3

estoy añadiendo esto porque las respuestas existentes son anticuadas en 2017. Si bien es cierto que hay 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), la función de Auto Backup for Apps se introdujo, lo que permitió a los desarrolladores a permitir o impedir la copia de seguridad aplicación automática. A partir de la API 23, la copia de seguridad está habilitada por defecto.

  • Dos nuevos application etiquetas se han introducido para el archivo de manifiesto: android:allowBackup y android:fullBackupContent.

de optar por la copia de seguridad automática, añadir android:allowBackup="false" para el archivo de manifiesto bajo la etiqueta de application. Un valor de "verdadero" guardará automáticamente las preferencias y bases de datos compartidas en la nube, así como other files.

En segundo lugar, puede ser muy específico acerca de los archivos que desea incluyen o excluyen para su eliminación o conservación de desinstalación con la etiqueta android:fullBackupContent. Este atributo apunta a un archivo XML que contiene reglas de respaldo. Crear 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 añadir 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 se copiarán en Google Drive en la cuenta de correo electrónico principal del dispositivo. Los datos serían restaurados en la re-instalar proporcionó la siguiente configuración está habilitada por el usuario:

Settings -> Backup & Reset -> Automatic Restore.

También hay que señalar que los datos de copia de seguridad no pueden ser leídos por el usuario u otras aplicaciones en el dispositivo.

enter image description here

La misma también se puede acceder desde la aplicación Google Drive desde aquí:

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

enter image description here

Vale la pena señalar que si el mismo primaria cuenta de Google se usa para múltiples dispositivos, luego se crean copias de seguridad de múltiples dispositivos. Las copias de seguridad para los dispositivos individuales se puede acceder desde aquí:

Google Drive -> Settings -> Backups

Google Drive -> Settings -> Backups

+1

Gran respuesta. En buscaba exactamente esto. En 2017 (o desde Android 6.0) esta es la respuesta correcta. – dermatthias

+1

@ Y.S. respuesta perfecta: D –

Cuestiones relacionadas