着信音を鳴らす
Android上で音声ファイル等を再生する場合は、MediaPlayerを使うが、着信音やアラーム音の場合はRingtoneクラスを使用して再生することができる。
またRingtoneManagerクラスで取得したUriを使い、MediaPlayerで再生することもできる。
またRingtoneManagerクラスで取得したUriを使い、MediaPlayerで再生することもできる。
使用するクラス
RingtoneManager 着信音のリストを取得したり、Ringtoneオブジェクトを取得したりする
Ringtone 特定の着信音を再生するクラス
Ringtone 特定の着信音を再生するクラス
サンプルコード
- まずは着信音のリストを表示してみる。RingtoneManagerからCursorを取得し、Cursorからデータを読み出している。ここではログに書き出すだけ。
RingtoneManager ringtoneManager = new RingtoneManager(this); ringtoneManager.setType(RingtoneManager.TYPE_ALL);
Cursor ringtoneCursor = ringtoneManager.getCursor(); String[] names = new String[ringtoneCursor.getCount()]; int columnId = ringtoneCursor.getColumnIndex("title"); ringtoneCursor.moveToFirst(); Log.v(TAG, "Cursor count:" + ringtoneCursor.getCount()); for(int i = 0 ; i < ringtoneCursor.getCount() ; i++) { Log.v(TAG, "found item:" + ringtoneCursor.getString(columnId)); ringtoneCursor.moveToNext(); }
- Ringtoneオブジェクトを使用し再生する。なお、Cursorから "uri"指定でURIを取り出し、代わりに使用することで任意の音を再生できる。
Uri defaultRingtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALL); Ringtone ringtone = RingtoneManager.getRingtone(this, defaultRingtoneUri); if (ringtone != null) ringtone.play();
- MediaPlayerで再生、Ringtoneでは出来ない繰り返し再生を10秒間続ける
- 以前、ここに出していたソースは間違っていたので修正した。setLooping や setAudioStreamType は create 後には実行できない。create では暗黙的に prepare を実行するので、あとは再生するだけ。
MediaPlayerの使い方は別ページで詳しく載せる予定。
メンバフィールドとして宣言する。
MediaPlayer mMediaPlyer;
Uri defaultRingtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); mMediaPlyer= new MediaPlayer(); mMediaPlyer.setDataSource(this, defaultRingtoneUri); mMediaPlyer.setLooping(true); mMediaPlyer.setAudioStreamType(AudioManager.STREAM_ALARM); mMediaPlyer.prepare(); mMediaPlyer.start(); Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { mMediaPlyer.stop(); } }, 10000);
エミュレータで実行すると、音声ファイルが設定されておらず残念なことに再生されないため、手動で音声ファイルを設定してやる必要がある。
面倒な設定なら、実機で試してみるとよい。
面倒な設定なら、実機で試してみるとよい。