package me.xiaopan.android.examples.activity.media; import java.util.EnumMap; import me.xiaopan.android.examples.MyBaseActivity; import me.xiaopan.android.examples.R; import android.media.AudioManager; import android.media.SoundPool; import android.os.Build; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; /** * 播放音效 */ public class PlaySoundActivity extends MyBaseActivity { private SoundPool soundPool; private EnumMap<Sound, Integer> soundMap; @Override public void onInitLayout(Bundle savedInstanceState) { setContentView(R.layout.activity_play_sound); } @Override public void onInitListener(Bundle savedInstanceState) { findViewById(R.id.button_playSound_beep).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { play(Sound.BEEP); } }); findViewById(R.id.button_playSound_beep2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { play(Sound.BEEP, 1); } }); findViewById(R.id.button_playSound_stopBeep).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stop(Sound.BEEP); } }); findViewById(R.id.button_playSound_closeDoor).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { play(Sound.CLOSE_DOOR); } }); findViewById(R.id.button_playSound_closeDoor2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { play(Sound.CLOSE_DOOR, 1); } }); findViewById(R.id.button_playSound_stopCloseDoor).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stop(Sound.CLOSE_DOOR); } }); } @Override public void onInitData(Bundle savedInstanceState) { soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100); soundMap = new EnumMap<Sound, Integer>(Sound.class); soundMap.put(Sound.BEEP, soundPool.load(getBaseContext(), R.raw.beep, 100)); soundMap.put(Sound.CLOSE_DOOR, soundPool.load(getBaseContext(), R.raw.close_door, 100)); } private void play(Sound sound, int loop){ Integer soundId = soundMap.get(sound); if(soundId != null){ if(Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR2 && loop > 0){ for(int w = 0; w <= loop; w++){ soundPool.play(soundId, 100, 100, 100, 0, 1); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ soundPool.play(soundId, 100, 100, 100, loop, 1); } } } private void play(Sound sound){ play(sound, 0); } private void stop(Sound sound){ Integer soundId = soundMap.get(sound); if(soundId != null){ soundPool.pause(soundId); } } private enum Sound{ BEEP, CLOSE_DOOR; } @Override protected void onDestroy() { soundPool.release(); super.onDestroy(); } }