как удалить общие настройки при удалении приложения в 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 ""

Биньямин Роббинс
источник