2015-03-08 2 views
1

Я пытаюсь воспроизвести радиопоток с типом носителя STREAM_ALARM и изменить его громкость с помощью аппаратных кнопок.Android: управление громкостью STREAM_ALARM с помощью аппаратных клавиш

Это должно быть STREAM_ALARM, потому что на самом деле это сигнал тревоги: он должен воспроизводить динамики, даже если наушники подключены и/или телефон настроен на молчание.

Я ищу реализацию, которая всегда работает, независимо от того, в какой активности находится пользователь (так что она также должна работать, например, на рабочем столе). Я знаю, что могу переопределить OnKeyUp/вниз, но это работает только в моей деятельности)

Вот что я делаю сейчас (упрощенный код)

audioMgr.requestAudioFocus(
    afChangeListener, 
    AudioManager.STREAM_ALARM, 
    AudioManager.AUDIOFOCUS_GAIN 
); 

if (mp!=null) { mp.release(); mp = null;} 
mp = new MediaPlayer(); 
mp.setDataSource(streamUrl); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.setOnPreparedListener(onPreparedListener); 
mp.prepareAsync(); 

А потом, когда onPreparedListener пожары:

mp.start(); 

Но когда я нажимаю кнопки регулировки громкости на моем телефоне, он меняет уровень громкости, а не сигнал тревоги (протестирован с Android 4.4 и 5.0).

Документация для Android гласит следующее. крыло:

«По умолчанию нажатие регуляторов громкости изменяет громкость активного аудиопотока».

Источник: http://developer.android.com/training/managing-audio/volume-playback.html#HardwareVolumeKeys

Так что я думаю, вопрос: как я (правильно) установить STREAM_ALARM в качестве активного аудио потока?

Или я делаю что-то неправильно?

Заранее благодарен!

UPDATE: Я сообщил об этом как об ошибке на AOSP Bug Tracker и поступил .. поэтому я предполагаю, что это на самом деле должны работать, как я описал выше, но это не делает: S

Ссылка: https://code.google.com/p/android/issues/detail?id=183843

ответ

0

Чтобы ответить на мой вопрос: выясняется, что Google считает, что аппаратные кнопки громкости всегда контролируют «то, что вы слышите», за исключением случаев, когда это сигнал тревоги. THEN вам нужно войти в приложение и использовать кнопки регулировки громкости:

Клавиши громкости никогда не регулируют громкость потока сообщений по умолчанию. Они работают в приложении часов или когда ползунок громкости сигнала тревоги активен на панели громкости.

Приложение должно вызвать Activity.setVolumeControlStream() с потоком ТРЕВОГА иметь объем клавиши управления громкость Тревожный поток

Статус: WorkingAsIntended

https://code.google.com/p/android/issues/detail?id=183843

Так что я не делаю ничего плохого, это дизайн, что Android ведет себя непоследовательным, когда дело доходит до управления звуком с помощью кнопок регулировки громкости. От. Дизайн. :(

0

Отменить действие onKeyDown(). Ищите кнопки регулировки громкости. Когда это произойдет, установите новый том через setStreamVolume.

+0

Спасибо, но это работает только тогда, когда пользователь находится в моем приложении. Он также должен работать, когда пользователь находится в другом приложении, на рабочем столе и т. Д. – REJH

+0

Тогда я предлагаю играть через поток MEDIA. over ALARM? –

+1

Потому что это сигнал тревоги :) Он всегда должен воспроизводить динамики, даже если наушники подключены или телефон отключен. – REJH

0

Если пользователь находится в вашей деятельности и с помощью аппаратных ключей добавить:

setVolumeControlStream(AudioManager.STREAM_ALARM); 

и поток сигнализации будет контролироваться.

+0

Я знаю, но поскольку вы можете читать в OP, я ищу решение, которое работает даже тогда, когда пользователь не работает. На самом деле, мне бы очень хотелось, чтобы Android просто «понимал», что играет поток сигналов тревоги, и кнопки громкости должны управлять этим (но каким-то образом он по умолчанию использует поток мультимедиа в моем случае). – REJH

Смежные вопросы