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?

¿Fue útil?

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 y android: 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.

 ingrese la descripción de la imagen aquí

También se puede acceder a la misma desde la aplicación Google Drive desde aquí:

Google Drive - > Configuración - > Copia de seguridad automática para aplicaciones - > Copia de seguridad y restablecer

 ingrese la descripción de la imagen 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í:

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

 Google Drive - loading= Configuración -> Copias de seguridad ">

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top