cómo eliminar la preferencia compartida mientras se desinstala la aplicación en Android

103

Tengo una aplicación de Android para guardar los detalles de inicio de sesión, como el nombre de usuario y la contraseña, a través de SharedPreferenceseso funciona bien, pero necesito eliminar todos mis usados SharedPreferencesmientras se desinstala mi aplicación. ¿Cómo hacerlo?

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

Quiero eliminar esto SharedPreferencescuando se desinstale mi aplicación.

shivcena
fuente
11
Esto será eliminado automáticamente por el sistema operativo Android al desinstalar la aplicación ...
umair.ali
gracias por el valioso detalle
shivcena
No en mi Samsung Galaxy 1 (Froyo) rooteado. Todavía permaneció en /dbdata/database/my.package/shared_prefs. No sé si es porque tiene sus raíces o porque es Froyo. No he podido probar con dispositivos más nuevos
Nilzor

Respuestas:

19

SharedPreferences siempre se elimina junto con la desinstalación de la aplicación.

Cuando desinstala cualquier aplicación, todos los cambios que la aplicación ha realizado en su memoria interna se revocan, eso significa que sus archivos SharedPreference, otros archivos de datos, el archivo de base de datos y la aplicación se eliminan automáticamente por el sistema operativo Android.

EDITADO: 29/04/15: para> = 21 API, consulte la respuesta de @Maher Abuthraa

Dhaval Parmar
fuente
10
No es el caso de Nexus 6P, averiguando esto ahora mismo.
AndyRoid
1
Sí, también observé que en Nexus 5 que se ejecuta con Android 6 no se eliminan las preferencias compartidas. Tuve que reiniciar el dispositivo después de la desinstalación y las preferencias compartidas desaparecieron ahora
Santhana
2
Galaxy s7 aquí con el mismo problema. Desinstalo y después de la instalación, las preferencias compartidas todavía están configuradas. Realmente molesto porque no puedo probar instalaciones nuevas con solo desinstalarlo.
Dpedrinha
2
@Maher Abuthraa tiene una respuesta correcta, esta respuesta es incorrecta.
Юрій Мазуревич
1
El dispositivo Samsung s8 s8 + tampoco elimina la preferencia compartida, lo he probado recientemente. Realmente decepcionado con Samsung
Vrajesh
298

El problema no son las preferencias. ¡Es drásticamente el administrador de copias de seguridad ! .. desde Android-23 por defecto, la copia de seguridad como tarea almacena los datos de la aplicación, incluidas las preferencias en la nube. Más tarde, cuando desinstale y luego instale una versión más nueva, probablemente usará las preferencias restauradas. Para evitar eso, simplemente agregue esto a su manifiesto (o al menos para depurar el manifiesto):

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

Lea esto: http://developer.android.com/guide/topics/data/backup.html

También verá que si ejecuta Lint en Android > Lint > Security:

advertencia de pelusa en la copia de seguridad

Es bueno mencionar aquí que el proceso de copia de seguridad es como una caja negra ... no sabes cuándo comienza y el período entre comprobaciones ... así que es mejor para el desarrollo desactivarlo.

==== Actualizar ====

Usted puede obtener temas de fusión del manifiesto después de ajustar allowbackupa false. Para solucionar ese problema, agregue:

tools:replace="android:allowBackup"

en el elemento de la aplicación. Crédito a @ shahzain-ali

Alternativamente, puede borrar el caché antes de desinstalar la aplicación.

Espero que te ayude.

Maher Abuthraa
fuente
4
Oye, he notado que en algunos dispositivos las preferencias compartidas se conservan después de que se reinicia el dispositivo de desinstalación. ¿Eso está relacionado con esto? Si es así, ¿es seguro establecer esta marca en falso en aplicaciones de producción? ¿Afectará al usuario?
Eliahu Horwitz
No se recomienda establecer falso en producción .. el usuario perderá todas las preferencias durante la actualización .. Mejor en producción para migrar datos si es necesario .. en el código de depuración y las preferencias pueden cambiar muchas veces donde es mejor desactivar la copia de seguridad
Maher Abuthraa
1
Felicitaciones @MaherAbuthraa .. Me enfrentaba a este problema de que ciertos datos de preferencias compartidas se retenían después de desinstalar y reinstalar la aplicación. Nunca supe que se estaba haciendo algo así.
SoulRayder
1
¡Muchas gracias! me salvaste la vida.
hungtdo
¿Cómo puedo asegurarme de que las preferencias se conservan durante la actualización pero se eliminan en la desinstalación manual? Seguramente este sería el comportamiento esperado.
Gannet
10

Es extraño pero encontré la solución de la siguiente manera:

  1. Añadir xmlns:tools="http://schemas.android.com/tools"en la etiqueta manifiesta de Manifest.xml archivo
  2. Añadir android:allowBackup="false"en la etiqueta de la aplicación de Manifest.xml archivo
  3. Añadir tools:replace="android:allowBackup"en la etiqueta de la aplicación de Manifest.xml archivo

El archivo Manifest.xml debería verse así.

    <?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á hecho.

Hiren Patel
fuente
2
Su problema fue que uno de sus módulos / AAR tiene android: allowBackup = "true" .. Es por eso que necesita configurarlo nuevamente con herramientas de atributos: replace.
Maher Abuthraa
Aunque mantuve android:allowBackup="false"y tools:replace="android:allowBackup"sigo obteniendo mis preferencias, ¿alguna idea de cuál es el problema?
Shylendra Madda
También tengo el mismo problema. Después de agregar este código, no se puede borrar la preferencia
Pawan Soni
5

El problema no son las preferencias.

usa este código para arreglarlo ..........

<application
    android:allowBackup="true"
    android:fullBackupContent="false"></application>
Mohammad Faizan
fuente
Eso ayudó. Por cierto, ¿por qué no establecemos allowbackup en falso?
Shakle
3

La configuración allowBackup="false"excluye una aplicación de la copia de seguridad y la restauración.

 android:allowBackup="false"
Caramelo Mahendran
fuente
-1

Las preferencias compartidas ya no se eliminan siempre a partir de marshmallow. Agrega esta línea en tu manifiesto: "android: allowBackup =" false ""

Binyamin Robbins
fuente