使用soundpool时发现,如果在soundpool.load后直接使用soundpool.play会出现播放不了的情况,因为soundpool.load是异步的,会立即返回,导致调用play的时候,资源可能还没加载完成,而无法正常播放出声音,简单的方法是加个sleep
如何知道SoundPool加载声音文件完成,可以开始播放?
在setOnLoadCompleteListener中处理即可。
soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int i, int i1) {
soundPool.play(soundid, 1, 1, 0, -1, 1);
}
});
soundid = soundPool.load(this, R.raw.crane, 1);