parole chiave: wear, media, collection_guideslandingwear
Questa guida descrive in che modo le app su Wear OS possono utilizzare le API Android di uso comune per riprodurre l'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 almeno uno dei seguenti output audio disponibili:
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 di gruppo di trasmissione Bluetooth Low Energy (BLE) è accoppiato e connessoAudioDeviceInfo.TYPE_BLE_HEADSET
: quando un auricolare BLE è accoppiato e connessoAudioDeviceInfo.TYPE_BLE_SPEAKER
: quando uno speaker BLE è accoppiato e connesso
Nell'esempio seguente, l'app utilizza il metodo getDevices()
in combinazione con il valore FEATURE_AUDIO_OUTPUT
per enumerare tutte le uscite 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 riprodurre i contenuti multimediali solo quando gli auricolari o gli altoparlanti 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 di base della tua app, scegli come vuoi che gli utenti interagiscano 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 su quale dispositivo riprodurre i contenuti multimediali e di mostrare informazioni sui contenuti multimediali in riproduzione.
Se la tua app rileva che non è connessa una cuffia Bluetooth quando vuoi supportare la riproduzione audio su dispositivi con Wear OS 5 o versioni successive, offri di indirizzare l'utente direttamente al selettore di output multimediale. Sui dispositivi che non supportano il selettore di output multimediale, invoca l'azione di intent ACTION_BLUETOOTH_SETTINGS
, che indirizza l'utente alla pagina Bluetooth nelle impostazioni di sistema.
Il metodo launchOutputSelection()
, che fa parte della libreria Horologist su GitHub, mostra come consentire all'utente di scegliere il dispositivo di output multimediale.
Auricolari Bluetooth
A differenza degli altoparlanti integrati, che sono sempre disponibili se presenti sul dispositivo, le cuffie Bluetooth possono essere accoppiate o disaccoppiate durante l'esecuzione di un'app. Se l'app richiede un auricolare per continuare,
registra un callback per rilevare quando
l'utente connette e scollegano un auricolare 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 è collegata una cuffia Bluetooth quando vuoi fornire l'output audio, non mostrare un messaggio di errore. Offri invece di indirizzare l'utente direttamente alle impostazioni Bluetooth per semplificare la connessione. A tal fine, puoi inviare un'intenzione 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 altoparlanti. Se la tua app offre un caso d'uso non multimediale che include l'audio, valuta la possibilità di utilizzare gli altoparlanti per offrire un'ulteriore dimensione 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 non offrono l'esperienza migliore per ascoltare contenuti multimediali, in quanto non sono progettati per questo scopo.
Per ulteriori dettagli, consulta WearSpeakerSample.
Riproduci l'audio
Dopo aver rilevato e scelto 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 la riproduzione in streaming e il download di contenuti multimediali, utilizza ExoPlayer. Assicurati di seguire le best practice per le app audio, ad esempio la gestione dell'audio in primo piano.
Impedire la riproduzione involontaria di contenuti multimediali tramite gli altoparlanti
Le app multimediali possono seguire le seguenti indicazioni per assicurarsi che l'app non riproduca involontariamente contenuti multimediali sugli altoparlanti integrati dello smartwatch. Le indicazioni sono diverse a seconda del 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()
-
Reagire all'evento di soppressione della riproduzione registrando WearUnsuitableOutputPlaybackSuppressionResolverListener come listener dell'istanza ExoPlayer:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Horologist Media toolkit
Horologist MediaToolkit contiene già una logica per impedire la riproduzione involontaria dei 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 allo smartwatch un dispositivo di uscita adatto, ad esempio un auricolare o un set di altoparlanti esterni. Consulta l'elenco seguente per trovare i dispositivi di output adatti per le app multimediali:
- Metti in pausa la riproduzione se AudioManager comunica alla tua app che un dispositivo di uscita audio esterno viene scollegato dall'orologio.
- Quando l'utente tenta di avviare la riproduzione di contenuti multimediali, ma non ha collegato un dispositivo audio esterno, chiedi all'utente di collegare un dispositivo di questo tipo al suo smartwatch.