obsługi audio na Androida będzie dość straszne na chwilę. Interfejsy API są dość dziwne, słabo udokumentowane i ciągle się zmieniają/wycofują/zrywają między wersjami. Nawet kod AudioManager
ma w sobie FIXME.
W systemie Android dostępnych jest kilka typów strumieni (muzyka, powiadomienia, połączenia telefoniczne itp.), A aplikacje służą do wyboru odpowiedniego do odtwarzania. Wyobrażam sobie, że większość aplikacji na Androida powinna używać muzyki/mediów (STREAM_TYPE_MUSIC
). Ustawiono to na swoim MediaPlayer
przy użyciu metody setAudioStreamType
.
SDK nie pozwala na ustawienie pojedynczego strumienia typ jako solowy — powodując wszystkie inne strumienie być wyciszony — ale nie wierzę, można zidentyfikować dźwięku odtwarzanego przez poszczególne aplikacje i jakoś wstrzymać/wznawiają to. aplikacje muzyczne w ogóle użyje PhoneStateListener
, aby wstrzymać się po nadejściu połączenia.
Więc w twoim przypadku można „pożyczyć” strumień telefon do swojej MediaPlayer
i użyć wywołanie metody AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true)
kiedy rozpoczyna odtwarzanie, a następnie un -solo strumień z false
po zakończeniu odtwarzania lub po wykonaniu Activity
.
mogę powiedzieć, że to działa, ale nie mogę sobie przypomnieć, czy bezceremonialny musisz też ustawić tryb dźwięku do MODE_IN_CALL
przy użyciu strumienia połączeń głosowych (tak: AudioManager.setMode(AudioManager.MODE_IN_CALL)
). Jeśli okaże się to konieczne, musisz upewnić się, że po zakończeniu odtwarzania przywrócisz tryb do MODE_NORMAL
, w przeciwnym razie, gdy naciśniesz klawisze głośności, usłyszysz "Głośność podczas połączenia"! Jednak, czy i kiedy chcesz zmieniać z powrotem do MODE_NORMAL
, należy sprawdzić, czy prawdziwa rozmowa telefoniczna nie dzieje się w tym czasie ...
Być może można użyć innego rodzaju strumienia zamiast jednego połączenia głosowego, ale mówię tylko z doświadczenia w pracy nad aplikacją, która może korzystać z głośnika lub słuchawki do odtwarzania dźwięku, który wymaga użycia strumienia połączenia głosowego.
Tak jak mówiłem, obsługa audio nie jest szczególnie zabawne ...;)
Thanks Christophera, twoja rada była na miejscu. W rzeczywistości porwałem STREAM_ALARM, który pasuje do mojego celu, ustawiłem go na solo, a to przynosi pożądany efekt. Dzięki jeszcze raz. –
Ups, niezbyt dobry pomysł, przynajmniej nie ze słuchawkami. Wróć do VOICE_CALL. Wydaje się, że nie potrzebujesz MODE_IN_CALL, przynajmniej nie do tej pory. –