问题描述:
使用SoundPool类进行播放声音时,在手机上没有声音。
问题代码:
/**
* 声音播放
*/
private void playSound() {
SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);
soundPool.load(this, R.raw.beep, 1); // 加载资源,返回1
soundPool.play(1, 1, 1, 0, 0, 1); // 播放,返回0
}
问题原因:
SoundPool池加载声音,在调用load方法的时候,是使用其他线程来加载资源的,所以上述代码在执行play方法的时候,资源还没有加载,故没有声音。
修改方法,就是中间留出足够的时间来进行加载声音文件,或追加加载完成的监听器来监听是否完成(SoundPool.OnLoadCompleteListener类的方法onLoadComplete(SoundPool soundPool, int sampleId, int status) )。
正确代码:
因为声音文件很小,所以就在onCreate方法中加载文件,后面进行播放。
private SoundPool soundPool; // 声音加载池
protected void onCreate(Bundle savedInstanceState) {
// 门声音预加载
soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);
soundPool.load(this, R.raw.beep, 1);
}
/**
* 声音播放
*/
private void playSound() {
soundPool.play(1, 1, 1, 0, 0, 1);
}
网友评论