今回はRingtoneManagerを使って着信を扱う方法を紹介します。
着信音に関しては以下の記事でも触れています。
RingtoneManagerクラスを利用することで現在設定されている着信音を取得して鳴らしたり、着信音の一覧を取得することが可能です。
今回利用するクラスは以下の通りです。
着信音の再生に使用するクラス
| クラス名 | 説明 |
|---|---|
| RingtoneManager | 着信音にアクセスする機能を提供するクラス |
| Ringtone | 着信音クラス。MediaPlayerクラスを使用すること無く再生が可能。 |
それでは続きへどうぞ
Ringtoneクラス
Ringtoneクラスはその名前の通り着信音のクラスです。通常、音声ファイルを再生する場合にはMediaPlayerクラスなどを利用しますが、 Ringtoneクラスはplayメソッドを持っており、MediaPlayerクラスを利用すること無く再生することができます。
Ringtoneクラスの主なメソッド
| メソッド名 | 説明 |
|---|---|
| String getTitle(Context context) | タイトルを取得する |
| void play() | 再生する |
| void stop() | 停止する |
現在設定されている着信音を取得して再生する
以下の手順で行います。
- RingtoneManagerクラスのgetDefaultUriメソッドを使うことで現在設定している着信音のURIを取得
- RingtoneManagerクラスのgetRingtoneメソッドでコンテキストとURIを指定して着信音のRingtoneクラスを取得
- 取得した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_INDEX | URI |
| ID_COLUMN_INDEX | Cursorの中の行番号 |
サンプルではログにタイトルの一覧を表示し、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クラスを利用し、現在設定されている着信音や、着信音の一覧を取得する方法を説明しました。自作のアプリケーションの中で端末の着信音を利用したい場合に活用してください。