「E/MediaPlayer: error (1, -19)」みたいなエラーログやめて…
以下のようなアプリを作って、再生と停止を連続で繰り返していたら発生したエラー。
このエラー発生後は、何も再生できなくなる。
プロセスを殺さないと復帰できないので、これはヤベェと慌てて調査する。
原因
MediaPlayerは、再生が終了する毎に「release()」を呼ばなければならない。
なんてことはない、単なる実装洩れだよ。。。
サンプルコード
例えば、終了の通知(コールバック)で、ちゃんと「release()」を呼べば、問題ない。
引数にわざわざ「MediaPlayer mediaPlayer」が設定されていたのは、意味があったんだね……!
気づいてあげられなくて、ゴメン。
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
}
});
こんな感じの、「stop()」的な関数を作ってみてもいい。
/**
* Stop the sound.
*/
private void stop() {
if (null == mMediaPlayer) {
return;
}
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.reset();
mMediaPlayer.release();
mMediaPlayer = null;
}
サンプルアプリ
是非、容赦なく連打してみてほしい。
アプリの実動作・見栄えを自らの手で確認した方が、プロジェクト一式や操作動画を確認するよりも、多くを得られると思っているので、良ければ、以下のアプリ(=上記のスクショのアプリ)を参考にどうぞ。
「自然の音」は、リラックス効果と良質な睡眠、仕事・勉強の集中力アップをもたらす :SOUNDBOSS
【動作環境】
Android OS 5.0以上
Made in Japan.
© CUTBOSS
Producer & Director, Boss of the Barber.
Lead Programmer & Designer, Boss of the Barber.