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?

Était-ce utile?

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

 entrer la description de l'image ici

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

 entrer la description de l'image ici

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

 Google Drive - loading= 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top