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:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: auf Geräten mit integriertem LautsprecherAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: wenn ein Bluetooth-Headset gekoppelt und verbunden istAudioDeviceInfo.TYPE_BLE_BROADCAST
: wenn ein Gerät einer Bluetooth Low Energy-Broadcastgruppe (BLE) gekoppelt und verbunden istAudioDeviceInfo.TYPE_BLE_HEADSET
: wenn ein BLE-Headset gekoppelt und verbunden istAudioDeviceInfo.TYPE_BLE_SPEAKER
: wenn ein BLE-Lautsprecher gekoppelt und verbunden ist
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:
Rufen Sie beim Erstellen der ExoPlayer-Instanz setSuppressPlaybackOnUnsuitableOutput(true) auf:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
Reagiere auf das Ereignis zur Unterdrückung der Wiedergabe, indem du WearUnsuitableOutputPlaybackSuppressionResolverListener als Listener der ExoPlayer-Instanz registrierst:
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
- Die Medienwiedergabe sollte nur starten, wenn ein geeignetes Ausgabegerät wie ein Headset oder externe Lautsprecher mit der Smartwatch verbunden ist. In der folgenden Liste finden Sie geeignete Ausgabegeräte für Media-Apps:
- Pausieren Sie die Wiedergabe, wenn AudioManager Ihre App darüber informiert, dass ein externes Audioausgabegerät von der Smartwatch getrennt wird.
- Wenn der Nutzer versucht, die Medienwiedergabe zu starten, aber kein externes Audiogerät angeschlossen hat, fordere ihn auf, ein solches Gerät mit seiner Smartwatch zu verbinden.