Audio auf Wearables abspielen

In diesem Leitfaden wird beschrieben, wie Apps unter Wear OS bekannte Android-APIs zum Abspielen von Audioinhalten 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 Wearables mindestens einen der folgenden Audioausgänge haben:

Im folgenden Beispiel verwendet die App die Methode getDevices() in Verbindung mit dem Wert von FEATURE_AUDIO_OUTPUT, um alle Audioausgaben aufzulisten.

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)

Um die Nutzerfreundlichkeit zu optimieren, sollte deine App Medien nur dann abspielen, 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 Audio für die Kernfunktionen Ihrer App können Sie festlegen, wie Nutzer mit der Audioausgabe Ihrer App interagieren sollen.

Nutzer darf Medienausgabegerät auswählen

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

Wenn Ihre App erkennt, dass kein Bluetooth-Headset verbunden ist, wenn Sie die Audiowiedergabe auf Geräten mit Wear OS 5 oder höher anbieten möchten, bieten Sie an, den Nutzer direkt zur Media-Auswahl weiterzuleiten. Auf Geräten, die die Media-Ausgabesteuerung nicht unterstützen, rufen Sie die Intent-Aktion ACTION_BLUETOOTH_SETTINGS auf. Dadurch wird der Nutzer zu den Bluetooth-Einstellungen weitergeleitet.

Die Methode launchOutputSelection(), die Teil der Horologist-Bibliothek auf GitHub ist, zeigt, wie Nutzer ihr Media-Ausgabegerät auswählen können.

Bluetooth-Headset

Im Gegensatz zu integrierten Lautsprechern, die immer verfügbar sind, wenn sie auf dem Gerät vorhanden sind, kann ein Bluetooth-Headset während der Ausführung einer App gekoppelt oder entkoppelt werden. Wenn für die App ein Headset erforderlich ist, registrieren Sie einen Callback, um zu erkennen, wann der Nutzer ein Bluetooth-Headset über registerAudioDeviceCallback anschließt und 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 Audio ausgeben möchten, zeigen Sie keine Fehlermeldung an. Biete dem Nutzer stattdessen an, ihn direkt zu den Bluetooth-Einstellungen weiterzuleiten, um ihm die Verbindung zu erleichtern. Dazu können Sie einen Intent 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)
  

Integrierte Lautsprecher

Die meisten Wear OS-Geräte haben integrierte Lautsprecher. Wenn Ihre App einen nicht mediabezogenen Anwendungsfall bietet, der Sound beinhaltet, sollten Sie Lautsprecher verwenden, um eine zusätzliche Dimension der Interaktion mit dem Nutzer zu schaffen. So kann beispielsweise ein mit einem Lautsprecher ausgestattetes Wear OS-Gerät einen Wecker- oder Timer-Alarm mit Audiobenachrichtigung auslösen. Fitness-Apps können den Lautsprecher verwenden, um Trainingsanweisungen zu geben.

Hinweis : Die integrierten Lautsprecher sind nicht für die Wiedergabe von Medieninhalten optimiert.

Weitere Informationen finden Sie unter WearSpeakerSample.

Audio wiedergeben

Sobald Sie eine geeignete Audioausgabe erkannt und ausgewählt haben, ist die Audiowiedergabe unter Wear OS genauso wie auf Mobilgeräten oder anderen Geräten. Weitere Informationen finden Sie unter MediaPlayer – Übersicht. Wenn Sie einfacher auf erweiterte Funktionen wie das Streamen und Herunterladen von Medien zugreifen möchten, verwenden Sie ExoPlayer. Achten Sie darauf, Best Practices für Audio-Apps wie Audiofokus verwalten zu befolgen.

Unbeabsichtigte Medienwiedergabe über integrierte Lautsprecher verhindern

Media-Apps können die folgenden Richtlinien befolgen, um sicherzustellen, dass die App nicht unbeabsichtigt Medieninhalte über die integrierten Lautsprecher der Smartwatch wiedergibt. Die Anleitung variiert je nachdem, welcher Player in der App verwendet wird.

ExoPlayer

Wenn Ihre App ExoPlayer verwendet:

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

      ExoPlayer exoplayer = ExoPlayer.Builder(context)
              .setAudioAttributes(...)
              .setSuppressPlaybackWhenUnsuitableOutput(true)
              // ...
              .build()
          
  2. Reagiere auf das Ereignis zur Unterdrückung der Wiedergabe, indem du WearUnsuitableOutputPlaybackSuppressionResolverListener als Listener der ExoPlayer-Instanz registrierst:

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

Horologist Media-Toolkit

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

Andere Mediaplayer