我在我的应用中实现了简单的MediaPlayer
播放机制。我不确定这可能是问题的原因,但是当我将项目升级到最新的API(目前为19)时,一切似乎都很好。
因此:当我点击我的应用程序中的按钮时,文件播放正常启动并突然停止(这会导致标准'点击声音播放)。我为我的MediaPlayer设置OnCompletionListener
,并在点击声音后触发,我的MediaPlayer作为参数。
private void startNewTrack(int which){
stopTrack();
try {
if (mp == null) {
mp = new MediaPlayer();
//mp.setOnCompletionListener(this);
mp.setOnErrorListener(this);
}
MediaMetadataRetriever meta = new MediaMetadataRetriever();
meta.setDataSource(playlist[which].getPath());
String titleString = meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
if (titleString == null)
titleString = playlist[which].getName();
title.setText(titleString);
album.setText(meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
artist.setText(meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
try {
byte[] pic = meta.getEmbeddedPicture();
if (pic == null)
cover.setImageResource(R.drawable.albumart_mp_unknown);
else
cover.setImageBitmap(BitmapFactory.decodeByteArray(pic, 0, pic.length));
} catch (Exception e) {
cover.setImageResource(R.drawable.albumart_mp_unknown);
}
mp.setDataSource(playlist[which].getPath());
mp.prepare();
seek.setMax(mp.getDuration() / 1000);
mp.start();
while (playerThread != null)
Thread.sleep(5);
playerThread = new Thread(new Runnable() {
@Override
public void run(){
while (mp != null && !isInErrorState) {
try {
if (!isSeeking && mp.isPlaying()) {
final int pos = getCurrentPosition() / 1000;
MusicPlayback.this.post(new Runnable() {
@Override
public void run(){
seek.setProgress(pos);
}
});
}
Thread.sleep(500);
} catch (Exception e) {
}
}
}
});
playerThread.start();
play.setImageResource(R.drawable.pause);
} catch (Exception e) {
errorMessage();
}
}
我的onCompletion方法在release()
上调用MediaPlayer
。我暂时评论了它,但它没有改变任何东西。
所以问题是:为什么我的MediaPlayer
会在其他声音播放完毕后停止?它有时甚至会挂起整个应用程序。