在开发中遇到了需要播放小音频的需求,第一时间想到了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,
Java中的lambda表达式如何理解——精简html+css+js制作简单网站首页java作业VHDL——4选1数据选择器C++OpenCV实战——车牌去雾、车牌检测、分割JAVA阶段考内容知识点的梳理计算机组成原理的简单学习java连接数据库实现基本的增删改查2022年第十三届蓝桥杯题解(全)3 4j不是合法的python表达式_3+4j不是合法的Python表达式。