这是否意味着我们不能再使用它了? 如果min API设置低于21,我们应该使用什么? 此外,是否可以忽略该警告,因为使用它构建的旧应用程序可以在新操作系统上运行?
答案 0 :(得分:28)
旧的SoundPool
constructor已被弃用,转而使用SoundPool.Builder
来构建SoundPool
对象。 old constructor有三个参数:maxStreams
,streamType
和srcQuality
。
maxStreams
参数仍然可以是set with the Builder。 (如果你没有设置它,它默认为1.)streamType
参数被AudioAttributes
取代,后者比streamType
更具描述性。 (请参阅从here开始的不同流类型常量。)使用AudioAttributes
,您可以指定用法(为什么要播放声音),内容类型(你在玩什么),以及标志(如何玩)。 srcQuality
参数用于设置采样率转换器质量。但是,它从未实现过,设置它没有任何效果。因此,SoundPool.Builder
比旧构造函数更好,因为maxStreams
不需要显式设置,AudioAttributes
包含的信息多于streamType
,而且无用srcQuality
1}}参数已被删除。这就是旧构造函数被弃用的原因。
如果您愿意,您仍然可以使用旧构造函数并忽略警告。 "已过时"意味着它仍然有效但不再是推荐的做事方式。
如果您希望在仍支持旧版本的同时使用新构造函数,则可以使用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的方式已更改。我们鼓励您使用新方式。