2012年10月22日月曜日

Android getDefaultSharedPreferences() の SharedPreferences の名前を取得する

結論

「PreferenceManager の getSharedPreferenceName() 呼べば OK」

PreferenceManager のコンストラクタ

init()

getDefaultSharedPreferencesName() で取得した名前を setSharedPreferencesName() で mSharedPreferencesName にセット

getDefaultSharedPreferences() では getDefaultSharedPreferencesName() で取得した名前の SharedPreferences を返しているので、

getSharedPreferencesName() を呼んで mSharedPreferencesName を取得すればいいということになる。
ただし、setSharedPreferencesName() を呼んで名前を変えてしまうと、getDefaultSharedPreferencesName() と違う文字列が帰ってくることになるので注意が必要。

http://tools.oesf.biz/android-4.0.1_r1.0/xref/frameworks/base/core/java/android/preference/PreferenceManager.java
105 private String mSharedPreferencesName; 141 PreferenceManager(Activity activity, int firstRequestCode) { 142 mActivity = activity; 143 mNextRequestCode = firstRequestCode; 144 145 init(activity); 146 } 160 private void init(Context context) { 161 mContext = context; 162 163 setSharedPreferencesName(getDefaultSharedPreferencesName(context)); 164 } 302 public String getSharedPreferencesName() { 303 return mSharedPreferencesName; 304 } 313 public void setSharedPreferencesName(String sharedPreferencesName) { 314 mSharedPreferencesName = sharedPreferencesName; 315 mSharedPreferences = null; 316 } 365 public static SharedPreferences getDefaultSharedPreferences(Context context) { 366 return context.getSharedPreferences(getDefaultSharedPreferencesName(context), 367 getDefaultSharedPreferencesMode()); 368 } 370 private static String getDefaultSharedPreferencesName(Context context) { 371 return context.getPackageName() + "_preferences"; 372 }

ちなみに PreferenceManager のインスタンスを取得するには、2.x なら PreferenceActivity, 3.0 以降なら PreferenceFragment の getPreferenceManager() から取得できます。

PreferenceManager のコンストラクタが package private だから support package で PreferenceFragment が提供されないのかなと思いました。

0 件のコメント:

コメントを投稿