Odtwarzanie dźwięku na urządzeniach do noszenia

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:

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:

  1. Wywołaj setSuppressPlaybackOnUn odpowiedniFeed(true). podczas tworzenia instancji ExoPlayer:

      ExoPlayer exoplayer = ExoPlayer.Builder(context)
              .setAudioAttributes(...)
              .setSuppressPlaybackWhenUnsuitableOutput(true)
              // ...
              .build()
          
  2. Reaguj na zdarzenie wstrzymania odtwarzania, rejestrując WearNieodpowiednie wyjście OdtwarzanieSuppression resolverListener jako detektor instancji ExoPlayer:

  3.   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