Означает ли это, что мы больше не можем его использовать? Что следует использовать, если минимальный API установлен ниже 21? Кроме того, можно ли игнорировать предупреждение, поскольку старые приложения, созданные с использованием его, работают над новыми ОС?
Android: Почему конструктор для SoundPool не рекомендуется?
Ответ 1
Почему конструктор SoundPool устарел
Старый конструктор SoundPool
был устарел в пользу использования SoundPool.Builder
, чтобы создать объект SoundPool
. старый конструктор имел три параметра: maxStreams
, streamType
и srcQuality
.
- Параметр
maxStreams
может быть установлен с помощью Builder. (И если вы не установите его, по умолчанию он равен 1.) - Параметр
streamType
заменяется наAudioAttributes
, который более описателен, чемstreamType
. (См. Различные константы типа потока, начиная с здесь.) С помощьюAudioAttributes
вы можете указать использование (почему вы играете звук), контент тип (что вы играете) и флаги (как играть в нее). - Предполагалось, что параметр
srcQuality
должен установить качество преобразователя частоты дискретизации. Однако он никогда не был реализован, и установка его не имела никакого эффекта.
Таким образом, SoundPool.Builder
лучше старого конструктора, потому что maxStreams
не нужно явно устанавливать, AudioAttributes
содержит больше информации, чем streamType
, и бесполезный параметр srcQuality
был устранен. Вот почему старый конструктор устарел.
Использование устаревшего конструктора для поддержки версий до 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);
Смотрите это видео для более подробной информации.
Ответ 2
Используйте SoundPool.Builder
. Был изменен способ создания SoundPool. Вам предлагается использовать новый способ.