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
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <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の詳細な使用方法については、
音声ファイルを再生する」にて紹介してますので、そちらも参考になさってください。

One Comment