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.


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


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.


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.


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>

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"

-1

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.