问题描述
我在媒体播放器类上有一个小问题。 我有一个按钮,按下该按钮将播放声音。 事实是,当我按下按钮与播放声音之间存在一定的延迟,如果我按了太多次,则媒体播放器死亡,那么根本没有声音播放,并且出现以下错误:
ERROR/MediaPlayer(3960): error (-19, 0)
ERROR/AudioTrack(3931): AudioFlinger could not create track, status: -12
ERROR/AudioSink(3931): Unable to create audio track
这是代码:
Button b = (Button)findViewById(R.id.button);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AssetFileDescriptor afd;
try {
afd = getAssets().openFd("bassdrum6.mp3");
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
}
}
});
我不知道这是怎么回事。 我需要协助。
提前致谢。
1楼
可能是因为您要同时创建多个MerdiaPlayer对象(我希望Android API代码应该能够很好地处理此问题)。 无论如何,您可以在代码中建立检查以验证是否已创建mediaplayer。 请参阅一个很好的示例: :
同样,最好扩展您的实现以在Mediaplayer完成工作时释放它。 类似于清理,然后释放对象。
2楼
如果您想在按下按钮时播放触摸式监听器,则需要使用它
Button b = (Button)findViewById(R.id.button);
b.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (global.toggleOnOff == false) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//what you want to happen when they touch the button
}
else if(event.getAction() == MotionEvent.ACTION_UP) {
//what you want to happen when they let go of the button
}
}
return false;
}
});