comment supprimer les préférences partagées lors de la désinstallation de l'application sous Android

103

J'ai une application Android pour enregistrer les informations de connexion telles que le nom d'utilisateur et le mot de passe via cela SharedPreferencesfonctionne bien, mais je dois supprimer tous mes utilisés SharedPreferencespendant la désinstallation de mon application. Comment faire?

SavePreferences("one ", "");
SavePreferences("two", "");
LoadPreferences();

 private void SavePreferences(String key, String value){
    sharedPreferences = getSharedPreferences("TEST", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
   }

 private void LoadPreferences(){
    sharedPreferences = getSharedPreferences("TEST", MODE_PRIVATE);
    String strSavedMem1 = sharedPreferences.getString("MEM1", "");
    String strSavedMem2 = sharedPreferences.getString("MEM2", "");   
   } 

Je souhaite le supprimer SharedPreferenceslors de la désinstallation de mon application.

shivcena
la source
11
Cela sera supprimé automatiquement par Android OS lors de la désinstallation de l'application ...
umair.ali
merci pour le détail utile
shivcena
Pas sur mon Samsung Galaxy 1 (Froyo) enraciné. Restait toujours dedans /dbdata/database/my.package/shared_prefs. Je ne sais pas si c'est parce que c'est enraciné ou parce que c'est Froyo. Je n'ai pas pu tester avec des appareils plus récents
Nilzor

Réponses:

20

SharedPreferences est toujours supprimé avec la désinstallation de l'application.

Lorsque vous désinstallez une application, toutes les modifications apportées par l'application dans votre mémoire interne sont révoquées, ce qui signifie que vos fichiers SharedPreference, autres fichiers de données, fichier de base de données, application sont supprimés automatiquement par le système d'exploitation Android.

MODIFIE: 29/04/15: pour> = 21 API, reportez- vous à la réponse de @Maher Abuthraa

Dhaval Parmar
la source
10
Ce n'est pas le cas sur Nexus 6P, pour le moment.
AndyRoid
1
Oui, j'ai également observé dans Nexus 5 fonctionnant avec Android 6 ne supprimant pas les préférences partagées. J'ai dû redémarrer l'appareil après la désinstallation et les préférences partagées ont disparu maintenant
Santhana
2
Galaxy s7 ici avec le même problème. I Désinstallez et après l'installation, les préférences partagées sont toujours définies. Vraiment ennuyeux car je ne peux pas tester de nouvelles installations en les désinstallant simplement.
Dpedrinha
2
@Maher Abuthraa a une bonne réponse, cette réponse est fausse.
Юрій Мазуревич
1
L'appareil Samsung s8 s8 + ne supprime pas non plus la préférence partagée, j'ai récemment testé. Vraiment déçu par Samsung
Vrajesh
299

Le problème ne vient pas des préférences. C'est radicalement le gestionnaire de sauvegarde ! .. depuis Android-23 par défaut, la sauvegarde en tant que tâche stocke les données de l'application, y compris les préférences pour le cloud. Plus tard, lorsque vous désinstallez puis installez une version plus récente, vous allez probablement utiliser les préférences restaurées. Pour éviter cela, ajoutez simplement ceci à votre manifeste (ou au moins au manifeste de débogage):

<application ...
        android:allowBackup="false">
...
</application>

Lisez ceci: http://developer.android.com/guide/topics/data/backup.html

Vous verrez également que si vous exécutez Lint sous Android > Lint > Security:

avertissement de peluche lors de la sauvegarde

Il est bon de mentionner ici que le processus de sauvegarde est comme une boîte noire .. vous ne savez pas quand il démarre, et la période entre les vérifications ... donc mieux pour le développement de le désactiver.

==== Mise à jour ====

Vous pouvez rencontrer des problèmes de fusion de manifestes après avoir défini allowbackupsur false. Pour résoudre ce problème, ajoutez:

tools:replace="android:allowBackup"

dans l'élément application. Crédit à @ shahzain-ali

Vous pouvez également vider le cache avant de désinstaller l'application.

J'espère que cela peut aider.

Maher Abuthraa
la source
4
Hé, j'ai remarqué que sur certains appareils, les préférences partagées sont conservées après le redémarrage de l'appareil. Est-ce lié à cela? Si tel est le cas, est-il sûr de définir cet indicateur sur false sur les applications de production? Cela affectera-t-il l'utilisateur?
Eliahu Horwitz
Il n'est pas recommandé de définir false sur la production. L'utilisateur perdra toutes ses préférences pendant la mise à jour .. Il est préférable de migrer les données en production si nécessaire .. dans le code de débogage et les préférences peuvent changer plusieurs fois où il est préférable de désactiver la sauvegarde
Maher Abuthraa
1
Félicitations @MaherAbuthraa .. J'étais confronté à ce problème de conservation de certaines données de préférences partagées après la désinstallation et la réinstallation de l'application. Je n'ai jamais su qu'une telle chose était en train de se faire.
SoulRayder
1
Merci beaucoup! tu m'as sauvé la vie.
hungtdo
Comment puis-je m'assurer que les préférences sont conservées lors de la mise à jour mais supprimées lors de la désinstallation manuelle? Ce serait sûrement le comportement attendu.
Fou de Bassan
10

C'est étrange mais j'ai trouvé la solution de la manière suivante:

  1. Ajouter xmlns:tools="http://schemas.android.com/tools"au tag manifeste de Manifest.xml fichier
  2. Ajouter android:allowBackup="false"au point de l' application de Manifest.xml fichier
  3. Ajouter tools:replace="android:allowBackup"au point de l' application de Manifest.xml fichier

Le fichier Manifest.xml devrait ressembler à ceci.

    <?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.package">

        // Other code

    <application
        android:name="com.package.Application"
        android:allowBackup="false"
        android:hardwareAccelerated="true"
        android:icon="@drawable/appicon"
        android:label="@string/application_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme"
        tools:replace="android:allowBackup">

        <activity
            android:name="com.package.SplashActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/application_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        // Other code

    </application>

    </manifest>

C'est fait.

Hiren Patel
la source
2
Votre problème était l'un de vos modules / AARs a android: allowBackup = "true" .. C'est pourquoi vous devez le configurer à nouveau avec des outils d'attributs: replace.
Maher Abuthraa
Même si j'ai gardé android:allowBackup="false"et tools:replace="android:allowBackup"toujours mes préférences, une idée de quel est le problème?
Shylendra Madda
Je reçois également le même problème. Après avoir ajouté ce code, impossible d'effacer la préférence
Pawan Soni
5

Le problème ne vient pas des préférences.

utilisez ce code pour le réparer ..........

<application
    android:allowBackup="true"
    android:fullBackupContent="false"></application>
Mohammad Faizan
la source
Cela a aidé. Au fait, pourquoi ne définissons-nous pas allowbackup sur false?
Shakle
3

Le paramètre allowBackup="false"exclut une application de la sauvegarde et de la restauration.

 android:allowBackup="false"
Bonbons Mahendran
la source
-1

Les préférences partagées ne sont plus toujours supprimées à partir de la guimauve. Ajoutez cette ligne dans votre manifeste: "android: allowBackup =" false ""

Binyamin Robbins
la source