Riproduci audio su indossabili

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:

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:

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

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

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