come rimuovere la preferenza condivisa durante la disinstallazione dell'applicazione in Android


103

Ho un'applicazione Android per salvare i dettagli di accesso come nome utente e password tramite SharedPreferencesquesto funziona bene, ma devo rimuovere tutto il mio usato SharedPreferencesdurante la disinstallazione dell'applicazione. Come farlo?

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", "");   
   } 

Voglio rimuoverlo SharedPreferencesquando la mia applicazione viene disinstallata.


11
Questo verrà rimosso automaticamente dal sistema operativo Android alla disinstallazione dell'applicazione ...
— umair.ali

grazie per il
— degno

Non sul mio Samsung Galaxy 1 (Froyo) con root. Ancora rimasto dentro /dbdata/database/my.package/shared_prefs. Non so se è perché è radicato o perché è Froyo. Non sono stato in grado di testare con dispositivi più recenti
— Nilzor

Risposte:


20

SharedPreferences viene sempre eliminato insieme alla disinstallazione dell'app.

Quando disinstalli un'applicazione, tutte le modifiche apportate dall'applicazione nella memoria interna vengono revocate, il che significa che i tuoi file SharedPreference, Altri file di dati, File di database, Applicazione vengono rimossi automaticamente dal sistema operativo Android.

MODIFICATO: 29/04/15: per> = 21 API fare riferimento alla risposta di @Maher Abuthraa


10
Non è il caso di Nexus 6P, capirlo subito.
— AndyRoid

1
Sì, ho anche notato che nel Nexus 5 in esecuzione con Android 6 non vengono eliminate le preferenze condivise. Ho dovuto riavviare il dispositivo dopo la disinstallazione e le preferenze condivise ora sono sparite
— Santhana

2
Galaxy s7 qui con lo stesso problema. Disinstallare e dopo l'installazione le preferenze condivise sono ancora impostate. Davvero fastidioso perché non posso testare nuove installazioni semplicemente disinstallandole.
— Dpedrinha

2
@Maher Abuthraa ha una risposta giusta questa risposta è sbagliata.
— Юрій Мазуревич

1
Anche il dispositivo Samsung s8 s8 + non elimina le preferenze condivise, ho testato di recente. Davvero deluso da Samsung
— Vrajesh

299

Il problema non è con le preferenze. È drasticamente il gestore di backup ! .. poiché android-23 per impostazione predefinita, il backup come attività memorizza i dati dell'app, comprese le preferenze, nel cloud. Successivamente, quando disinstalli e installi la versione più recente, probabilmente utilizzerai le preferenze ripristinate. Per evitarlo, aggiungilo al tuo manifest (o almeno per eseguire il debug del manifest):

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

Leggi questo: http://developer.android.com/guide/topics/data/backup.html

Vedrai anche che se esegui Lint sotto Android > Lint > Security:

avviso di lanugine durante il backup

È bene menzionare qui che il processo di backup è come una scatola nera .. non sai quando inizia e il periodo tra i controlli ... quindi è meglio per lo sviluppo disabilitarlo.

==== Aggiorna ====

È possibile che si verifichino problemi di fusione Manifest dopo l'impostazione allowbackupsu false. Per risolvere questo problema aggiungi:

tools:replace="android:allowBackup"

nell'elemento dell'applicazione. Ringraziamo @ shahzain-ali

In alternativa puoi svuotare la cache prima di disinstallare l'app.

Spero che possa aiutare.


4
Ehi, ho notato che in alcuni dispositivi le preferenze condivise vengono mantenute dopo il riavvio del dispositivo. È collegato a questo? In tal caso, è sicuro impostare questo flag su false nelle app di produzione? Influirà sull'utente?
— Eliahu Horwitz

Non è consigliabile impostare false in produzione .. l'utente perderà tutte le preferenze durante l'aggiornamento .. È meglio in produzione migrare i dati se necessario .. nel codice di debug e le preferenze possono cambiare molte volte dove è meglio disattivare il backup
— Maher Abuthraa

1
Complimenti @MaherAbuthraa .. Stavo affrontando questo problema di alcuni dati sulle preferenze condivise che venivano conservati dopo la disinstallazione e la reinstallazione dell'app. Non ho mai saputo che una cosa del genere fosse stata fatta.
— SoulRayder

1
Grazie mille! mi hai salvato la vita.
— hungtdo

Come posso assicurarmi che le preferenze vengano preservate durante l'aggiornamento ma rimosse durante la disinstallazione manuale? Sicuramente questo sarebbe il comportamento previsto.
— Gannet

10

È strano ma ho trovato la soluzione nel modo seguente:

  1. Aggiungere xmlns:tools="http://schemas.android.com/tools"nel tag manifesto di Manifest.xml di file
  2. Aggiungere android:allowBackup="false"nel tag applicazione di Manifest.xml di file
  3. Aggiungere tools:replace="android:allowBackup"nel tag applicazione di Manifest.xml di file

Il file Manifest.xml dovrebbe apparire così.

    <?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>

E 'fatto.


2
Il tuo problema riguardava uno dei tuoi moduli / AAR ha android: allowBackup = "true" .. Ecco perché devi configurarlo di nuovo con gli strumenti degli attributi: sostituire.
— Maher Abuthraa

Anche se ho mantenuto android:allowBackup="false"e tools:replace="android:allowBackup"continuo a ricevere le mie preferenze, qualche idea di quale sia il problema?
— Shylendra Madda

Sto anche riscontrando lo stesso problema. Dopo aver aggiunto questo codice non è possibile cancellare la prefrence
— Pawan Soni

5

Il problema non è con le preferenze.

usa questo codice per risolverlo ..........

<application
    android:allowBackup="true"
    android:fullBackupContent="false"></application>

Questo ha aiutato. A proposito, perché non impostiamo allowbackup su false?
— Shakle

3

L'impostazione allowBackup="false"esclude un'applicazione dal backup e dal ripristino.

 android:allowBackup="false"

-1

Le preferenze condivise non vengono sempre più eliminate a partire da marshmallow. Aggiungi questa riga nel file manifest: "android: allowBackup =" false ""

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.