RingtonePreferenceを使って、端末の音データを使用する。
|「設定画面を簡単に作る」において、PreferenceActivityを用いて簡単に設定画面を作成する方法を紹介しました。
今回は、端末にデフォルトで登録されている「Ringtone」「Notification」「Alarm」の3種類のデータから音データを選択することができる、RingtonePreferenceを紹介します。
RingtonePreferenceを使用することで、端末にデフォルトで登録されている音データをユーザに選択させ、アプリケーション内で使用することができます。
詳細な使用方法は続きをどうぞ。
RingtonePreferenceを使用し、音設定を行う際に必要なことは、以下の点です。
- XMLファイルの作成(PreferenceActivityのレイアウト)
- PreferenceActivityにて、上記XMLファイルのロード
それでは、一つづつ見ていきましょう。
・XMLファイルの作成(PreferenceActivityのレイアウト)
まず、PreferenceActivityが読み込むXMLファイルを作成します。
記述するファイルは、「設定画面を簡単に作る」の時と同じく、preference.xmlを作成しています。
1 2 3 4 5 6 7 8 | <RingtonePreference android:key= "alarm_music_key" android:title= "Set Alarm Music" android:ringtoneType= "all" android:showDefault= "true" android:showSilent= "true" /> </PreferenceScreen> |
ソースコード内で指定している内容
android:key | preferenceのkey |
android:title | 選択ウィンドウのタイトル |
ringtoneType | 「ringtone」「notification」「alarm」「all」を指定。「all」以外を和演算指定も可能。 |
showDefault | デフォルト着信音を表示するか |
shouwSilent | サイレントを表示するか |
・PreferenceActivityにて、上記XMLファイルのロード
PreferenceActivityのレイアウトファイルが作成出来れば、PreferenceActivityにおいて読み出します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class Main extends PreferenceActivity implements OnSharedPreferenceChangeListener { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); /* 作例したPreferenceのレイアウトファイル読み出し */ addPreferencesFromResource(R.xml.preferences); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { /* プリファレンスが変更された時に呼び出される */ } |
以上までが、RingtonePreferenceの使用方法です。
最後に、RingtonePreferenceを使用し選択されたデータをアプリケーション内で使用する際の一例を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* デフォルトのpreferenceを取得 */ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences( this ); /* RingtonePreferenceの設定値取得 */ String url = sp.getString( "alarm_music_key" , "" ); if (url == null ){ /* サイレントの場合 */ } else { /* その他 */ Uri uri = Uri.parse(url); MediaPlayer mp = MediaPlayer.create( this , uri); mp.setLooping( true ); mp.seekTo( 0 ); mp.start(); } |
RingtonePreferenceを使用し、設定されたデータを参照する場合に注意しなければならないのは、
サイレントを設定した場合、NULLが書き込まれる点です。
一例では、NULLの場合はMediaPlayerの呼び出しを行っていません。
MediaPlayerの詳細な使用方法については、
「音声ファイルを再生する」にて紹介してますので、そちらも参考になさってください。