como remover a preferência compartilhada durante a desinstalação do aplicativo no Android

103

Eu tenho um aplicativo Android para salvar os detalhes de login, como nome de usuário e senha, por meio de que SharedPreferencesfunciona bem, mas preciso remover todos os meus usados SharedPreferencesdurante a desinstalação do aplicativo. Como fazer isso?

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

Quero remover isso SharedPreferencesquando meu aplicativo for desinstalado.

Shivcena
fonte
11
Isso será removido automaticamente pelo sistema operacional Android na desinstalação do aplicativo ...
umair.ali
obrigado pelo detalhe
valioso
Não no meu Samsung Galaxy 1 enraizado (Froyo). Ainda permaneceu em /dbdata/database/my.package/shared_prefs. Não sei se é porque está enraizado ou porque é o Froyo. Não consegui testar com dispositivos mais novos
Nilzor

Respostas:

20

SharedPreferences é sempre excluído junto com a desinstalação do aplicativo.

Quando você desinstala qualquer aplicativo, todas as alterações que o aplicativo fez em sua memória interna são revogadas, o que significa que seus arquivos SharedPreference, outros arquivos de dados, arquivo de banco de dados, aplicativo são removidos automaticamente pelo sistema operacional Android.

EDITADO: 29/04/15: para> = 21 API consulte a resposta de @Maher Abuthraa

Dhaval Parmar
fonte
10
Não é o caso do Nexus 6P, estou descobrindo isso agora.
AndyRoid
1
Sim, também observei que no Nexus 5 rodando com Android 6 não está excluindo as preferências compartilhadas. Tive que reiniciar o dispositivo após a desinstalação e as preferências compartilhadas foram embora
Santhana
2
Galaxy s7 aqui com o mesmo problema. I Desinstale e depois de instalar as preferências compartilhadas ainda estão definidas. Realmente irritante porque não consigo testar novas instalações apenas desinstalando.
Dpedrinha
2
@Maher Abuthraa tem uma resposta certa, esta resposta está errada.
Юрій Мазуревич
1
Dispositivo Samsung s8 s8 + também não exclui a preferência compartilhada, testei recentemente. Muito decepcionado com a Samsung
Vrajesh
299

O problema não é com preferências. É drasticamente o gerenciador de backup ! .. desde o android-23 por padrão, o backup como uma tarefa armazena os dados do aplicativo, incluindo preferências para nuvem. Posteriormente, ao desinstalar e instalar a versão mais recente, você provavelmente usará as preferências restauradas. Para evitar isso, basta adicionar ao seu manifesto (ou pelo menos ao manifesto de depuração):

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

Leia isto: http://developer.android.com/guide/topics/data/backup.html

Você também verá que se executar o Lint em Android > Lint > Security:

aviso de lint no backup

É bom mencionar aqui que o processo de backup é como uma caixa preta .. você não sabe quando começa, e período entre as verificações ... então é melhor para o desenvolvimento desabilitá-lo.

==== Atualizar ====

Você pode ter problemas de fusão de manifesto após definir allowbackuppara false. Para corrigir esse problema, adicione:

tools:replace="android:allowBackup"

no elemento do aplicativo. Crédito para @ shahzain-ali

Alternativamente, você pode limpar o cache antes de desinstalar o aplicativo.

Espero que isso possa ajudar.

Maher Abuthraa
fonte
4
Ei, eu notei que em alguns dispositivos as preferências compartilhadas são mantidas após a desinstalação do dispositivo ser reiniciado. Isso está conectado a isso? Em caso afirmativo, é seguro definir este sinalizador como falso em aplicativos de produção? Isso afetará o usuário?
Eliahu Horwitz
Não é recomendado definir falso na produção .. o usuário perderá todas as preferências durante a atualização .. Melhor na produção para migrar dados se necessário .. no código de depuração e as preferências podem mudar muitas vezes onde é melhor desligar o backup
Maher Abuthraa
1
Kudos @MaherAbuthraa .. Eu estava enfrentando esse problema de certos dados de preferência compartilhados serem retidos após a desinstalação e reinstalação do aplicativo. Nunca soube que tal coisa estava sendo feita.
SoulRayder de
1
Muito obrigado! você salvou minha vida.
hungtdo
Como posso garantir que as preferências sejam preservadas durante a atualização, mas removidas na desinstalação manual? Certamente esse seria o comportamento esperado.
Gannet de
10

É estranho, mas encontrei a solução da seguinte maneira:

  1. Adicionar xmlns:tools="http://schemas.android.com/tools"na tag de manifesto do arquivo Manifest.xml
  2. Adicionar android:allowBackup="false"na tag do aplicativo do do arquivo Manifest.xml
  3. Adicionar tools:replace="android:allowBackup"na tag do aplicativo do arquivo Manifest.xml

Manifest.xml arquivo deve ter a seguinte aparência.

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

Está feito.

Hiren Patel
fonte
2
Seu problema era um dos seus módulos / AARs com android: allowBackup = "true" .. É por isso que você precisa configurá-lo novamente com ferramentas de atributo: substituir.
Maher Abuthraa
Mesmo que eu tenha mantido android:allowBackup="false"e tools:replace="android:allowBackup"ainda conseguindo minhas preferências, Alguma idéia de qual é o problema?
Shylendra Madda
Eu também estou tendo o mesmo problema. Após adicionar este código, não foi possível limpar prefrence
Pawan Soni
5

O problema não é com preferências.

use este código para corrigi-lo ..........

<application
    android:allowBackup="true"
    android:fullBackupContent="false"></application>
Mohammad Faizan
fonte
Isso ajudou. A propósito, por que não definimos allowbackup como false?
Shakle
3

A configuração allowBackup="false"desativa o aplicativo de backup e restauração.

 android:allowBackup="false"
Doces Mahendran
fonte
-1

Preferências compartilhadas nem sempre são excluídas mais a partir do marshmallow. Adicione esta linha em seu manifesto: "android: allowBackup =" false ""

Binyamin Robbins
fonte