как удалить общие настройки при удалении приложения в Android


103

У меня есть приложение для Android для сохранения данных для входа в систему, таких как имя пользователя и пароль, через которые SharedPreferencesработает нормально, но мне нужно удалить все, что я использовал, SharedPreferencesпока мое приложение удаляется. Как это сделать?

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

Я хочу удалить это SharedPreferencesпри удалении моего приложения.


11
Это будет автоматически удалено ОС Android при удалении приложения ...
— umair.ali

спасибо за ценную деталь
— shivcena 08

Не на моем рутированном Samsung Galaxy 1 (Froyo). Тем не менее остался в /dbdata/database/my.package/shared_prefs. Не знаю, потому что это внедрено или потому что это Фройо. Не удалось протестировать новые устройства
— Nilzor

Ответы:


20

SharedPreferences всегда удаляется вместе с удалением приложения.

Когда вы удаляете какое-либо приложение, все изменения, внесенные приложением во внутреннюю память, отменяются, это означает, что ваши файлы SharedPreference, другие файлы данных, файл базы данных, приложение автоматически удаляются ОС Android.

ИЗМЕНИТЬ: 29/04/15: для> = 21 API обратитесь к ответу @Maher Abuthraa


10
Не в случае с Nexus 6P, сейчас разбираюсь в этом.
— AndyRoid

1
Да, я также заметил, что Nexus 5, работающий с Android 6, не удаляет общие настройки. Мне пришлось перезапустить устройство после удаления, и общие настройки исчезли
— Сантана

2
Galaxy s7 здесь с такой же проблемой. Я удалил, и после установки общие настройки все еще были установлены. Действительно раздражает, потому что я не могу протестировать новые установки, просто удалив их.
— Dpedrinha

2
@Maher Abuthraa имеет правильный ответ, этот ответ неверен.
— Юрій Мазуревич

1
Устройство Samsung s8 s8 + также не удаляет общие настройки, я недавно тестировал. Действительно разочарован Samsung
— Vrajesh

299

Проблема не в предпочтениях. Это радикально менеджер резервного копирования ! .. поскольку android-23 по умолчанию резервное копирование как задача хранит данные приложения, включая настройки в облаке. Позже, когда вы удалите, а затем установите новую версию, вы, вероятно, будете использовать восстановленные настройки. Чтобы этого избежать, просто добавьте это в свой манифест (или, по крайней мере, для отладки манифеста):

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

Прочтите это: http://developer.android.com/guide/topics/data/backup.html

Вы также увидите, что если вы запустите Lint под Android > Lint > Security:

предупреждение о линтах при резервном копировании

Здесь хорошо упомянуть, что процесс резервного копирования похож на черный ящик ... вы не знаете, когда он начинается, и период между проверками ... так что лучше для разработки отключить его.

==== Обновление ====

У вас могут возникнуть проблемы с объединением манифестов после установки allowbackupна false. Чтобы исправить эту проблему, добавьте:

tools:replace="android:allowBackup"

в элементе приложения. Кредит @ shahzain-ali

В качестве альтернативы вы можете очистить кеш перед удалением приложения.

Надеюсь, это поможет.


4
Привет, я заметил, что на некоторых устройствах общие настройки сохраняются после перезапуска устройства. Это связано с этим? Если да, можно ли установить этот флаг в значение false в производственных приложениях? Повлияет ли это на пользователя?
— Элиаху Хорвиц

Не рекомендуется устанавливать false в производственной среде. Пользователь потеряет все настройки во время обновления. Лучше в производственной среде перенести данные, если это необходимо. В отладочном коде настройки могут меняться много раз, где лучше отключить резервное копирование
— Махер Абутраа,

1
Престижность @MaherAbuthraa .. Я столкнулся с проблемой сохранения определенных общих данных о предпочтениях после удаления и повторной установки приложения. Никогда не знал, что такое делается.
— SoulRayder

1
Спасибо! Вы спасли мою жизнь.
— Hungtdo

Как я могу убедиться, что настройки сохраняются во время обновления, но удаляются при удалении вручную? Конечно, это было бы ожидаемым поведением.
— Gannet

10

Это странно, но я нашел решение следующим образом:

  1. Добавить xmlns:tools="http://schemas.android.com/tools"в манифесте тег из Manifest.xml файла
  2. Добавить android:allowBackup="false"в прикладной тег из Manifest.xml файла
  3. Добавить tools:replace="android:allowBackup"в прикладной тег из Manifest.xml файла

Файл Manifest.xml должен выглядеть так.

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

Это сделано.


2
Ваша проблема заключалась в одном из ваших модулей / AAR имеет android: allowBackup = "true" .. Вот почему вам нужно снова настроить его с помощью атрибутов tools: replace.
— Махер Абутраа

Несмотря на то, что я сохранил android:allowBackup="false"и tools:replace="android:allowBackup"все еще получаю свои предпочтения, есть идеи, в чем проблема?
— Шилендра Мадда

У меня такая же проблема. После добавления этого кода невозможно очистить предпочтение
— Паван Сони

5

Проблема не в предпочтениях.

используйте этот код для исправления ..........

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

Это помогло. Кстати, почему бы нам не установить для allowbackup значение false?
— Shakle

3

Настройка allowBackup="false"отключает приложение как от резервного копирования, так и от восстановления.

 android:allowBackup="false"

-1

Общие настройки больше не всегда удаляются из зефира. Добавьте эту строку в свой манифест: "android: allowBackup =" false ""

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.