Как получать изменения объема событий для типа потока голоса (в режиме "звонок" )?

Я пытаюсь зарегистрировать широковещательный приемник для обработки события VOLUME_CHANGED_ACTION, только для типа потока volume_voice (который я эмпирически рассматриваю как индекс 0 в Settings.System.VOLUME_SETTINGS).

Метка EXTRA_VOLUME_STREAM_TYPE скрыта, поэтому я использовал явную строку "android.media.EXTRA_VOLUME_STREAM_TYPE". Все это отлично работало на Android 2.3.4 (получилось значение 0 для volume_voice, как ожидалось), но на 2.3.5 значение, которое это лишнее, имеет значение 10, которое дает ArrayIndexOutOfBoundsException на Settings.System.VOLUME_SETTINGS. Более того, я вижу, что volume_voice остается индексом 0 в Settings.System.VOLUME_SETTINGS.

Существует ли более надежный способ обработки типов потоков VOLUME_CHANGED_ACTION для volume_voice?

Изменить или любой другой способ сделать то, что запрашивает название?

Ответ 1

Моим временным (и, вероятно, плохим) решением является захват ArrayIndexOutOfBoundsException, а в блоке catch для проверки типа потока значение Settings.System.VOLUME_SETTINGS.length.

Это лучшее, что у меня есть до сих пор. Я не знаю, может ли он поймать другие типы потоков, а также, если он будет работать с другими версиями Android, чем 2.3.3-2.3.5.

Ответ 2

Я пытаюсь зарегистрировать широковещательный приемник для обработки события VOLUME_CHANGED_ACTION

В Android SDK нет VOLUME_CHANGED_ACTION.

Ярлык EXTRA_VOLUME_STREAM_TYPE скрыт, поэтому я использовал явную строку "android.media.EXTRA_VOLUME_STREAM_TYPE".

В Android SDK нет EXTRA_VOLUME_STREAM_TYPE.

Существует ли более надежный способ обработки VOLUME_CHANGED_ACTION для типов потоков volume_voice?

В Android SDK нет VOLUME_CHANGED_ACTION.

Независимо от того, что вы пытаетесь сделать, это недокументированный, неподдерживаемый, возможно, не работает в какой-либо конкретной версии Android (прошлое/настоящее/будущее) и может не работать на каком-либо данном устройстве (так как производители могут изменять все, что отсутствует в SDK). Он никогда не будет "прочным" по определению.