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


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

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

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

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

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

ソースコードの場合レイアウトファイルの場合
setTextSize(float size)android:textSize="●dip"
(android:textSize="50dip"など)

それでは続きへどうぞ

Ringtoneクラス

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

ソースコードで指定する場合レイアウトファイルで指定する場合
setTextColor(int color)android:textColor="#FFff0000"(ARGBで指定)

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

以下の手順で行います。

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

ソースコードで指定レイアウトファイルで指定
setGravity(int gravity)android:gravity="top"

一覧を取得し、再生する

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

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

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

Gravityクラスのメンバ変数用途
BOTTOM要素を下方向に寄せる
CENTER要素をViewの真ん中に寄せる
CENTER_HORIZONTAL要素をViewの横幅の真ん中に寄せる
CENTER_VERTICAL要素をViewの縦幅の真ん中に寄せる
LEFT要素を左方向に寄せる
RIGHT要素を右方向に寄せる
TOP要素を上方向に寄せる

サンプルではログにタイトルの一覧を表示し、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クラスを利用し、現在設定されている着信音や、着信音の一覧を取得する方法を説明しました。自作のアプリケーションの中で端末の着信音を利用したい場合に活用してください。

関連する記事: