获取错误E / MediaPlayer:尝试停止并再次播放声音时出错(1,-19)

时间:2018-03-20 15:49:36

标签: android android-mediaplayer

我有多个按钮,点击它们我想要一个声音。我的代码就像这样

button.setOnClickListener(new Button.OnClickListener() {
          @Override
          public void onClick(View view) {                  
            if(mSound != null && mSound.isPlaying()){
                mSound.stop();
                mSound.reset();
                mSound.release();
                mSound = null;
            }
            mSound = new MediaPlayer();
            mSound = MediaPlayer.create(getApplicationContext(), R.raw.button);
            mSound.start();
            }
        });

在OnCreate中,我已经像这样注册了mSound,

mSound = new MediaPlayer();
mSound = MediaPlayer.create(this, R.raw.button);

我收到错误(1,-19)以及(0,38)。

注意:这不是重复的问题。我尝试了之前提出的所有问题的每个答案,但没有任何效果。

2 个答案:

答案 0 :(得分:1)

根据docs故障由于几个原因发生,主要是

  

未能调用release()

建议您抓住错误并恢复。

  

某些播放控制操作可能由于各种原因而失败,例如   作为不支持的音频/视频格式,交错的音频/视频,   分辨率太高,流超时等。因此,错误   报告和恢复是这些问题下的一个重要问题   情况。

尝试使用此answer或其他更好的方法来捕获错误。或者尝试以下代码,在内存中释放对象。

mSound = MediaPlayer.create(getApplicationContext(), R.raw.button);
mSound.start();

mSound.setOnCompletionListener(new OnCompletionListener() {
    public void onCompletion(MediaPlayer mp) {
        mp.release();

    };
});

答案 1 :(得分:0)

我反复播放一些音频文件时遇到相同的错误。 我正在制作一本简单的英语到法语短语书,有8个按钮用于8个常用短语,音频文件很小。 在密切监视日志时,我发现代码缓存的增量存在一些限制。 在一段时间后反复播放音频后,我得到了以下提示:

2019-12-10 12:37:32.561 29888-29893/com.example.gridlayout I/zygote: Do partial code cache collection, code=22KB, data=30KB
2019-12-10 12:37:32.567 29888-29893/com.example.gridlayout I/zygote: After code cache collection, code=22KB, data=30KB
2019-12-10 12:37:32.567 29888-29893/com.example.gridlayout I/zygote: Increasing code cache capacity to 128KB

再重复一遍,我得到了:

2019-12-10 12:37:46.008 29888-29893/com.example.gridlayout I/zygote: Do partial code cache collection, code=53KB, data=57KB
2019-12-10 12:37:46.009 29888-29893/com.example.gridlayout I/zygote: After code cache collection, code=53KB, data=57KB
2019-12-10 12:37:46.009 29888-29893/com.example.gridlayout I/zygote: Increasing code cache capacity to 256KB

在做更多的事情上,我得到了:

2019-12-10 12:38:23.596 29888-29905/com.example.gridlayout E/MediaPlayerNative: error (1, -19)
2019-12-10 12:38:23.596 29888-29888/com.example.gridlayout E/MediaPlayer: Error (1,-19)

我通过耐心等待短音频完成然后再次播放来重复此操作,以确保不会由于同时反复播放而增加缓存。

我的推断是,要运行巨大的音频文件,需要增加代码缓存,它会在一定程度上自动执行并在超出限制后发出错误(在我的情况下为256KB)。十分确定可以以某种方式增加缓存...

我在手机上进行了鲁棒性测试,效果很好,我猜在手机中,它们在完成后会自动清除缓存。 尝试在移动设备而不是模拟器上运行您的应用程序。

我的结论:代码缓存限制了声音播放的性能。要么增加代码缓存的限制(我尝试了浅表搜索,找不到了,但是搜索正确,我想您会在某个地方找到它),或者尝试直接在您的移动设备上运行它。