Есть ли эквивалентная функция requestAudioFocus в Android API уровня 7? - PullRequest
4 голосов
/ 10 февраля 2012

Мое приложение Android должно поддерживать платформу Android 2.1.x (уровень Android API 7). Мне нужно использовать методы requestAudioFocus() и abandonAudioFocus(), чтобы приостановить воспроизведение других приложений (например, музыки), когда мое приложение начинает воспроизведение мультимедиа, и возобновить их после остановки приложения.

Однако эти две функции доступны только на уровне API 8 и выше. Каковы эквивалентные функции на уровне API 7? Или как сделать это до уровня API 8?

1 Ответ

1 голос
/ 08 октября 2012

Спасибо Кристоферу (http://stackoverflow.com/questions/1993471/android-can-i-mute-currently-playing-audio-applications), Я цитирую:

Обработка звука на Android будет довольно ужасной на некоторое время. API-интерфейсы довольно странные, плохо документированы и постоянно меняются / осуждаются / ломаютсямежду версиями. Даже в коде AudioManager есть FIXME.

В любом случае, в Android есть несколько типов потоков (музыка, уведомления, телефонные звонки и т. д.), и приложения предназначены для выбора подходящего для воспроизведения.Я полагаю, что большинство приложений Android должны использовать тип музыки / мультимедиа (STREAM_TYPE_MUSIC). Вы устанавливаете это на своем MediaPlayer с помощью метода setAudioStreamType.

SDK действительно позволяет вам установить отдельный тип потока как одиночный - вызывающийвсе остальные потоки должны быть приглушены - но я не верю, что вы можете определить звук, воспроизводимый определенными приложениями, и каким-то образом приостановить / отменить его. Музыкальные приложения обычно используют PhoneStateListener, чтобы приостановить себя при поступлении вызова.

Так что в вашем случае вы могли бы«заимствовать» поток телефонных звонков для вашего MediaPlayer и использовать вызов метода AudioManager.setStreamSolo (AudioManager.STREAM_VOICE_CALL, true), когда начинается воспроизведение, а затем отсоединить поток от false при воспроизведении или выполнении Activity.

Я могу сказать вам, что это работает, но я не могу вспомнить, нужно ли вам также устанавливать аудио режим MODE_IN_CALL при использовании потока голосовых вызовов (например, AudioManager.setMode (AudioManager.MODE_IN_CALL)).Если вы обнаружите, что это необходимо, то вам нужно убедиться, что вы вернете режим в MODE_NORMAL после завершения воспроизведения, в противном случае, когда вы нажимаете жесткие клавиши регулировки громкости, он говорит «Громкость во время разговора»!Однако, если и когда вы захотите вернуться обратно к MODE_NORMAL, вы должны убедиться, что в это время подлинный телефонный звонок не происходит ...

Возможно, вы могли бы использовать другой тип потока, а не голосовой вызоводин, но я просто говорю из опыта работы с приложением, которое может использовать либо громкую связь, либо динамик для воспроизведения звука, для которого требуется использование потока голосовых вызовов.

Как я уже говорил, обработка звука нене особенно весело ...;)

...