前回の記事で、音声ファイルを再生するコードを書きました。
あれだけだと、ファイルを1回再生してすぐ止まったと思います。
あのままだと実用性が低いので、今回はループ再生して、好きなだけ鳴らして、ある程度の時間が経ったら止める、という処理をやってみようと思います。
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); // アラーム音 //音量設定を取得 AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int Vol = am.getStreamVolume(AudioManager.STREAM_MUSIC); //[res]-[raw]の音源を再生するときの音量 int max = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //[res]-[raw]の音源を再生するときの最大音量 System.out.println("Vol:" + Vol); System.out.println("max:" + max); //音量を上げる am.setStreamVolume(AudioManager.STREAM_MUSIC, max, 0);
ここまでは一緒です。
MediaPlayerインスタンスの宣言から、ちょっと変えていきます。
final MediaPlayer mp = MediaPlayer.create(context, uri); mp.setLooping(true); mp.start(); int timeout = 30*1000; Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { if (mp.isPlaying()) mp.stop(); } }, timeout);
timeoutという変数で、音が鳴りやむまでの時間を設定しています。
ここでは30秒鳴って止めています。秒数を変えたいなら、この30を変えれば変更できます。
注意としては、mp.stop();を必ず実行するようにしてください。
これがないとマジでずっと鳴り続けます。Activityを閉じても、アプリを終了しても、ずっと、ずっと……。
[…] してみます。 基本的には、下記の記事を参考に、組み合わせるだけです。 アプリで音声ファイルをループ再生して、任意のタイミングで止める Androidアプリでアラーム通知をする その1 […]