Questa guida descrive come le app su Wear OS possono utilizzare le API Android più comuni per riprodurre audio.
Rilevare i dispositivi audio
Un'app Wear OS deve prima rilevare se il dispositivo indossabile ha un'uscita audio appropriata. Gli sviluppatori possono aspettarsi che i dispositivi indossabili abbiano a disposizione almeno uno dei seguenti output audio:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: sui dispositivi con altoparlante integratoAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: quando le cuffie Bluetooth sono accoppiate e connesseAudioDeviceInfo.TYPE_BLE_BROADCAST
: quando un dispositivo del gruppo di trasmissione Bluetooth Low Energy (BLE) è accoppiato e connessoAudioDeviceInfo.TYPE_BLE_HEADSET
: quando le cuffie BLE sono accoppiate e connesseAudioDeviceInfo.TYPE_BLE_SPEAKER
: quando un altoparlante BLE è accoppiato e connesso
Nell'esempio seguente, l'app utilizza il metodo
getDevices()
in combinazione con il valore di FEATURE_AUDIO_OUTPUT
per enumerare tutti gli output audio.
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 i contenuti multimediali solo quando le cuffie o gli speaker Bluetooth sono connessi allo smartwatch.
Scegliere il dispositivo preferito per l'uscita audio
A seconda del caso d'uso della tua app e dell'importanza dell'audio per l'esperienza principale dell'app, scegli la modalità di interazione degli utenti con l'output audio della tua app.
Consenti all'utente di scegliere il dispositivo di uscita dei contenuti multimediali
A partire da Wear OS 5, il sistema fornisce un'interfaccia utente che consente agli utenti di scegliere il dispositivo su cui riprodurre i contenuti multimediali e mostrare informazioni sui contenuti multimediali attualmente in riproduzione.
Se la tua app rileva che non è connessa una cuffia Bluetooth quando vuoi
fornire la riproduzione audio su dispositivi con Wear OS 5 o versioni successive, offriti di
indirizzare l'utente direttamente al selettore di output multimediale. Sui dispositivi che non supportano
il selettore dell'output multimediale, richiama l'azione
dell'intent ACTION_BLUETOOTH_SETTINGS
, che reindirizza l'utente alla pagina Bluetooth nelle impostazioni di sistema.
Il metodo launchOutputSelection()
, parte della libreria Horologist
su GitHub, mostra 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, un headset Bluetooth
può essere accoppiato o disaccoppiato durante l'esecuzione di un'app. Se l'app richiede l'uso di cuffie per continuare,
registra un callback per rilevare quando
l'utente connette e disconnette le 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 la tua app rileva che non è collegato un headset Bluetooth quando vuoi fornire l'output audio, non mostrare un messaggio di errore. Offriti invece di indirizzare l'utente direttamente alle impostazioni Bluetooth per semplificare la connessione. A questo scopo, 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 integrati
La maggior parte dei dispositivi Wear OS ha altoparlanti integrati. Se la tua app offre un caso d'uso non multimediale che incorpora l'audio, valuta la possibilità di utilizzare gli speaker per offrire una dimensione aggiuntiva di coinvolgimento con l'utente. Ad esempio, un dispositivo Wear OS dotato di altoparlante potrebbe attivare una sveglia o un timer, con notifica audio, e le app per il fitness potrebbero utilizzare l'altoparlante per fornire istruzioni per l'allenamento.
Nota : gli speaker integrati non offrono la migliore esperienza per l'ascolto di contenuti multimediali in quanto non sono progettati per questo scopo.
Per ulteriori dettagli, consulta WearSpeakerSample.
Riproduci l'audio
Una volta rilevata e scelta un'uscita audio adatta, la procedura per riprodurre l'audio su Wear OS è la stessa che su dispositivi mobili o altri dispositivi. Per ulteriori informazioni, consulta la panoramica di MediaPlayer. Per accedere più facilmente a funzionalità più avanzate, come lo streaming e il download di contenuti multimediali, utilizza ExoPlayer. Assicurati di seguire le best practice per le app audio, ad esempio la gestione della messa a fuoco audio.
Evitare la riproduzione involontaria di contenuti multimediali tramite gli altoparlanti integrati
Le app multimediali possono seguire le seguenti indicazioni per assicurarsi che l'app non riproduca inavvertitamente contenuti multimediali sugli altoparlanti integrati dello smartwatch. Le indicazioni variano in base al player utilizzato dall'app.
ExoPlayer
Se la tua app utilizza ExoPlayer:
Chiama setSuppressPlaybackOnUnsuitableOutput(true) durante la creazione dell'istanza ExoPlayer:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
Reagisci all'evento di soppressione della riproduzione registrando WearUnsuitableOutputPlaybackSuppressionResolverListener come listener dell'istanza di ExoPlayer:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Horologist Media toolkit
Horologist MediaToolkit contiene già la logica per impedire la riproduzione involontaria di contenuti multimediali sugli altoparlanti integrati dello smartwatch.
Altri lettori multimediali
- Assicurati che la riproduzione audio dei contenuti multimediali non inizi a meno che non sia collegato all'orologio un dispositivo di output adatto, ad esempio un headset o un set di altoparlanti esterni. Consulta il seguente elenco per i dispositivi di output adatti alle app multimediali:
- Metti in pausa la riproduzione se AudioManager comunica alla tua app che un dispositivo di uscita audio esterno viene disconnesso dallo smartwatch.
- Quando l'utente tenta di avviare la riproduzione dei contenuti multimediali, ma non ha collegato un dispositivo audio esterno, invitalo a collegare un dispositivo al suo smartwatch.