Android:为什么 SoundPool 的构造函数被弃用了?

2022-09-01 22:38:32

这是否意味着我们不能再使用它了?如果 min API 设置为低于 21,我们应该使用什么?另外,是否可以忽略该警告,因为使用它构建的旧应用程序在新的操作系统上工作?


答案 1

为什么 SoundPool 构造函数被弃用

旧的 SoundPool 构造函数已被弃用,取而代之的是使用 SoundPool.Builder 来构建对象。旧构造函数有三个参数:、 和 。SoundPoolmaxStreamsstreamTypesrcQuality

  • 该参数仍可通过生成器进行设置。(如果未设置,则默认为 1。maxStreams
  • 该参数将替换为 AudioAttributes,后者比 更具描述性。(请参阅从这里开始的不同流类型常量。您可以指定用法(播放声音的原因),内容类型(正在播放的内容)和标志(如何播放)。streamTypestreamTypeAudioAttributes
  • 该参数据说是为了设置采样率转换器的质量。但是,它从未实施过,设置它也没有效果。srcQuality

因此,比旧的构造函数更好,因为不需要显式设置,包含的信息比,并且无用的参数被消除。这就是旧构造函数被弃用的原因。SoundPool.BuildermaxStreamsAudioAttributesstreamTypesrcQuality

使用已弃用的构造函数支持 API 21 之前的版本

如果您愿意,您仍然可以使用旧的构造函数并忽略警告。“已弃用”意味着它仍然有效,但不再是推荐的做事方式。

如果您希望在仍然支持旧版本的同时使用新构造函数,则可以使用语句来选择 API 版本。if

SoundPool mSoundPool;
int mSoundId;

//...

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     mSoundPool = new SoundPool.Builder()
            .setMaxStreams(10)
            .build();
} else {
    mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 1);
}

mSoundId = mSoundPool.load(this, R.raw.somesound, 1);

// ...

mSoundPool.play(mSoundId, 1, 1, 1, 0, 1);

观看此视频了解更多详情。


答案 2

请改用 SoundPool.Builder。SoundPool 的创建方式已更改。我们鼓励您使用新方法。