Android:为什么SoundPool的构造函数不推荐使用?

时间:2016-08-27 17:58:54

标签: java android audio constructor deprecated

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

2 个答案:

答案 0 :(得分:28)

为什么不推荐使用SoundPool构造函数

旧的SoundPool constructor已被弃用,转而使用SoundPool.Builder来构建SoundPool对象。 old constructor有三个参数:maxStreamsstreamTypesrcQuality

  • maxStreams参数仍然可以是set with the Builder。 (如果你没有设置它,它默认为1.)
  • streamType参数被AudioAttributes取代,后者比streamType更具描述性。 (请参阅从here开始的不同流类型常量。)使用AudioAttributes,您可以指定用法(为什么要播放声音),内容类型(你在玩什么),以及标志(如何玩)。
  • 假设srcQuality参数用于设置采样率转换器质量。但是,它从未实现过,设置它没有任何效果。

因此,SoundPool.Builder比旧构造函数更好,因为maxStreams不需要显式设置,AudioAttributes包含的信息多于streamType,而且无用srcQuality 1}}参数已被删除。这就是旧构造函数被弃用的原因。

使用不推荐使用的构造函数来支持API 21之前的版本

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

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

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);

观看this video了解详情。

答案 1 :(得分:3)

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