[英]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.