Ten przewodnik opisuje, jak aplikacje na Wear OS mogą odtwarzać dźwięk za pomocą znanych interfejsów API Androida.
Wykrywanie urządzeń audio
Aplikacja na Wear OS musi najpierw wykryć, czy urządzenie do noszenia ma odpowiednie wyjście audio. Deweloperzy mogą oczekiwać, że urządzenia do noszenia będą miały co najmniej jedno z tych wyjść audio:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: na urządzeniach z wbudowanym głośnikiemAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: gdy zestaw słuchawkowy Bluetooth jest sparowany i połączony.AudioDeviceInfo.TYPE_BLE_BROADCAST
: gdy urządzenie z grupą transmisji Bluetooth Low Energy (BLE) jest sparowane i połączone.AudioDeviceInfo.TYPE_BLE_HEADSET
: gdy zestaw słuchawkowy BLE jest sparowany i połączonyAudioDeviceInfo.TYPE_BLE_SPEAKER
: gdy głośnik BLE jest sparowany i połączony
W przykładzie poniżej aplikacja używa metody getDevices()
w połączeniu z wartością FEATURE_AUDIO_OUTPUT
, aby wyliczyć wszystkie wyjścia audio.
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); fun audioOutputAvailable(type: Int): Boolean { if (!packageManager.hasSystemFeature(PackageManager.FEATURE_AUDIO_OUTPUT)) { return false } return audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS).any { it.type == type } } // True if the device has a speaker audioOutputAvailable(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) // True if a Bluetooth headset is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) // True if a BLE broadcast group device is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) // True if a BLE headset is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) // True if a BLE speaker is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)
Aby zapewnić użytkownikom jak najlepsze wrażenia, aplikacja powinna odtwarzać multimedia tylko wtedy, gdy do zegarka są podłączone słuchawki lub głośniki Bluetooth.
Wybierz preferowane urządzenie do odtwarzania dźwięku
W zależności od przypadku użycia aplikacji i znaczenia dźwięku dla jej podstawowego działania wybierz sposób, w jaki użytkownicy mają korzystać z wyjścia audio aplikacji.
Umożliwianie użytkownikowi wyboru urządzenia wyjściowego multimediów
Od Wear OS 5 system udostępnia interfejs, który pozwala użytkownikom wybrać urządzenie, na którym mają być odtwarzane multimedia, oraz wyświetlać informacje o aktualnie odtwarzanych treściach.
Jeśli aplikacja wykryje, że nie ma podłączonego zestawu słuchawkowego Bluetooth, gdy chcesz odtwarzać dźwięk na urządzeniach z Wear OS 5 lub nowszym, zaproponuj użytkownikowi przejście bezpośrednio do przełącznika wyjścia multimediów. Na urządzeniach, które nie obsługują przełącznika wyjścia multimediów, wywołaj działanie intencji ACTION_BLUETOOTH_SETTINGS
, które przenosi użytkownika na stronę Bluetooth w ustawieniach systemu.
Metoda launchOutputSelection()
, która jest częścią biblioteki Horologist w GitHubie, pokazuje, jak umożliwić użytkownikowi wybór urządzenia wyjściowego.
Zestaw słuchawkowy Bluetooth
W przeciwieństwie do wbudowanych głośników, które są zawsze dostępne, jeśli znajdują się na urządzeniu, zestaw słuchawkowy Bluetooth
może być sparowany lub rozparowany podczas działania aplikacji. Jeśli aplikacja wymaga zestawu słuchawkowego, zarejestruj wywołanie zwrotne, aby wykrywać, kiedy użytkownik podłącza i odłącza zestaw słuchawkowy Bluetooth, używając registerAudioDeviceCallback
:
audioManager.registerAudioDeviceCallback(object : AudioDeviceCallback() { override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesAdded(addedDevices) if (audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)) { // A Bluetooth or BLE device is connected and available for playback. } } override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesRemoved(removedDevices) if (!(audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER))) { // No Bluetooth or BLE devices are connected anymore. } } }, null)
Jeśli aplikacja wykryje, że nie jest podłączony zestaw słuchawkowy Bluetooth, gdy chcesz odtwarzać dźwięk, nie wyświetlaj komunikatu o błędzie. Zamiast tego zaproponuj użytkownikowi przejście bezpośrednio do ustawień Bluetootha, aby ułatwić mu połączenie. Możesz to zrobić, wysyłając intencję z parametrem
ACTION_BLUETOOTH_SETTINGS
:
val intent = with (Intent(Settings.ACTION_BLUETOOTH_SETTINGS)) { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) putExtra("EXTRA_CONNECTION_ONLY", true) putExtra("EXTRA_CLOSE_ON_CONNECT", true) putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 1) } startActivity(intent)
Wbudowane głośniki
Większość urządzeń z Wear OS ma wbudowane głośniki. Jeśli Twoja aplikacja oferuje zastosowanie inne niż multimedialne, które obejmuje dźwięk, możesz użyć głośników, aby zwiększyć zaangażowanie użytkownika. Na przykład urządzenie z Wear OS wyposażone w głośnik może włączać alarm zegara lub minutnika wraz z powiadomieniem dźwiękowym, a aplikacje do fitnessu mogą używać głośnika do przekazywania instrukcji dotyczących ćwiczeń.
Uwaga: wbudowane głośniki nie zapewniają najlepszych wrażeń podczas słuchania treści multimedialnych, ponieważ nie są do tego przeznaczone.
Szczegółowe informacje znajdziesz w WearSpeakerSample.
Odtwórz dźwięk
Po wykryciu i wybraniu odpowiedniego wyjścia audio proces odtwarzania dźwięku na Wear OS jest taki sam jak na urządzeniach mobilnych i innych. Więcej informacji znajdziesz w omówieniu MediaPlayer. Aby łatwiej korzystać z bardziej zaawansowanych funkcji, takich jak przesyłanie strumieniowe i pobieranie multimediów, użyj ExoPlayera. Stosuj sprawdzone metody dotyczące aplikacji audio, takie jak zarządzanie fokusem dźwięku.
Zapobieganie niepożądanemu odtwarzaniu multimediów przez wbudowane głośniki
Aby mieć pewność, że aplikacja nie będzie przypadkowo odtwarzać treści multimedialnych na wbudowanych głośnikach zegarka, deweloperzy aplikacji multimedialnych mogą postępować zgodnie z tymi wskazówkami. Wskazówki różnią się w zależności od odtwarzacza używanego przez aplikację.
ExoPlayer
Jeśli Twoja aplikacja korzysta z ExoPlayera:
Podczas tworzenia instancji ExoPlayera wywołaj funkcję setSuppressPlaybackOnUnsuitableOutput(true):
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
Zareaguj na zdarzenie wstrzymania odtwarzania, rejestrując WearUnsuitableOutputPlaybackSuppressionResolverListener jako detektor instancji ExoPlayer:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Pakiet materiałów dla mediów dotyczących zegarmistrzostwa
Horologist MediaToolkit zawiera już logikę, która zapobiega niezamierzonemu odtwarzaniu multimediów na wbudowanych głośnikach zegarka.
Inne odtwarzacze multimediów
- Upewnij się, że odtwarzanie dźwięku z multimediów nie rozpoczyna się, dopóki do zegarka nie zostanie podłączone odpowiednie urządzenie wyjściowe, np. zestaw słuchawkowy lub głośniki zewnętrzne. Odpowiednie urządzenia wyjściowe dla aplikacji multimedialnych znajdziesz na poniższej liście:
- Wstrzymaj odtwarzanie, jeśli AudioManager powiadomi aplikację, że zewnętrzne urządzenie wyjściowe audio zostało odłączone od zegarka.
- Gdy użytkownik spróbuje rozpocząć odtwarzanie multimediów, ale nie podłączy zewnętrznego urządzenia audio, poproś go o podłączenie takiego urządzenia do zegarka.