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
  1. 105     private String mSharedPreferencesName;  
  2.   
  3. 141     PreferenceManager(Activity activity, int firstRequestCode) {  
  4. 142         mActivity = activity;  
  5. 143         mNextRequestCode = firstRequestCode;  
  6. 144   
  7. 145         init(activity);  
  8. 146     }  
  9.   
  10. 160     private void init(Context context) {  
  11. 161         mContext = context;  
  12. 162   
  13. 163         setSharedPreferencesName(getDefaultSharedPreferencesName(context));  
  14. 164     }  
  15.   
  16. 302     public String getSharedPreferencesName() {  
  17. 303         return mSharedPreferencesName;  
  18. 304     }  
  19.   
  20. 313     public void setSharedPreferencesName(String sharedPreferencesName) {  
  21. 314         mSharedPreferencesName = sharedPreferencesName;  
  22. 315         mSharedPreferences = null;  
  23. 316     }  
  24.   
  25. 365     public static SharedPreferences getDefaultSharedPreferences(Context context) {  
  26. 366         return context.getSharedPreferences(getDefaultSharedPreferencesName(context),  
  27. 367                 getDefaultSharedPreferencesMode());  
  28. 368     }  
  29.   
  30. 370     private static String getDefaultSharedPreferencesName(Context context) {  
  31. 371         return context.getPackageName() + "_preferences";  
  32. 372     }  


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

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

0 件のコメント:

コメントを投稿