Z tego przewodnika dowiesz się, jak aplikacje na Wear OS mogą odtwarzać dźwięk przy użyciu 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 1 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 sparowane i połączone jest urządzenie grupy komunikatów Bluetooth Low Energy (BLE).AudioDeviceInfo.TYPE_BLE_HEADSET
: gdy zestaw słuchawkowy BLE jest sparowany i podłączony.AudioDeviceInfo.TYPE_BLE_SPEAKER
: gdy głośnik BLE jest sparowany i podłączony.
W poniższym przykładzie aplikacja używa funkcji
getDevices()
w połączeniu z wartością FEATURE_AUDIO_OUTPUT
w celu wyliczenia wszystkich dźwięków
dane wyjściowe.
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 przez Bluetooth z zegarkiem są podłączone słuchawki lub głośniki.
Wybierz preferowane urządzenie wyjściowe audio
W zależności od przypadku użycia i znaczenia dźwięku dla jej podstawowego działania wybierz sposób, w jaki użytkownicy mają korzystać z wyjścia audio aplikacji.
Zezwalaj użytkownikowi na wybór wyjściowego urządzenia multimedialnego
Począwszy od Wear OS 5, system ma interfejs, który pozwala użytkownikom urządzenie powinno odtwarzać multimedia i wyświetlać informacje o obecnie odtwarzanych multimediach treści.
Jeśli aplikacja wykryje, że w danym momencie nie ma połączonego zestawu słuchawkowego Bluetooth
aby umożliwić odtwarzanie dźwięku na urządzeniach z Wear OS 5 lub nowszym, zaoferuj
bezpośrednio użytkownika do przełącznika wyjścia multimediów. Na urządzeniach, które nie obsługują
przełącznik wyjścia multimediów, wywoływanie intencji ACTION_BLUETOOTH_SETTINGS
Działanie, które przenosi użytkownika na stronę Bluetooth w ustawieniach systemu.
Metoda launchOutputSelection()
z biblioteki Horologist
w serwisie GitHub, pokazuje, jak umożliwić użytkownikowi wybór urządzenia wyjściowego multimediów.
Zestaw słuchawkowy Bluetooth
W przeciwieństwie do wbudowanych głośników, które są zawsze dostępne, jeśli są zainstalowane w urządzeniu, zestaw słuchawkowy Bluetooth
które można sparować lub rozparować podczas działania aplikacji. Jeśli aplikacja wymaga zestawu słuchawkowego, aby kontynuować,
Zarejestruj wywołanie zwrotne, aby wykryć, kiedy
użytkownik łączy i odłącza zestaw słuchawkowy Bluetooth za pomocą
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 ma połączonego zestawu słuchawkowego Bluetooth, aby włączyć dźwięk
nie pokazuj komunikatu o błędzie. Zamiast tego zaproponuj przekierowanie użytkownika bezpośrednio do ustawień Bluetooth
aby ułatwić im nawiązywanie kontaktu. Możesz to zrobić, wysyłając intencję z
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)
Głośniki
Większość urządzeń z Wear OS ma głośniki. Jeśli aplikacja ma zastosowanie niemultimedialne, ale obejmuje dźwięku, rozważ użycie głośników, aby zwiększyć zaangażowanie użytkownika. Dla: na przykład urządzenie z Wear OS wyposażone w głośnik może uruchomić budzik lub budzik, zawierający: powiadomienia dźwiękowe i aplikacje do fitnessu mogą korzystać z głośnika, aby przekazywać instrukcje dotyczące ćwiczeń.
Uwaga: głośniki nie zapewniają najlepszych wrażeń podczas słuchania multimediów ponieważ nie zostały stworzone w tym celu.
Zapoznaj się z WearSpeakerSample znajdziesz.
Odtwórz dźwięk
Gdy znajdziesz i wybierzesz odpowiednie wyjście audio, odtwarzanie dźwięku na Wear OS będzie takie samo tak jak na komórkach i innych urządzeniach. Więcej informacji znajdziesz w omówieniu odtwarzacza MediaPlayer. Aby łatwiej uzyskać dostęp do bardziej zaawansowanych funkcji, takich jak strumieniowanie i pobieranie multimediów, użyj funkcji ExoPlayer, Stosuj sprawdzone metody dotyczące aplikacji audio, takie jak Zarządzanie ostrością audio.
Zapobiegaj niezamierzonemu odtwarzaniu multimediów przez głośniki
W przypadku aplikacji do multimediów postępuj zgodnie z tymi wskazówkami, aby mieć pewność, że nie będą odtwarzane w sposób niezamierzony treści multimedialnych na wbudowanych głośnikach zegarka. Wskazówki różnią się w zależności od tego, który gracz używa aplikacji.
ExoPlayer
Jeśli aplikacja używa ExoPlayer:
Wywołaj setSuppressPlaybackOnUn odpowiedniFeed(true). podczas tworzenia instancji ExoPlayer:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
Reaguj na zdarzenie wstrzymania odtwarzania, rejestrując WearNieodpowiednie wyjście OdtwarzanieSuppression resolverListener jako detektor instancji ExoPlayer:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Narzędzia dla horologów z branży medialnej
Horologist MediaToolkit zawiera już funkcje logiczne, które zapobiegają niezamierzonemu odtwarzaniu multimediów na wbudowanych głośnikach zegarka.
Inne odtwarzacze multimedialne
- Odtwarzanie dźwięku multimediów musi się rozpocząć, dopóki do zegarka nie zostanie podłączone odpowiednie urządzenie wyjściowe, takie jak zestaw słuchawkowy lub głośniki zewnętrzne. Poniżej znajdziesz listę odpowiednich urządzeń wyjściowych dla aplikacji do multimediów:
- Wstrzymaj odtwarzanie, gdy AudioManager powiadomi aplikację, że zewnętrzne urządzenie wyjściowe audio zostało odłączone od zegarka.
- Jeśli użytkownik próbuje rozpocząć odtwarzanie multimediów, ale nie podłączył(a) zewnętrznego urządzenia audio, poproś go o połączenie tego urządzenia z zegarkiem.