【问题标题】:MediaPlayer stops playing anythingMediaPlayer 停止播放任何内容
【发布时间】:2017-01-20 08:22:42
【问题描述】:

我有一个游戏,我为每个声音使用单独的 MediaPlayer

这里是:

public class SoundSample {
    public final static String CORRECT="sounds/correct.wav";
    public final static String PASS="sounds/pass.wav";
    public final static String CLOCK_OUT="sounds/clock_out.mp3";
    public final static String ALARM="sounds/alarm.mp3";
    public final static String COUNTDOWN_TO_START="sounds/countdown_to_start.mp3";
    public final static String GO="sounds/go.mp3";
    private String assetFile;

    private MediaPlayer mediaPlayer;

    public SoundSample(String sound){
        assetFile = sound;
        try {
        AssetFileDescriptor afd = MainActivity.activity.getAssets().openFd(sound);
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

            mediaPlayer.prepare();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void play(){
        if (mediaPlayer.isPlaying()){
            mediaPlayer.stop();
        }
        mediaPlayer.start();
    }

    public void release(){
        mediaPlayer.release();
        mediaPlayer.reset();
        mediaPlayer = null;
    }

}

所以,我用

correctSound = new SoundSample(SoundSample.CORRECT);

然后 correctSound.play();

因此,在第二次使用时,它会停止在许多手机上播放,并且不再播放。我的意思是,调试器显示mediaPlayer.start(); 已执行,但声音不再播放。 不过,它在我测试的每部 Android 6 手机上都运行良好,所以它可能只是一个 android 6- 或 5- 问题

有什么办法可以纠正这个问题吗?我知道我可以使用 SoundPool,但它也有一些问题

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

    你必须重新创建媒体播放器,尝试如下

        if (mediaPlayer.isPlaying()) {
               mediaPlayer.reset();
                mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.yourAudio);
            }
    
      mediaPlayer.start();
    

    【讨论】:

    • 哦,你是说,每次都设置数据源?这不是 .. 对于快速的声音来说工作量太大了吗?
    • 没错。我只是想补充一下这个答案。 @user2976267 你真的需要MediaPlayer 吗?拥有许多单独的MediaPlayers 对系统来说会很重。如果你的声音很小,你可以使用SoundPool来处理很多小的声音文件。
    • @user2976267 阅读此stackoverflow.com/questions/13527134/…(Elvis Popovic 的回答)
    • 对不起,这个答案没有帮助。重新创建媒体播放器并没有做到这一点。在我看来,我将不得不使用 SoundPools
    • 尝试在 res 文件夹下创建一个名为 raw 的文件夹,在其中添加您的音频文件。并在R.raw.yourAudio 处提供您的音频文件名,不带扩展名并检查是否工作
    【解决方案2】:

    尝试添加代码 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 2013-01-19
      • 1970-01-01
      相关资源
      最近更新 更多