Questa guida descrive in che modo le app su Wear OS possono usare le API Android familiari per riprodurre audio.
Rileva dispositivi audio
Un'app per Wear OS deve prima rilevare se il dispositivo indossabile ha un output audio appropriato. Gli sviluppatori possono aspettarsi che gli indossabili abbiano almeno uno dei seguenti output audio disponibili:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: sui dispositivi con altoparlante integratoAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: quando vengono accoppiate e collegate cuffie Bluetooth.AudioDeviceInfo.TYPE_BLE_BROADCAST
: Quando un dispositivo di un gruppo di trasmissione Bluetooth Low Energy (BLE) viene accoppiato e connesso.AudioDeviceInfo.TYPE_BLE_HEADSET
: con cuffie BLE accoppiate e collegateAudioDeviceInfo.TYPE_BLE_SPEAKER
: quando un altoparlante BLE è accoppiato e connesso.
Nell'esempio seguente, l'app utilizza la classe
getDevices()
in combinazione con il valore FEATURE_AUDIO_OUTPUT
per enumerare tutto l'audio
come output.
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)
Per offrire la migliore esperienza utente, la tua app deve assicurarsi di riprodurre contenuti multimediali solo quando viene eseguito il Bluetooth cuffie o altoparlanti siano connessi allo smartwatch.
Scegli il dispositivo preferito per l'uscita audio
A seconda del caso d'uso dell'app e dell'importanza dell'audio per la sua esperienza principale, scegliere in che modo gli utenti devono interagire con l'output audio della tua app.
Consenti all'utente di scegliere il dispositivo di output multimediale
A partire da Wear OS 5, il sistema fornisce una UI che consente agli utenti di scegliere il dispositivo dovrebbe riprodurre contenuti multimediali e mostrare informazioni sui contenuti multimediali attualmente in riproduzione contenuti.
Se l'app rileva che non ci sono cuffie Bluetooth collegate quando vuoi
per offrire la riproduzione audio su dispositivi con Wear OS 5 o versioni successive, proponi di
l'utente deve accedere direttamente al selettore di output dei contenuti multimediali. Sui dispositivi che non supportano
selettore dell'output multimediale, richiamare l'intent ACTION_BLUETOOTH_SETTINGS
che porta l'utente alla pagina Bluetooth nelle impostazioni di sistema.
Il metodo launchOutputSelection()
, parte della raccolta Horologist
su GitHub, dimostra come consentire all'utente di scegliere il proprio dispositivo di output multimediale.
Auricolari Bluetooth
A differenza degli altoparlanti integrati, che sono sempre disponibili se presenti sul dispositivo, le cuffie Bluetooth
possono essere associati o disaccoppiati durante l'esecuzione di un'app. Se l'app richiede cuffie per continuare,
registrare un callback per rilevare
l'utente connette e scollega cuffie Bluetooth utilizzando
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)
Se l'app rileva che non sono collegate cuffie Bluetooth quando vuoi fornire audio
l'output, non verrà mostrato alcun messaggio di errore. Offri invece di portare l'utente direttamente alle impostazioni Bluetooth
per agevolarne la connessione. Per farlo, puoi inviare un intent con
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)
Altoparlanti
La maggior parte dei dispositivi Wear OS è dotata di altoparlante. Se la tua app offre un caso d'uso non relativo ai media che incorpora audio, valuta la possibilità di utilizzare altoparlanti per offrire un'ulteriore dimensione di coinvolgimento dell'utente. Per ad esempio, un dispositivo Wear OS con altoparlante potrebbe attivare un orologio o una sveglia con timer, completa di notifica audio e le app per l'attività fisica potrebbero usare lo speaker per fornire istruzioni per gli allenamenti.
Nota : gli speaker non offrono la migliore esperienza di ascolto dei contenuti multimediali contenuti in quanto non sono progettati per questo scopo.
Consulta la WearSpeakerSample per i dettagli.
Riproduci l'audio
Dopo aver rilevato e scelto un output audio adatto, la procedura per la riproduzione dell'audio su Wear OS è la stessa come su dispositivi mobili o altri dispositivi. Per ulteriori informazioni, vedi Panoramica di MediaPlayer. Per accedere più facilmente a funzionalità più avanzate, come lo streaming e il download di contenuti multimediali, usa ExoPlayer. Assicurati di seguire le best practice per le app audio, ad esempio Gestione dell'audio attiva.
Impedire la riproduzione involontaria di contenuti multimediali tramite gli altoparlanti
Le app multimediali possono seguire le seguenti indicazioni per assicurarsi che non vengano riprodotte involontariamente contenuti multimediali su altoparlanti integrati dell'orologio. Le indicazioni variano in base al player in uso nell'app.
ExoPlayer
Se la tua app utilizza ExoPlayer:
Chiama setSuppressPlaybackOnUnsatiableOutput(true) durante la creazione dell'istanza ExoPlayer:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
Reagisci all'evento di eliminazione della riproduzione registrandoti WearUnSUableOutputPlaybackPlaybackSuppressionResolverListener come listener dell'istanza ExoPlayer:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Toolkit di Horologist Media
Horologist MediaToolkit contiene già una logica per impedire la riproduzione involontaria di contenuti multimediali sugli altoparlanti integrati dello smartwatch.
Altri lettori multimediali
- Assicurati che la riproduzione dell'audio multimediale non inizi se all'orologio non viene collegato un dispositivo di output adatto, come cuffie o altoparlanti esterni. Consulta l'elenco che segue per individuare i dispositivi di output adatti per le app multimediali:
- Metti in pausa la riproduzione se AudioManager avvisa l'app che un dispositivo di output audio esterno viene disconnesso dallo smartwatch.
- Quando l'utente tenta di avviare la riproduzione di contenuti multimediali, ma non ha connesso un dispositivo audio esterno, chiedi all'utente di connettere il dispositivo di questo tipo al suo smartwatch.