Androidでのアプリケーションのアンインストール中に共有設定を削除する方法


103

それを介してユーザー名やパスワードなどのログイン詳細を保存するAndroidアプリケーションがありますSharedPreferencesSharedPreferences、アプリケーションのアンインストール中に使用したものをすべて削除する必要があります。どうやってするの?

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 OSによって自動的に削除されます...
umair.ali 2013

貴重な詳細に感謝
shivcena 2013

私の根付いたSamsung Galaxy 1(Froyo)ではありません。まだ残ってい/dbdata/database/my.package/shared_prefsます。これが根付いているのか、それともフローヨなのか、わからない。新しいデバイスでテストできなかった
Nilzor 2014年

回答:


19

SharedPreferences アプリのアンインストールとともに常に削除されます。

アプリケーションをアンインストールすると、アプリケーションが内部メモリに加えたすべての変更が取り消されます。つまり、SharedPreferenceファイル、その他のデータファイル、データベースファイル、アプリケーションがAndroid OSによって自動的に削除されます。

編集:29/04/15:21以上のAPIについては、@ Maher Abuthraaの回答を参照してください


10
Nexus 6Pの場合はそうではありません。今すぐこれを考え出します。
AndyRoid 2016年

1
はい、Android 6を搭載したNexus 5でもsharedpreferencesが削除されないことを確認しました。アンインストール後にデバイスを再起動する必要がありましたが、sharedpreferencesはなくなりました
Santhana

2
同じ問題を持つGalaxy s7。私はアンインストールしましたが、インストール後も共有設定が設定されています。アンインストールするだけではフレッシュインストールをテストできないので、本当に迷惑です。
Dpedrinha

2
@Maher Abuthraaは正しい答えを持っています。この答えは間違っています。
ЮрійМазуревич

1
サムスンs8 s8 +デバイスだけでなく、共有設定も削除しません。最近テストしました。Samsungに本当にがっかり
Vrajesh

298

問題はプリファレンスではありません。それは劇的にバックアップマネージャーです!..デフォルトでは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"

application要素内。@ shahzain-aliのクレジット

または、アプリをアンインストールする前にキャッシュをクリアすることもできます。

お役に立てば幸いです。


4
ちょっと、私はいくつかのデバイスでunistall utilデバイスが再起動された後も共有設定が保持されていることに気づきました。これは関係していますか?もしそうなら、本番アプリでこのフラグをfalseに設定しても安全ですか?ユーザーに影響はありますか?
Eliahu Horwitz 2016

それは必要な..デバッグコードや好みにバックアップをオフにすることをお勧めします何度変更可能性がある場合、その生産にセットfalseにお勧めできません。ユーザーは、移行データへの生産に...アップデート中ベターすべての好みを失うことになる
マーAbuthraa

1
Kudos @MaherAbuthraa ..アプリのアンインストールと再インストール後、特定の共有設定データが保持されるというこの問題に直面していました。そのようなことが行われていることを決して知らなかった。
SoulRayder 2017年

1
本当にありがとう!あなたは私の命を救いました。
hungtdo 2017年

更新中に設定が保持され、手動のアンインストール時に削除されるようにするにはどうすればよいですか 確かに、これは予想される動作です。
Gannet 2017

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の1つがandroid:allowBackup = "true" ..だったということです。そのため、属性tools:replaceを使用して再度設定する必要があります。
Maher Abuthraa

私は自分の好みを保持しandroid:allowBackup="false"tools:replace="android:allowBackup"それでも取得しましたが、問題は何ですか?
Shylendra Madda

私も同じ問題を抱えています。このコードを追加した後、優先設定をクリアできません
Pawan Soni

5

問題はプリファレンスではありません。

このコードを使用して修正してください..........

<application
    android:allowBackup="true"
    android:fullBackupContent="false"></application>

それは役に立ちました。ところで、なぜallowbackupをfalseに設定しないのですか?
シャクル


-1

マシュマロの時点で、共有設定が常に削除されるとは限りません。マニフェストに次の行を追加します: "android:allowBackup =" false ""

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.