Audio auf Wearables abspielen

In diesem Leitfaden wird beschrieben, wie Apps unter Wear OS bekannte Android-APIs für die Audiowiedergabe verwenden können.

Audiogeräte erkennen

Zuerst muss eine Wear OS-App erkennen, ob das Wearable über eine geeignete Audioausgabe verfügt. Entwickler können davon ausgehen, dass Wearables mindestens eine der folgenden Audioausgaben haben:

Im folgenden Beispiel verwendet die App die Methode getDevices() Methode in Verbindung mit dem Wert von FEATURE_AUDIO_OUTPUT zur Aufzählung aller Audiodateien Ausgaben.

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 über Bluetooth wiedergeben Kopfhörer oder Lautsprecher mit der Uhr verbunden sind.

Bevorzugtes Gerät für Audioausgabe auswählen

Je nach Anwendungsfall und der Bedeutung von Audioinhalten für die Hauptfunktion der App Wählen Sie aus, wie Nutzer mit der Audioausgabe Ihrer App interagieren sollen.

Nutzer kann Medienausgabegerät auswählen

Ab Wear OS 5 bietet das System eine Benutzeroberfläche, auf der Nutzer auswählen können, Auf dem Gerät sollen Medien abgespielt und Informationen zu den aktuell wiedergegebenen Medien angezeigt werden. Inhalte.

Wenn die App erkennt, dass kein Bluetooth-Headset verbunden ist, obwohl Sie das möchten für Audiowiedergabe auf Geräten mit Wear OS 5 oder höher, direkt zum Medienausgabe-Wechsler. Auf Geräten, die den Medienausgabe-Auswahl, rufen Sie den Intent ACTION_BLUETOOTH_SETTINGS auf Aktion, durch die der Nutzer zur Bluetooth-Seite in den Systemeinstellungen weitergeleitet wird.

Methode launchOutputSelection(), Teil der Horologen-Bibliothek auf GitHub, wie Nutzer ihr Medienausgabegerät auswählen lassen können.

Bluetooth-Headset

Im Gegensatz zu integrierten Lautsprechern, die immer verfügbar sind, sofern sie auf dem Gerät vorhanden sind, kann ein Bluetooth-Headset kann während der Ausführung einer App gekoppelt oder entkoppelt werden. Wenn zum Fortfahren ein Headset erforderlich ist: registrieren Sie einen Callback, um zu erkennen, der Nutzer ein Bluetooth-Headset verbindet und trennt. 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)
  

Wenn die App feststellt, dass kein Bluetooth-Headset verbunden ist, wenn Sie Audio bereitstellen möchten keine Fehlermeldung angezeigt. Biete dem Nutzer stattdessen an, direkt zu den Bluetooth-Einstellungen zu gehen damit sie sich leichter vernetzen können. 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 Ihre App einen nicht-medienbezogenen Anwendungsfall bietet, der Folgendes beinhaltet: verwenden Sie Lautsprecher, um dem Nutzer eine zusätzliche Dimension zu verleihen. Für kann ein Wear OS-Gerät mit Lautsprechern einen Wecker oder einen Timer auslösen, inklusive Audiobenachrichtigungen und Fitness-Apps verwenden möglicherweise den Lautsprecher für Trainingsanweisungen.

Hinweis : Lautsprecher bieten nicht die optimale Wiedergabequalität bei Medien. da sie nicht für diesen Zweck gedacht sind.

Weitere Informationen finden Sie in der WearSpeakerSample.

Audio wiedergeben

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

Unbeabsichtigte Wiedergabe von Medien über Lautsprecher verhindern

Medien-Apps können der folgenden Anleitung folgen, um sicherzustellen, dass die App nicht unbeabsichtigt wiedergegeben wird Medieninhalte auf den integrierten Lautsprechern der Smartwatch. Die Anleitung richtet sich danach, mit welchem Spieler die die App verwendet.

ExoPlayer

Wenn Ihre App ExoPlayer verwendet:

  1. Rufen Sie setSuppressPlaybackOnUnsuitableOutput(true) auf. während Sie die ExoPlayer-Instanz erstellen:

      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 verwenden:

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

Medien-Toolkit für Horologen

Das Horologist MediaToolkit enthält bereits Logik, um eine unbeabsichtigte Medienwiedergabe auf integrierten Smartwatch-Lautsprechern zu verhindern.

Andere Mediaplayer