You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SoundPool构造器升级为使用SoundPool.Builder?

如何将SoundPool构造器升级为使用SoundPool.Builder?

别担心,我来帮你一步步理清这些问题,顺利把旧的SoundPool代码升级到新的Builder模式~

问题1:旧版的AudioManager.STREAM_MUSIC在新API里对应的设置在哪里?

在旧版的SoundPool构造器中,STREAM_MUSIC是用来指定音频流的类型,而在新的SoundPool.Builder体系里,这个概念被AudioAttributes取代了——你不需要单独设置这个常量,而是通过AudioAttributes.Builder的setUsage()和setContentType()来组合定义音频的用途和类型,系统会自动根据这些属性映射到对应的音频流,完全等价于原来STREAM_MUSIC的效果。

问题2:setUsage(AudioAttributes.USAGE_MEDIA)应该用什么值?

这个要根据你播放的MP3音效的实际用途来选:

  • 如果是游戏内的音效(比如按钮点击、技能触发音):用AudioAttributes.USAGE_GAME更精准
  • 如果是应用界面的交互反馈音(比如弹窗提示、操作确认音):用AudioAttributes.USAGE_ASSISTANCE_SONIFICATION更合适
  • 如果你只是播放普通的媒体类音效,保持USAGE_MEDIA也完全没问题,它和旧版的STREAM_MUSIC场景匹配度很高

问题3:为什么Android Studio不认可.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)?

这个问题大概率是因为你的项目编译SDK版本过低——CONTENT_TYPE_SONIFICATION是在Android 5.0(API 21)才新增的常量,如果你的compileSdkVersion低于21,Android Studio就会报红。

解决办法有两个:

  1. 升级项目的compileSdkVersion到21及以上(推荐,这样能用上更精准的音频属性分类)
  2. 如果需要兼容更低版本,可以换成AudioAttributes.CONTENT_TYPE_MUSIC,它在低版本中也能正常使用,虽然不如SONIFICATION精准,但对于普通MP3音效来说足够用

完整升级示例代码

// 先创建AudioAttributes,根据你的场景调整参数
AudioAttributes audioAttributes = new AudioAttributes.Builder()
    .setUsage(AudioAttributes.USAGE_GAME) // 这里替换成你需要的Usage值
    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) // 确保SDK版本>=21
    .build();

// 构建新的SoundPool
SoundPool mySoundPool = new SoundPool.Builder()
    .setAudioAttributes(audioAttributes)
    .setMaxStreams(3) // 和你旧代码里的3保持一致
    .build();

兼容低版本的写法

如果你的项目需要支持Android 5.0以下的设备,可以加版本判断:

SoundPool mySoundPool;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    AudioAttributes audioAttributes = new AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_GAME)
        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .build();
    mySoundPool = new SoundPool.Builder()
        .setAudioAttributes(audioAttributes)
        .setMaxStreams(3)
        .build();
} else {
    // 低版本继续使用旧构造器
    mySoundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
}

备注:内容来源于stack exchange,提问作者Rewind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:10:29