jak usunąć wspólne preferencje podczas odinstalowywania aplikacji w systemie Android


103

Mam aplikację na Androida do zapisywania danych logowania, takich jak nazwa użytkownika i hasło, dzięki SharedPreferencesczemu działa dobrze, ale muszę usunąć wszystkie używane SharedPreferencespodczas odinstalowywania aplikacji. Jak to zrobić?

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

Chcę to usunąć SharedPreferencespo odinstalowaniu mojej aplikacji.


11
Zostanie to automatycznie usunięte przez system operacyjny Android po odinstalowaniu aplikacji ...
— umair.ali

dzięki za cenny szczegół
— shivcena

Nie na moim zrootowanym Samsungu Galaxy 1 (Froyo). Nadal pozostał w środku /dbdata/database/my.package/shared_prefs. Nie wiem, czy to dlatego, że jest zrootowane, czy dlatego, że to Froyo. Nie udało mi się przetestować nowszych urządzeń
— Nilzor

Odpowiedzi:


20

SharedPreferences jest zawsze usuwany wraz z odinstalowaniem aplikacji.

Po odinstalowaniu dowolnej aplikacji wszystkie zmiany, które aplikacja wprowadziła w pamięci wewnętrznej, zostaną odwołane, co oznacza, że ​​pliki SharedPreference, inne pliki danych, plik bazy danych, aplikacja zostaną automatycznie usunięte przez system operacyjny Android.

EDITED: 29/04/15: dla> = 21 API odwołaj się do odpowiedzi @Maher Abuthraa


10
Nie w przypadku Nexusa 6P, zastanawiam się teraz.
— AndyRoid

1
Tak, zauważyłem też, że w Nexusie 5 z Androidem 6 nie usuwa się wspólnych preferencji. Musiałem zrestartować urządzenie po odinstalowaniu, a wspólne preferencje zniknęły
— Santhana

2
Galaxy s7 tutaj z tym samym problemem. I Odinstaluj i po instalacji wspólne preferencje są nadal ustawione. Naprawdę irytujące, ponieważ nie mogę przetestować nowych instalacji, po prostu odinstalowując je.
— Dpedrinha,

2
@Maher Abuthraa ma dobrą odpowiedź, ta odpowiedź jest nieprawidłowa.
— Юрій Мазуревич

1
Urządzenie Samsung s8 s8 + również nie usuwa wspólnych preferencji, ostatnio testowałem. Naprawdę rozczarowany Samsungiem
— Vrajesh

299

Problem nie dotyczy preferencji. To zdecydowanie menedżer kopii zapasowych ! .. od Androida-23 domyślnie kopia zapasowa jako zadanie przechowuje dane aplikacji, w tym preferencje w chmurze. Później, gdy odinstalujesz, a następnie zainstalujesz nowszą wersję, prawdopodobnie użyjesz przywróconych preferencji. Aby tego uniknąć, po prostu dodaj to do swojego manifestu (lub przynajmniej do debugowania manifestu):

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

Przeczytaj to: http://developer.android.com/guide/topics/data/backup.html

Zobaczysz również, że jeśli uruchomisz Lint pod Android > Lint > Security:

ostrzeżenie o kłaczkach podczas tworzenia kopii zapasowej

Warto tutaj wspomnieć, że proces tworzenia kopii zapasowych jest jak czarna skrzynka ... nie wiesz, kiedy się zaczyna i okres między sprawdzeniami ... więc lepiej jest programować, aby go wyłączyć.

==== Aktualizacja ====

Po ustawieniu allowbackupna false. Aby rozwiązać ten problem, dodaj:

tools:replace="android:allowBackup"

w elemencie aplikacji. Podziękowania dla @ shahzain-ali

Alternatywnie możesz wyczyścić pamięć podręczną przed odinstalowaniem aplikacji.

Mam nadzieję, że to pomoże.


4
Hej, zauważyłem, że w niektórych urządzeniach wspólne preferencje są zachowywane po ponownym uruchomieniu urządzenia po unistall. Czy to jest z tym związane? Jeśli tak, czy można bezpiecznie ustawić tę flagę na fałsz w aplikacjach produkcyjnych? Czy wpłynie to na użytkownika?
— Eliahu Horwitz,

Nie zaleca się ustawiania fałszu na produkcji .. użytkownik straci wszystkie preferencje podczas aktualizacji .. Lepiej na produkcyjnym migracji danych, jeśli będzie to konieczne .. w kodzie debugowania i preferencjach mogą się zmieniać wiele razy, gdzie lepiej jest wyłączyć tworzenie kopii zapasowych
— Maher Abuthraa

1
Uznanie @MaherAbuthraa .. Miałem do czynienia z problemem, w którym niektóre udostępnione dane preferencji są zachowywane po odinstalowaniu i ponownym zainstalowaniu aplikacji. Nigdy nie wiedziałem, że coś takiego się dzieje.
— SoulRayder

1
Dzięki wielkie! Uratowałeś mi życie.
— Hungtdo

Jak mogę się upewnić, że preferencje są zachowane podczas aktualizacji, ale usunięte po ręcznym odinstalowaniu? Z pewnością byłoby to oczekiwane zachowanie.
— Gannet

10

To dziwne, ale znalazłem rozwiązanie w następujący sposób:

  1. Dodaj xmlns:tools="http://schemas.android.com/tools"w oczywisty tagu z Manifest.xml pliku
  2. Dodaj android:allowBackup="false"w tagu aplikacji z Manifest.xml pliku
  3. Dodaj tools:replace="android:allowBackup"w tagu aplikacji z Manifest.xml pliku

Plik Manifest.xml powinien wyglądać następująco.

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

Zrobione.


2
Twoim problemem był jeden z twoich modułów / AARs ma android: allowBackup = "true" .. Dlatego musisz go ponownie skonfigurować za pomocą narzędzi atrybutów: zamień.
— Maher Abuthraa

Mimo że zachowałem android:allowBackup="false"i tools:replace="android:allowBackup"nadal otrzymuję moje preferencje, masz jakiś pomysł, w czym problem?
— Shylendra Madda

Mam też ten sam problem. Po dodaniu tego kodu nie udało się wyczyścić preferencji
— Pawan Soni

5

Problem nie dotyczy preferencji.

użyj tego kodu, aby to naprawić ..........

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

To pomogło. Swoją drogą, dlaczego nie ustawimy parametru allowbackup na wartość false?
— Shakle

3

Ustawienie allowBackup="false"wyłącza aplikację z tworzenia kopii zapasowych i przywracania.

 android:allowBackup="false"

-1

Preferencje współdzielone nie zawsze są już usuwane w przypadku pianki marshmallow. Dodaj ten wiersz do swojego manifestu: "android: allowBackup =" false ""

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.