RingtonePreferenceを使って、端末の音データを使用する。


設定画面を簡単に作る」において、PreferenceActivityを用いて簡単に設定画面を作成する方法を紹介しました。

今回は、端末にデフォルトで登録されている「Ringtone」「Notification」「Alarm」の3種類のデータから音データを選択することができる、RingtonePreferenceを紹介します。
RingtonePreferenceを使用することで、端末にデフォルトで登録されている音データをユーザに選択させ、アプリケーション内で使用することができます。

詳細な使用方法は続きをどうぞ。

RingtonePreferenceを使用し、音設定を行う際に必要なことは、以下の点です。

  • XMLファイルの作成(PreferenceActivityのレイアウト)
  • PreferenceActivityにて、上記XMLファイルのロード

それでは、一つづつ見ていきましょう。

・XMLファイルの作成(PreferenceActivityのレイアウト)

まず、PreferenceActivityが読み込むXMLファイルを作成します。
記述するファイルは、「設定画面を簡単に作る」の時と同じく、preference.xmlを作成しています。

<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において読み出します。

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を使用し選択されたデータをアプリケーション内で使用する際の一例を記載します。

       /* デフォルトの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