Воспроизведение звука через динамики при воспроизведении музыки через наушники

У меня есть AudioTrack Потоковое через наушники. Я должен отправить SoundPool только встроенные динамики, не прерывая AudioTrack играть через наушники. Любые хаки гангстеры?

1 ответ

Решение

Многие устройства Android используют один выходной поток в AudioFlinger / audio HAL для всего локального воспроизведения (наушник, динамик, проводная гарнитура / наушники), что делает невозможной одновременную маршрутизацию двух дорожек (вот почему на многих устройствах мультимедийные потоки принудительно отключаются если воспроизводится уведомление, и у вас подключена проводная гарнитура, иначе вы услышите музыку в громкоговорителе во время воспроизведения уведомления).

На некоторых устройствах может быть возможно сделать то, что вы ищете, если вам удастся сделать setForceUse(FOR_MEDIA, FORCE_SPEAKER) и использовать MUSIC тип потока для материала, который вы хотите воспроизвести в динамике, и VOICE_CALL Тип потока для материала, который вы хотите воспроизвести в проводной гарнитуре.
Я не уверен, есть ли способ для приложения, чтобы выполнить это setForceUse позвони хоть. Возможно, вы можете получить на handleMessage метод AudioService класс через отражение и отправить его MSG_SET_FORCE_USE сообщение.. Я никогда не пробовал сам, так что это может с треском провалиться.

РЕДАКТИРОВАТЬ: Сейчас я протестировал способ setForceUse для принудительной передачи потоков MEDIA в громкоговоритель, когда проводная гарнитура подключена к реальному устройству, и он работает (хотя я не могу гарантировать, что он будет работать на всех устройствах). Реализация немного отличалась от того, что я описал выше. Смотрите мой ответ о том, как программно включить / выключить динамик в Android 4.0 для кода, который я использовал.

Другие вопросы по тегам