RingtoneManagerを使って着信音を取得する


今回はRingtoneManagerを使って着信を扱う方法を紹介します。

着信音に関しては以下の記事でも触れています。

RingtoneManagerクラスを利用することで現在設定されている着信音を取得して鳴らしたり、着信音の一覧を取得することが可能です。

着信音の一覧をログに出力

今回利用するクラスは以下の通りです。

着信音の再生に使用するクラス

クラス名説明
RingtoneManager着信音にアクセスする機能を提供するクラス
Ringtone着信音クラス。MediaPlayerクラスを使用すること無く再生が可能。

それでは続きへどうぞ

Ringtoneクラス

Ringtoneクラスはその名前の通り着信音のクラスです。通常、音声ファイルを再生する場合にはMediaPlayerクラスなどを利用しますが、 Ringtoneクラスはplayメソッドを持っており、MediaPlayerクラスを利用すること無く再生することができます

Ringtoneクラスの主なメソッド

メソッド名説明
String getTitle(Context context)タイトルを取得する
void play()再生する
void stop()停止する

現在設定されている着信音を取得して再生する

以下の手順で行います。

  1. RingtoneManagerクラスのgetDefaultUriメソッドを使うことで現在設定している着信音のURIを取得
  2. RingtoneManagerクラスのgetRingtoneメソッドでコンテキストとURIを指定して着信音のRingtoneクラスを取得
  3. 取得したRingtoneクラスのインスタンスのstartメソッドを呼び出すことで再生を開始し、stopメソッドを呼び出すことで停止させる

■src/MainActivity.java

public class MainActivity extends Activity {
    Ringtone mRingtone;
    TextView mTextViewTitle;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mTextViewTitle = (TextView)findViewById(R.id.textViewTitle);

        // 現在設定されている着信音を選択する
        Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        mRingtone = RingtoneManager.getRingtone(getApplicationContext(), uri);

        // 再生開始ボタン
        Button buttonPlay = (Button)findViewById(R.id.buttonPlay);
        buttonPlay.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                 mRingtone.play();  // 再生

                 // 着信音のタイトルを取得して表示する
                 mTextViewTitle.setText(mRingtone.getTitle(getApplicationContext()));
            }
        });

        // 停止ボタン
        Button buttonStop = (Button)findViewById(R.id.buttonStop);
        buttonStop.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                 mRingtone.stop();  // 停止
                 mTextViewTitle.setText("");
            }
        });
 

getDefaultUriメソッドに指定する引数によって、着信音の他に、通知音やアラーム音も取得することが可能です。

RingtoneManagerクラスのgetDefaultUriメソッドに指定する値

説明
TYPE_RINGTONE着信音
TYPE_NOTIFICATION通知音
TYPE_ALARMアラーム音

一覧を取得し、再生する

次は着信の一覧を取得する方法です。

まず、RingtoneManagerクラスのインスタンスを生成します。そしてgetCursorメソッドを呼び出しCursorクラスのインスタンスを取得します。このCursorクラスが着信音の一覧となっています。

Cursorからはタイトル以外にURIも取得することが可能です。

着信音一覧のCursorクラスのCOLUMN_INDEX

インデックス説明
TITLE_COLUMN_INDEXタイトル
URI_COLUMN_INDEXURI
ID_COLUMN_INDEXCursorの中の行番号

サンプルではログにタイトルの一覧を表示し、getRingtoneメソッドで2番目(0オリジンなので引数では1を指定)の着信音のRingtoneクラスを取得しています。

public class MainActivity extends Activity {
    Ringtone mRingtone;
    TextView mTextViewTitle;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

		〜省略〜

        // 一覧表示ボタン
        Button buttonList = (Button)findViewById(R.id.buttonList);
        buttonList.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                RingtoneManager ringtoneManager = new RingtoneManager(getApplicationContext());
                Cursor cursor = ringtoneManager.getCursor();
                while (cursor.moveToNext()) {
                    Log.d("Ringtone", "TITLE: " + cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX));
                }
                mRingtone = ringtoneManager.getRingtone(1);
                mRingtone.play();
                mTextViewTitle.setText(mRingtone.getTitle(getApplicationContext()));
            }
        });

まとめ

RingtoneMangerクラスを利用し、現在設定されている着信音や、着信音の一覧を取得する方法を説明しました。自作のアプリケーションの中で端末の着信音を利用したい場合に活用してください。