在开发中遇到了需要播放小音频的需求,第一时间想到了soundpool 但是遇到了两个坑,现在把解决方法分享给大家
1.soundpool加载以后,但是播放没有声音
@Override public void speak(Object content) { SoundPool mSoundPool = new
SoundPool(5, AudioManager.STREAM_ALARM, 5); int soundID = mSoundPool.load(
mContext,(Integer) content, Integer.MAX_VALUE); mSoundPool.play(soundID, 0.6f,
0.6f, 1, 0, 1); } 最后查阅api找到了问题所在, SoundPool提供了一个监听加载资源完成的回调public void
setOnLoadCompleteListener(OnLoadCompleteListener listener)只需要在这个回调中播放声音就好啦:
@Override public void speak(Object content) { SoundPool mSoundPool= new
SoundPool(5, AudioManager.STREAM_ALARM, 5); final int soundID = mSoundPool.load(
mContext,(Integer) content, Integer.MAX_VALUE);
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override public void onLoadComplete(SoundPool soundPool, int sampleId, int
status) { mSoundPool.play(soundID, 0.6f, 0.6f, 1, 0, 1); } }); }
2.多次stop/pause停不下来
这个问题的坑在于每次播放soundPool.play(soundID, 0.6f, 0.6f, 1, 0, 1);以后在回调中的那个soundID就会改变:
` public final int play(int soundID, float leftVolume, float rightVolume,int
priority, int loop, float rate)` 尝试重新声明一个变量playId
来存放返回值,保证每次都是对同一个soundpool进行操作暂停和播放这样就解决问题了 playId= soundPool.play(ringId,
0.1f, 0.1f, 1, -1, 1); 在需要暂停的时候传这个playId

技术
©2019-2020 Toolsou All rights reserved,
中国移动科普:为什么手机移动网络要叫 “蜂窝移动网络”C语言---------俄罗斯方块(源代码)javascript事件(零基础详解)python实现vlookup_干货一:怎么在python里面实现vlookupC语言中数据的存储List集合中的常见面试题以及简单思路第十一届蓝桥杯python大学组国赛真题计算机科班出身和培训出身有什么区别?Java开发2020年最新常见面试题整理仿抖音小球刷新进度条(两个小球转动),代码很简单