[故障及解决]SoundPool没有声音,尤其是首次

2021-07-20  本文已影响0人  中v中

问题描述:

使用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);
}
上一篇 下一篇

猜你喜欢

热点阅读