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

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ą spodziewać się, że urządzenia do noszenia będą mieć dostępne co najmniej jedno z tych wyjść audio:

W poniższym 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 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 przeznaczenia aplikacji i znaczenia dźwięku dla głównej aplikacji wybierz sposób, w jaki użytkownicy mają korzystać z wyjścia audio aplikacji.

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żna sparować lub rozparować podczas działania aplikacji. Jeśli aplikacja wymaga zestawu słuchawkowego,

zarejestrować wywołanie zwrotne, aby wykryć, kiedy użytkownik łączy i rozłącza zestaw słuchawkowy Bluetooth przy użyciu 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 podłączonego zestawu słuchawkowego Bluetooth, i chcesz zapewnić wyjście audio, nie pokazuj komunikatu o błędzie. Proponuj przeniesienie użytkownika bezpośrednio do ustawień Bluetootha, aby ułatwić mu połączenie. Możesz to zrobić, wysyłając intencję za pomocą 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 służy do zastosowań niezwiązanych z multimediami i obejmuje dźwięk, rozważ zastosowanie głośników, które zwiększą zaangażowanie użytkownika. Na przykład urządzenie z Wear OS wyposażone w głośnik może uruchamiać alarm z zegarem lub minutnikiem wraz z powiadomieniem dźwiękowym, a aplikacje do fitnessu mogą używać głośnika, aby przekazywać instrukcje dotyczące ćwiczeń.

Uwaga: głośniki nie zapewniają najlepszych wrażeń podczas słuchania treści multimedialnych, ponieważ nie zostały zaprojektowane do tego celu.

Szczegółowe informacje znajdziesz w dokumentacji 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ądzeniu mobilnym i innych urządzeniach. Więcej informacji znajdziesz w omówieniu odtwarzacza MediaPlayer. Aby mieć łatwiejszy dostęp do bardziej zaawansowanych funkcji, takich jak strumieniowanie i pobieranie multimediów, użyj ExoPlayer. Stosuj sprawdzone metody dotyczące aplikacji audio, takie jak Zarządzanie dźwiękiem.

Zapobieganie niezamierzonemu odtwarzaniu multimediów przez głośniki

W przypadku aplikacji do multimediów postępuj zgodnie z tymi wskazówkami, by mieć pewność, że nie odtwarzają one przypadkowo treści multimedialnych przez wbudowane głośniki zegarka. Wskazówki różnią się w zależności od odtwarzacza używanego w aplikacji.

ExoPlayer

Jeśli Twoja aplikacja używa ExoPlayer:

  1. Podczas tworzenia instancji ExoPlayer wywołaj setSuppressPlaybackOnUnsuitableoutput(true):

      ExoPlayer exoplayer = ExoPlayer.Builder(context)
              .setAudioAttributes(...)
              .setSuppressPlaybackWhenUnsuitableOutput(true)
              // ...
              .build()
          
  2. Reaguj na zdarzenie wstrzymania odtwarzania, rejestrując WearUnsuitableoutputPlaybackSuppressionSolverListener jako detektor instancji ExoPlayer:

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

Zestaw narzędzi Horologist Media

Horologist MediaToolkit (Horologist MediaToolkit) zawiera już mechanizmy logiczne, które zapobiega niezamierzonemu odtwarzaniu multimediów przez wbudowane głośniki zegarka.

Inne odtwarzacze multimedialne