Preferenceをリセットする

開発中にPreferenceをリセットしたい時は、今まではアプリの再インストールしていました。
それでもめんどうなので、アプリにデバッグ用にPreferenceを削除する機能をつけたので書きます。

Preferenceはどうやって保存されてるの?

xmlで保存されています。

どこに?

Androidアプリのローカルデータ保存 〜Preference〜 - jitsu102の日記
http://d.hatena.ne.jp/jitsu102/20091117/1258466865
Preferenceで保存した値は、"/data/data/%Package Name%/shared_prefs"配下に、
"%Package Name%_preferences.xml"というファイル名で保存されます。

だそうです。

どうやってリセットするの?

削除すればいいと思います。

ほんとに?

たぶん・・・

注意

このxmlのファイルパスはgetDefaultSharedPreferencesやPreferenceActivityで保存されたPreferenceの格納先です。
名前を付けて保存した場合は、また別になると思われます。

ソース

Util.java
import android.content.Context;

public class Util {
  /**
   * パッケージ名を返します
   * 
   * @param context
   * @return
   */
  public static String getPackageName(Context context) {
    return context.getPackageName();
  }

  /**
   * Preferenceが格納されているディレクトリ名を返します
   * 
   * @param context
   * @return
   */
  public static String getPreferenceDirectory(Context context) {
    return "/data/data/" + getPackageName(context) + "/shared_prefs/";
  }

  /**
   * DefaultSharedPreferenceのパスを返します
   * 
   * @param context
   * @return
   */
  public static String getDefaultSharedPreferencesPath(Context context) {
    return getPreferenceDirectory(context) + getPackageName(context) + "_preferences.xml";
  }
}
MainActivity.javaなど
public void onClick(View v) {
  String path = Util.getDefaultSharedPreferencesPath(context);
  File f = new File(path);
  if (f.exists()) {
    boolean result;
    result = f.delete();
    if (result) {
      Toast.makeText(context, "Preferenceを削除しました", Toast.LENGTH_LONG).show();
    } else {
      Toast.makeText(context, "Preferenceの削除に失敗しました", Toast.LENGTH_LONG).show();
    }
  } else {
    Toast.makeText(context, "Preferenceがありません", Toast.LENGTH_LONG).show();
  }
}

さいごに

getPackageName()が2回呼ばれんじゃんとかツッコミはナシで(;-;)

2010-07-21 9時ごろ 追記

なんと

[twitter:@95kugo]さんが
Preferenceだったらぜんぶ消すぜ
ってコード書いてくださいました。

#1053382 - Pastie 
http://pastie.org/1053382

ステキです。

さらに

[twitter:@adakoda] さんが、よりスマートな方法を書いてくださいました。

[Android] プリファレンス(Preferences)をリセットする - adakoda 
http://www.adakoda.com/adakoda/2010/07/android-preferences.html

わたしもハードコーディングはダメだと思います。ごめんなさい。

2010-07-21 11時ごろ 追記

id:ytRinoさんがさらにステキなコード書いてくれました。

SharedPreferencesのリセット - ちりもつ 
http://d.hatena.ne.jp/ytRino/20100722/1279762434

Editorの方にクリアするメソッドがあるなんて気づきませんでした。
これが一番ですなー。