Audio auf Wearables abspielen

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

Audiogeräte erkennen

Eine Wear OS-App muss zuerst erkennen, ob das Wearable-Gerät eine geeignete Audioausgabe hat. Entwickler können davon ausgehen, dass Wearables über mindestens einen der folgenden Audioausgänge verfügen:

Im folgenden Beispiel verwendet die Anwendung 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)

Für eine optimale Nutzererfahrung sollte die App Medien nur dann abspielen, wenn Bluetooth-Kopfhörer oder -Lautsprecher mit der Uhr verbunden sind.

Bevorzugtes Gerät für Audioausgabe auswählen

Wählen Sie je nach Anwendungsfall Ihrer App und der Bedeutung von Audio für das Kernerlebnis Ihrer App aus, wie Nutzer mit der Audioausgabe Ihrer App interagieren sollen.

Bluetooth-Headset

Im Gegensatz zu integrierten Lautsprechern, die immer verfügbar sind, sofern auf dem Gerät vorhanden, kann ein Bluetooth-Headset während der Ausführung einer App gekoppelt oder entkoppelt werden. Wenn zum Fortfahren ein Headset erforderlich ist:

Registriere einen Callback, um zu erkennen, wenn der Nutzer über registerAudioDeviceCallback ein Bluetooth-Headset 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 angeschlossen ist, um die Audioausgabe zu ermöglichen, wird keine Fehlermeldung angezeigt. Biete dem Nutzer stattdessen an, den Nutzer direkt zu den Bluetooth-Einstellungen weiterzuleiten, damit er leichter eine Verbindung herstellen kann. Senden Sie dazu einen Intent mit 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)
  

Lautsprecher

Die meisten Wear OS-Geräte haben Lautsprecher. Wenn deine App einen nicht medienfremden Anwendungsfall mit Ton bietet, erwäge die Verwendung von Lautsprechern, um den Nutzern eine zusätzliche Dimension der Interaktion zu bieten. Beispielsweise kann ein Wear OS-Gerät mit Lautsprecher einen Uhr- oder Timer-Wecker mit Audiobenachrichtigungen auslösen. Fitness-Apps können den Lautsprecher verwenden, um Trainingsanweisungen zu erhalten.

Hinweis : Lautsprecher eignen sich nicht optimal für die Wiedergabe von Medieninhalten, da sie nicht für diesen Zweck entwickelt wurden.

Weitere Informationen findest du im WearSpeakerSample.

Audio wiedergeben

Sobald du eine geeignete Audioausgabe gefunden und ausgewählt hast, ist der Ablauf für die Audiowiedergabe unter Wear OS derselbe wie auf Mobilgeräten oder anderen Geräten. Weitere Informationen finden Sie in der Übersicht zu MediaPlayer. Verwenden Sie ExoPlayer, um einfacher auf erweiterte Funktionen wie das Streamen und Herunterladen von Medien zuzugreifen. Beachten Sie die Best Practices für Audio-Apps, z. B. Audiofokus verwalten.

Unbeabsichtigte Medienwiedergabe über Lautsprecher verhindern

Medien-Apps können der folgenden Anleitung folgen, damit sie nicht unbeabsichtigt Medieninhalte auf den integrierten Lautsprechern der Smartwatch wiedergibt. Die Anleitung variiert je nachdem, welchen Player die App verwendet.

ExoPlayer

Wenn Ihre Anwendung ExoPlayer verwendet:

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

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

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

Medien-Toolkit für Horologen

Das Horologist MediaToolkit enthält bereits Logik, die eine unbeabsichtigte Medienwiedergabe auf den integrierten Uhrenlautsprechern verhindert.

Andere Mediaplayer