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.

shivcena
źródło
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

Dhaval Parmar
źródło
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.

Maher Abuthraa
źródło
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.

Hiren Patel
źródło
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>
Mohammad Faizan
źródło
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"
Mahendran Candy
źródło
-1

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

Binyamin Robbins
źródło