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.