Android - Préserver ou supprimer les fichiers créés par l'application lors de la désinstallation
-
10-07-2019 - |
Question
J'ai créé une application qui crée et stocke des fichiers sur sdcard. Est-il possible de lier le dossier à une application pour supprimer tous les fichiers lorsque l'utilisateur exécute la désinstallation sur un appareil Android?
La solution
Votre application ne dispose d'aucun moyen de savoir qu'elle est en cours de désinstallation (sans modifier le noyau). Tous les fichiers créés dans data / data / your.app.package
sont automatiquement supprimés lors de la désinstallation de l'application.
Je ne pense pas que rien soit effacé de la carte SD. Vous pouvez faire un test rapide et le découvrir.
Une autre approche pourrait consister à avoir une autre application qui vérifie si cette application est installée ou non. Sinon, il peut faire le travail de nettoyage.
Autres conseils
On dirait qu'il y a eu des développements depuis 2009:).
Extrait de la documentation :
Si vous utilisez une API de niveau 8 ou mieux, utilisez
getExternalCacheDir ()
pour ouvrir un fichier qui représente le répertoire de stockage externe où vous devrait enregistrer les fichiers de cache. Si l'utilisateur désinstalle votre application, ces les fichiers seront automatiquement supprimés. Cependant, pendant la vie de votre application, vous devez gérer ces cache les fichiers et supprime ceux qui ne sont pas nécessaires pour préserver espace fichier.Si vous utilisez une API de niveau 7 ou inférieur, utilisez
getExternalStorageDirectory ()
pour ouvrir un fichier qui représente la racine de la mémoire externe, puis écrivez vos données de cache dans ce qui suit répertoire:/ Android / data // cache / Est votre style Java nom du paquet, tel que "com.example.android.app".
Même lorsque vous utilisez getExternalCacheDir ()
, j'ai constaté que le répertoire de cache, qui correspond au nom du package de votre application, n'est pas supprimé automatiquement, comme indiqué dans la documentation Android, du moins pas dans le répertoire. Lenovo A1. Cela peut paraître un peu naïf, mais vous voudrez peut-être nettoyer les données précédentes lors de la réinstallation. Vous pouvez y savoir si votre application a été désinstallée ou est en cours d'installation pour la première fois. Vous stockez une valeur, peut-être une valeur booléenne, à l'aide de préférences partagées. Cela peut être quelque chose comme:
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();
}
Ainsi, chaque fois que l'application s'exécute, elle vérifie si c'est la première fois qu'elle s'exécute. Lorsque l'application est supprimée, les préférences partagées pour l'application disparaîtront également. Ensuite, lors de la prochaine installation, le if (...) sera vrai et vous pourrez nettoyer un peu là-bas.
Je sais que cela ne répond pas directement à la question et qu'il n'est pas agréable de laisser des données inutilisées sur les appareils des utilisateurs, mais je pense que cela pourrait constituer une alternative au nettoyage de l'application lorsqu'une application est supprimée, ce qui est raisonnable, mais semble impossible.
J'ajoute ceci car les réponses existantes sont obsolètes en 2017. S'il est vrai qu'il n'y a pas de rappel lors de la désinstallation d'une application, certains mécanismes ont été fournis pour préserver les données de l'application au-delà de la désinstallation.
-
Depuis Android 6.0 (API 23), le Sauvegarde automatique pour Applications Une fonctionnalité a été introduite, permettant aux développeurs d'autoriser ou d'empêcher la sauvegarde automatique d'applications. À partir de l'API 23, la sauvegarde est activée par défaut.
-
Deux nouvelles balises
application
ont été introduites pour le fichier manifeste:android: allowBackup
etandroid: fullBackupContent
.
Pour désactiver la sauvegarde automatique, ajoutez android: allowBackup = "false"
au fichier manifeste sous la balise application
. Une valeur de " true " enregistrera automatiquement les préférences partagées et les bases de données sur le cloud, ainsi que les autres fichiers .
Deuxièmement, vous pouvez définir très précisément les fichiers que vous souhaitez inclure ou exclure pour suppression ou préservation lors de la désinstallation avec la balise android: fullBackupContent
. Cet attribut pointe vers un fichier XML contenant des règles de sauvegarde. Créez un fichier de configuration XML dans le répertoire res / xml /
avec la syntaxe suivante:
<full-backup-content>
<include domain=["file" | "database" | "sharedpref" | "external" | "root"]
path="string" />
<exclude domain=["file" | "database" | "sharedpref" | "external" | "root"]
path="string" />
</full-backup-content>
Vous pouvez ajouter ici les types de fichiers spécifiques à inclure ou à exclure et leurs chemins associés. Ajoutez la balise android: fullBackupContent = "@ xml / my_backup_rules"
au fichier de manifeste sous la balise application
.
Les fichiers spécifiés seraient sauvegardés sur Google Drive sous le compte de messagerie principal du périphérique. Les données seraient restaurées lors de la réinstallation à condition que le paramètre suivant soit activé par l'utilisateur :
Paramètres - > Sauvegarde & amp; Réinitialiser - > Restauration automatique
.
Il convient également de noter que les données de sauvegarde ne peuvent pas être lues par l'utilisateur ou les autres applications du périphérique.
La même chose est également accessible à partir de l'application Google Drive à partir d'ici:
Google Drive - > Paramètres - > Sauvegarde automatique pour les applications - > Sauvegarder et réinitialiser
Il convient de noter que si le même compte Google principal est utilisé pour plusieurs périphériques, des sauvegardes multiples sont créées. Vous pouvez accéder aux sauvegardes des périphériques individuels à partir d’ici:
Google Drive - > Paramètres - > Sauvegardes
il semble depuis lors qu'il existe une solution appropriée, Context.getExternalFilesDir () :
Renvoie le chemin absolu du répertoire sur le système de fichiers externe. (c’est quelque part sur Environment.getExternalStorageDirectory ()) où l'application peut placer des fichiers persistants qu'elle possède. Ces fichiers sont privé pour les applications, et généralement non visible par l'utilisateur médias.
Cela ressemble à getFilesDir () en ce que ces fichiers seront supprimés lorsque l'application est désinstallée
si vous souhaitez stocker des données volumineuses, stockez-les dans un stockage externe avec un chemin d'accès au fichier tel que
.Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName"
où nom_package est le nom de votre package d'application, par exemple, com.think.abc