Preference(5)-SharedPreferencesオブジェクトを使ってPreferenceデータにアクセス
SharedPreferencesオブジェクトを取得して、コードでPreferenceデータを操作する事ができる。
SharedPreferencesオブジェクトの取得と、ファイル名とアクセスモード
SharedPreferencesオブジェクトを取得するには、以下の3つのメソッドのいずれかを使う。
どのメソッドを使うかによって、ファイル名とアクセスモードが異なる。
- PreferenceManager.getDefaultSharedPreferences(Context context)
アプリケーションのデフォルトのSharedPreferencesオブジェクトを取得する。
設定データが保存されるxmlファイルのファイル名は、 「プロジェクトを作成する時に指定したパッケージ名_preference.xml」となる。
ファイルのアクセスモードは常にMODE_PRIVATEとなる。 - Activity#getPreferences(int mode)
ファイル名は「Activityのクラス名.xml」となる。
引数modeには、以下のようなファイルのアクセスモードを指定する。- MODE_PRIVATE
他のアプリケーションからのアクセス不可。 - MODE_WORLD_READABLE
他のアプリケーションからの読込み可。 - MODE_WORLD_WRITEABLE
他のアプリケーションからの書込み可。
- MODE_PRIVATE
- ContextWrapper#getSharedPreferences(String name, int mode)
ファイル名は「引数nameで指定した値.xml」となる。
引数modeによりアクセスモードを指定する。
ActivityはContextWrapperクラスを継承しているので、Activityクラスよりこのメソッドを操作できる。
以下のプログラムは、いろいろな方法でSharedPreferencesオブジェクトを取得して、 設定データを保存するプログラムの例です。
リスト14-いろいろな方法でSharedPreferencesオブジェクトを取得
このプログラムを実行した後、DDMSパースペクティブのファイルエクスプローラにて Preferenceファイルを確認してみると、以下のように表示される。
引数modeの指定により、アクセス権が変化しているのがわかる。
Preferenceファイルを他のアプリケーションから読込む方法については、「他のアプリケーションのデータを利用する」 を参照。
PreferenceActivityの使用するxmlファイルのファイル名を変更する。
PreferenceActivityが使用するSharedPreferencesオブジェクトは、 PreferenceActivity#getPreferenceScreen().getSharedPreferences()メソッドにより取得できる。
デフォルトではこのSharedPreferencesオブジェクトは、 PreferenceManager.getDefaultSharedPreferencesメソッドで取得した DefaultのSharedPreferencesオブジェクトが使われる。
このため、設定データを保存するxmlファイルのファイル名は固定になってしまう。
このファイル名を更するには、以下のようにする。
ここでは、xxx.xmlというファイルが使われる。
Preferenceデータの保存
コードを使ってPreferenceデータを保存するには、SharedPreferences.Editorオブジェクトを使用する。
SharedPreferences.Editorクラスには、以下のように保存するデータの型によりそれぞれ専用のputメソッドが用意されている。
putメソッドの引数には、設定データのキー値を指定する。
以下に、異なるデータ型の設定データを保存する例を示す。
SharedPreferences.Editorクラスには他にもclearメソッド(全削除),removeメソッド(特定のkeyを削除)がある。Preferenceデータの読込
SharedPreferencesクラスには、読込むデータの型に応じたgetメソッドが用意されている。
getメソッドの第1引数にはキー値を、第2引数にはそのキーが存在しない場合の戻り値を、指定する。
以下に、異なるデータ型の設定データを読込む例を示す。
また、SharedPreferencesクラスのgetAllメソッドを使用すると、保存されているすべてのキーと値を取得する事ができる。
以下にその例を示す。