簡體   English   中英

Android-MediaPlayer停止播放

[英]Android - MediaPlayer stops playing

我正在創建一個應用程序,您可以在其中搖晃設備並播放聲音。 我一切正常,但是當我長時間搖晃設備(5秒)時,聲音停止播放。 這是我的代碼:

MediaPlayer mp = null;
private void executeShakeAction() {
    Random random = new Random();
    int nextInt = random.nextInt(3);
    if(nextInt == 0) {
        mp = MediaPlayer.create(this, R.raw.cowbell);
    }else if(nextInt == 1){
        mp = MediaPlayer.create(this, R.raw.cowbell1);
    }else{
        mp = MediaPlayer.create(this, R.raw.cowbell3);
    }
    mp.start();
}

如果您經常搖晃設備,則音頻文件沒有時間完成。 這使Android的生活變得如此艱難,以至於最終放棄並停止了游戲。

意見建議:

  • 如果正在播放,請避免創建MediaPlayer的實例,例如

    如果(mp!= null && mp.isPlaying())返回;

  • 使用SoundPool代替MediaPlayer,后者專門用於播放短聲音(而不是音樂或視頻,如MediaPlayer)。

  • 如果您堅持使用MediaPlayer,請一次創建一次,而不要一直重新創建。 這段代碼離完美還很遙遠,但是希望可以做到:

 private final MediaPlayer mp = new MediaPlayer(); private final Random random = new Random(); private static final int[] SoundResIds = {R.raw.cowbell, R.raw.cowbell1, R.raw.cowbell2}; private synchronized void executeShakeAction() { if (!mp.isPlaying()) try { mp.reset(); // Clears mp state int soundResId = SoundResIds[random.nextInt(SoundResIds.length)]; AssetFileDescriptor afd = getResources().openRawResourceFd(soundResId); mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); afd.close(); mp.prepare(); mp.start(); } catch (Exception ex) { ex.printStackTrace(); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM