Riproduci audio su indossabili

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:

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:

  1. Chiama setSuppressPlaybackOnUnsatiableOutput(true) durante la creazione dell'istanza ExoPlayer:

      ExoPlayer exoplayer = ExoPlayer.Builder(context)
              .setAudioAttributes(...)
              .setSuppressPlaybackWhenUnsuitableOutput(true)
              // ...
              .build()
          
  2. Reagisci all'evento di eliminazione della riproduzione registrandoti WearUnSUableOutputPlaybackPlaybackSuppressionResolverListener come listener dell'istanza ExoPlayer:

  3.   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