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:
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 mit einer Bluetooth Low Energy-Broadcastgruppe 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 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:
Rufe setSuppressPlaybackOnUnsuitableOutput(true) beim Erstellen der ExoPlayer-Instanz auf:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
Sie können auf das Ereignis zur Unterdrückung der Wiedergabe reagieren, indem Sie WearUnsuitableOutputPlaybackSuppressionResolverListener als Listener der ExoPlayer-Instanz registrieren:
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
- Die Audiowiedergabe von Medien startet nur, wenn ein geeignetes Ausgabegerät wie ein Headset oder externe Lautsprecher an die Smartwatch angeschlossen ist. In der folgenden Liste finden Sie geeignete Ausgabegeräte für Medien-Apps:
- Pausieren Sie die Wiedergabe, wenn AudioManager Ihre App benachrichtigt, dass die Verbindung eines externen Audioausgabegeräts zur Smartwatch getrennt wurde.
- Wenn der Nutzer versucht, die Medienwiedergabe zu starten, aber kein externes Audiogerät angeschlossen hat, bitten Sie ihn, ein solches Gerät an seine Smartwatch anzuschließen.