オーディオファイルが時々再生され、時々再生されないという奇妙な問題があります。落とし穴は、プレイしないことに決めたとき、DDMSが私に以下を与えることです:
E/MediaPlayer﹕ Should have subtitle controller already set
これは1対1で音楽が再生されないため、おそらくこれが問題であると判断しました...
音楽が再生されていないときに音量ボタンを押すと、音楽の再生が開始されます。約30秒の無再生を待つと、再びループが開始されなくなります。
何が起きてる?私はキットカットを使用しています
player = new MediaPlayer();
AssetFileDescriptor afd = null;
try {
afd = getAssets().openFd("Theme.mp3");
} catch (IOException e) {
e.printStackTrace();
}
try {
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
} catch (IOException e) {
e.printStackTrace();
}
try {
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
player.setLooping(true); //restart playback end reached
//player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0
player.start(); //start play back
StackOverflowの 前の説明 と、これが導入された Android commit を参照すると、上記のコードはMediaPlayer
オブジェクトを完全に初期化しない場合があります。
メディア再生用の KitKatサンプルコード は、以下を呼び出す必要があることを示しています。
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
MediaPlayer
を作成した直後、およびそのsetDataSource
メソッドを呼び出す前。
私は同じ問題を抱えていたので、MediaPlayerをインスタンス化した直後に以下を追加して修正しました。
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mp == mediaPlayer) {
mediaPlayer.start();
}
}
});
以前は、MediaPlayer.OnPreparedListenerを実装し、onPrepared()をオーバーライドしていましたが、機能しませんでした。
これがお役に立てば幸いです!