当前位置: 代码迷 >> Android >> 媒体播放器死于Android
  详细解决方案

媒体播放器死于Android

热度:95   发布时间:2023-08-04 12:51:08.0

我在媒体播放器类上有一个小问题。 我有一个按钮,按下该按钮将播放声音。 事实是,当我按下按钮与播放声音之间存在一定的延迟,如果我按了太多次,则媒体播放器死亡,那么根本没有声音播放,并且出现以下错误:

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();
                }
            }
        });

我不知道这是怎么回事。 我需要协助。

提前致谢。

可能是因为您要同时创建多个MerdiaPlayer对象(我希望Android API代码应该能够很好地处理此问题)。 无论如何,您可以在代码中建立检查以验证是否已创建mediaplayer。 请参阅一个很好的示例: :

同样,最好扩展您的实现以在Mediaplayer完成工作时释放它。 类似于清理,然后释放对象。

如果您想在按下按钮时播放触摸式监听器,则需要使用它

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;
    }
});
  相关解决方案