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.