setSpeakerphoneOn() не работает на 2.1, работает на 2.3

Мне нужно воспроизвести звук через динамик. Я использую AudioTrack для воспроизведения звука на устройстве. и аудиорежим установлен как STREAM_VOICE_CALL. Также в моей деятельности громкая связь отключается:

AudioManager am;            
am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setSpeakerphoneOn(false);

Кажется, это отлично работает на устройствах 2.3. Но на 2.1 звук все равно воспроизводится из динамика.

В качестве исправления я попытался использовать setMode() как:

am.setMode(AudioManager.MODE_IN_CALL);

При этом звук через динамик воспроизводился на 2.1 и 2.3, но чаще всего не воспроизводился вообще на 2.3. Кроме того, я читал в некоторых местах, что setMode() не должен использоваться приложениями, поскольку он влияет на общесистемное состояние телефона. здесь: http://code.google.com/p/sipdroid/issues/detail?id=270

Любая помощь?


person Alabhya    schedule 19.04.2012    source источник


Ответы (1)


Ниже 2.3 Android немного глючил с setSpeakerPhoneOn(). Согласно этому ответу, я думаю, вам нужно будет использовать оба метода API.

Что касается звука 2.3, который вообще не воспроизводится, проверьте настройки громкости во время разговора (это то, что будет использоваться). Попробуйте также отслеживать состояние телефона до использования setMode(), возможно, вернув его к MODE_NORMAL, как только менеджер аудио больше не будет использоваться.

person John Leehey    schedule 19.04.2012
comment
Я вернул его в MODE_NORMAL. еще вопрос. Я думаю, мне придется жить с приложением 2.3+ или глючным на 2.1. setmode() вообще не рекомендуется для таких приложений (проверьте ссылку в моем вопросе редактирования) - person Alabhya; 19.04.2012
comment
Поскольку методы маршрутизации устарели, я не думаю, что есть какое-либо другое решение, если только вы не используете их специально для 2.2-. Кстати, это может быть ошибка телефона, который вы используете, например, неполный аудиодрайвер или что-то в этом роде. - person John Leehey; 19.04.2012