Audio auf Wearables abspielen

keywords: wear, media, collection_guideslandingwear

In diesem Leitfaden wird beschrieben, wie Apps unter Wear OS bekannte Android APIs zur Audiowiedergabe verwenden können.

Audiogeräte erkennen

Eine Wear OS-App muss zuerst erkennen, ob das Wearable eine geeignete Audioausgabe hat. Entwickler können davon ausgehen, dass auf Wearables mindestens einer der folgenden Audioausgänge verfügbar ist:

Im folgenden Beispiel verwendet die App die getDevices()-Methode in Verbindung mit dem Wert FEATURE_AUDIO_OUTPUT, um alle Audioausgaben aufzuzählen.

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)

Für eine optimale Nutzererfahrung sollte Ihre App Medien nur dann wiedergeben, wenn Bluetooth-Kopfhörer oder ‑Lautsprecher mit der Smartwatch verbunden sind.

Bevorzugtes Gerät für die Audioausgabe auswählen

Je nach Anwendungsfall Ihrer App und der Bedeutung von Audioinhalten für die Hauptfunktionen Ihrer App können Sie festlegen, wie Nutzer mit der Audioausgabe Ihrer App interagieren sollen.

Nutzern erlauben, das Ausgabegerät für Medien auszuwählen

Ab Wear OS 5 bietet das System eine Benutzeroberfläche, über die Nutzer auswählen können, auf welchem Gerät Medien wiedergegeben werden sollen. Außerdem werden Informationen zu den aktuell wiedergegebenen Medieninhalten angezeigt.

Wenn Ihre App erkennt, dass kein Bluetooth-Headset verbunden ist, während Sie die Audiowiedergabe auf Geräten mit Wear OS 5 oder höher anbieten möchten, bieten Sie dem Nutzer an, ihn direkt zum Schalter für die Medienausgabe zu leiten. Auf Geräten, die den Schalter für die Medienausgabe nicht unterstützen, wird die Intent-Aktion ACTION_BLUETOOTH_SETTINGS aufgerufen, über die der Nutzer in den Systemeinstellungen zur Bluetooth-Seite gelangt.

Die Methode launchOutputSelection(), die Teil der Horologist-Bibliothek auf GitHub ist, zeigt, wie der Nutzer sein Medienausgabegerät auswählen kann.

Bluetooth-Headset

Im Gegensatz zu integrierten Lautsprechern, die immer verfügbar sind, wenn sie auf dem Gerät vorhanden sind, kann ein Bluetooth-Headset gekoppelt oder entkoppelt werden, während eine App ausgeführt wird. Wenn für die App ein Headset erforderlich ist, registrieren Sie einen Rückruf, um zu erkennen, wann der Nutzer ein Bluetooth-Headset über registerAudioDeviceCallback verbindet oder trennt:

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)
  

Wenn Ihre App erkennt, dass kein Bluetooth-Headset verbunden ist, wenn Sie Audioausgabe bereitstellen möchten, darf keine Fehlermeldung angezeigt werden. Biete stattdessen an, den Nutzer direkt zu den Bluetooth-Einstellungen zu leiten, damit er eine Verbindung einfacher herstellen kann. Dazu kannst du eine Intent-Nachricht mit ACTION_BLUETOOTH_SETTINGS senden:

  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)
  

Lautsprecher

Die meisten Wear OS-Geräte haben Lautsprecher. Wenn Ihre App einen nicht medialen Anwendungsfall bietet, der Ton enthält, sollten Sie Lautsprecher verwenden, um eine zusätzliche Dimension der Interaktion mit dem Nutzer zu bieten. So kann beispielsweise ein mit einem Lautsprecher ausgestattetes Wear OS-Gerät einen Wecker oder Timer mit Audiobenachrichtigung auslösen. Fitness-Apps können den Lautsprecher auch für Übungsanweisungen verwenden.

Hinweis : Lautsprecher sind nicht für die Wiedergabe von Medieninhalten geeignet, da sie nicht für diesen Zweck konzipiert wurden.

Weitere Informationen finden Sie im Beispiel WearSpeakerSample.

Audio wiedergeben

Nachdem Sie eine geeignete Audioausgabe erkannt und ausgewählt haben, funktioniert die Audiowiedergabe auf Wear OS genauso wie auf Mobilgeräten oder anderen Geräten. Weitere Informationen finden Sie unter MediaPlayer – Übersicht. Mit ExoPlayer können Sie einfacher auf erweiterte Funktionen wie das Streaming und Herunterladen von Medien zugreifen. Beachten Sie die Best Practices für Audio-Apps, z. B. zum Verwalten des Audiofokus.

Verhindern, dass Medien unbeabsichtigt über Lautsprecher abgespielt werden

Mit den folgenden Hinweisen können Entwickler von Medien-Apps dafür sorgen, dass die App keine Medieninhalte versehentlich über die integrierten Lautsprecher der Smartwatch wiedergibt. Die Anleitung variiert je nachdem, welchen Player die App verwendet.

ExoPlayer

Wenn in Ihrer App ExoPlayer verwendet wird:

  1. Rufe setSuppressPlaybackOnUnsuitableOutput(true) beim Erstellen der ExoPlayer-Instanz auf:

      ExoPlayer exoplayer = ExoPlayer.Builder(context)
              .setAudioAttributes(...)
              .setSuppressPlaybackWhenUnsuitableOutput(true)
              // ...
              .build()
          
  2. Sie können auf das Ereignis zur Unterdrückung der Wiedergabe reagieren, indem Sie WearUnsuitableOutputPlaybackSuppressionResolverListener als Listener der ExoPlayer-Instanz registrieren:

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

Horologist Media-Toolkit

Das Horologist MediaToolkit enthält bereits eine Logik, die die unbeabsichtigte Medienwiedergabe über die integrierten Lautsprecher der Smartwatch verhindert.

Andere Mediaplayer