每次用户按下一个按钮时,我需要播放相同的短wav文件(1秒)。我有以下代码,适用于大约30次点击,然后应用程序“强制关闭”在设备上。我认为正在发生的是媒体播放器的新实例正在创建,然后实例建立(大约30次点击)并且应用程序崩溃。所以我然后添加了“发布”实例,希望按下按钮点击wav会播放,然后媒体播放器将被释放。但是,它不会那样工作。使用mp.release()没有播放声音,因为medaiplayer很快就会释放,让用户听到声音?
任何人都有一个很好的建议,以帮助我让这个工作?非常感谢你们。
按钮button2 =(按钮)findViewById(R.id.button10); button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
// Perform action on click
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker);
mp.start();
mp.release();
答案 0 :(得分:1)
它的简单只需创建一次MediaPlayer,并随着时间的推移播放。
private MediaPlayer mp;
public void onClick(View v) {
// Perform action on click
if (mp == null){
mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker);
}
mp.start();
}
答案 1 :(得分:1)
为什么使用MediaPlayer,SoundPool更适合小型音频文件?作为基础,你可以使用它:
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 70);
final HashMap<Integer, Integer> soundPoolMap = new HashMap<Integer, Integer>();
final int soundID = 4;
soundPoolMap.put(soundID, soundPool.load(this, R.raw.wav_sound, 4));
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener()
{
public void onLoadComplete(SoundPool soundPool, int sampleId, int status)
{
if (sampleId == 4)
{
soundPool.play(4, 50, 50, 1, 0, 1f);
}
}
});
答案 2 :(得分:0)
以下是可行的简单解决方案
MediaPlayer mp;
mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker);
public void onClick(View v) {
// Perform action on click
if(mp.isPlaying())
{
mp.stop();
mp.reset();
mp.release();
}
mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker);
mp.start();
这将检查媒体播放器是否已经播放..如果播放器已经播放,它将停止并释放它,然后初始化该媒体播放器(mp)对象并启动媒体播放器。
如果没有播放,它将在if语句后执行代码,并在初始化mediaplayer对象后启动媒体播放器(在本例中为mp)
要了解有关MediaPlayer的更多信息,请参阅http://developer.android.com/reference/android/media/MediaPlayer.html。研究Mediaplayer生命周期