słowa kluczowe: wear, media, collection_guideslandingwear
W tym przewodniku opisujemy, jak aplikacje na Wear OS mogą używać znanych interfejsów API Androida do odtwarzania dźwięku.
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 noszące 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łączonyAudioDeviceInfo.TYPE_BLE_BROADCAST
: gdy urządzenie w grupie nadawania Bluetooth Low Energy (BLE) jest sparowane i połączoneAudioDeviceInfo.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 tym przykładzie 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 słuchawki lub głośniki Bluetooth są podłączone do zegarka.
Wybierz preferowane urządzenie do odtwarzania dźwięku
W zależności od zastosowania aplikacji i znaczenia dźwięku w jej głównej funkcjonalności wybierz, jak użytkownicy mają wchodzić w interakcję z dźwiękiem generowanym przez aplikację.
Zezwalanie użytkownikowi na wybór urządzenia wyjściowego multimediów
Począwszy od Wear OS 5 system zapewnia interfejs, który pozwala użytkownikom wybrać urządzenie, na którym mają być odtwarzane treści multimedialne, oraz wyświetlać informacje o obecnie odtwarzanych treściach.
Jeśli Twoja aplikacja wykryje, że nie jest podłączony zestaw słuchawkowy Bluetooth, a Ty chcesz odtworzyć dźwięk na urządzeniach z Wear OS 5 lub nowszym, zaproponuj użytkownikowi przejście bezpośrednio do przełącznika wyjścia multimedialnego. Na urządzeniach, które nie obsługują przełącznika wyjścia multimediów, wywołaj działanie intencyjne ACTION_BLUETOOTH_SETTINGS
, które przenosi użytkownika na stronę Bluetooth w ustawieniach systemu.
Metoda launchOutputSelection()
, która jest częścią biblioteki Horologist na GitHubie, pokazuje, jak umożliwić użytkownikowi wybór urządzenia do przesyłania multimediów.
Zestaw słuchawkowy Bluetooth
W przeciwieństwie do wbudowanych głośników, które są zawsze dostępne, jeśli są obecne na urządzeniu, zestaw słuchawkowy Bluetooth można sparować lub odparować podczas działania aplikacji. Jeśli aplikacja wymaga podłączenia zestawu słuchawkowego, zarejestruj funkcję wywołania zwrotnego, aby wykryć, kiedy użytkownik podłącza i rozłącza zestaw słuchawkowy Bluetooth: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 zapewnić wyjście audio, nie wyświetlaj komunikatu o błędzie. Zamiast tego zaproponuj użytkownikowi przejście bezpośrednio do ustawień Bluetooth, aby ułatwić mu nawiązanie połączenia. Aby to zrobić, wyślij zamiar z użyciem: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 Twoja aplikacja oferuje przypadki użycia niemedialnego, które obejmują dźwięk, rozważ użycie głośników, aby zapewnić dodatkowy wymiar zaangażowania użytkownika. Na przykład urządzenie z Wear OS wyposażone w głośnik może włączyć alarm zegara lub minutnika wraz z powiadomieniem dźwiękowym, a aplikacje fitness mogą używać głośnika do wydawania instrukcji dotyczących ćwiczeń.
Uwaga: głośniki nie zapewniają najlepszej jakości dźwięku podczas słuchania multimediów, ponieważ nie są do tego przeznaczone.
Więcej informacji znajdziesz w pliku 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 lub innych urządzeniach. Więcej informacji znajdziesz w artykule Omówienie MediaPlayer. Aby uzyskać łatwiejszy dostęp do bardziej zaawansowanych funkcji, takich jak przesyłanie strumieniowe i pobieranie multimediów, użyj ExoPlayera. Pamiętaj o stosowaniu sprawdzonych metod dotyczących aplikacji audio, takich jak zarządzanie natężeniem dźwięku.
Zapobieganie niezamierzonemu odtwarzaniu multimediów przez głośniki
Aplikacje multimedialne mogą postępować zgodnie z tymi wskazówkami, aby mieć pewność, że aplikacja nie będzie nieumyślnie odtwarzać treści multimedialnych na wbudowanych głośnikach zegarka. Wskazówki różnią się w zależności od tego, którego odtwarzacza używa aplikacja.
ExoPlayer
Jeśli Twoja aplikacja korzysta z ExoPlayera:
Podczas tworzenia instancji ExoPlayer wywołaj metodę setSuppressPlaybackOnUnsuitableOutput(true):
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
Odpowiedz na zdarzenie tłumienia odtwarzania, rejestrując obiekt WearUnsuitableOutputPlaybackSuppressionResolverListener jako detekora instancji ExoPlayera:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Zestaw narzędzi Horologist Media
Horologist MediaToolkit zawiera już logikę zapobiegającą 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 rozpocznie się, dopóki nie podłączysz do zegarka odpowiedniego urządzenia wyjściowego, takiego jak zestaw słuchawkowy lub zestaw głośników zewnętrznych. Poniżej znajdziesz listę odpowiednich urządzeń wyjściowych dla aplikacji multimedialnych:
- Wstrzymaj odtwarzanie, jeśli AudioManager powiadomi Twoją aplikację, że zewnętrzne urządzenie wyjściowe dźwięku rozłączyło się z zegarkiem.
- Gdy użytkownik próbuje rozpocząć odtwarzanie multimediów, ale nie ma podłączonego zewnętrznego urządzenia audio, poproś go o podłączenie takiego urządzenia do zegarka.