Cómo reproducir audio en wearables

En esta guía, se describe el modo en que las apps en Wear OS pueden usar las APIs de Android conocidas para reproducir audio.

Detecta dispositivos de audio

Una app para Wear OS primero debe detectar si el dispositivo wearable tiene una salida de audio adecuada. En el siguiente ejemplo, la app usa el método getDevices() junto con el valor de FEATURE_AUDIO_OUTPUT para enumerar todas las salidas de audio.

Los desarrolladores pueden esperar que los wearables tengan una de las siguientes salidas de audio disponibles o ambas:

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 }
}

audioOutputAvailable(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) // true if the device has a speaker
audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) // true if a bluetooth headset is connected

Espera a que se conecten los auriculares Bluetooth

A diferencia de las bocinas integradas, que siempre están disponibles en el dispositivo, es posible que los auriculares Bluetooth se vinculen como no a él mientras se ejecuta tu app. Una app puede registrar una devolución de llamada para detectar cuándo sucede con registerAudioDeviceCallback.

audioManager.registerAudioDeviceCallback(object : AudioDeviceCallback() {
    override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>?) {
        super.onAudioDevicesAdded(addedDevices)
        if (audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)) {
            // a bluetooth headset has just been connected
        }
    }
    override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>?) {
        super.onAudioDevicesRemoved(removedDevices)
        if (!audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)) {
            // a bluetooth headset is no longer connected
        }
    }
}, null)

Solicítale al usuario que conecte los auriculares

Si la app requiere auriculares para continuar, en lugar de mostrar un mensaje de error, directamente muéstrale al usuario la configuración de Bluetooth a fin de facilitar la conexión. Para ello, se envía 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)

Reproduce audio

Una vez que se detecta una salida de audio adecuada, el proceso de reproducción de audio en Wear OS es el mismo que el de un dispositivo móvil o de cualquier otro tipo. Para obtener más información, consulta la Descripción general de MediaPlayer. Para facilitar el acceso a funciones más avanzadas, como la transmisión y la descarga de contenido multimedia, considera usar ExoPlayer.

Usa las bocinas

Algunos dispositivos Wear OS incluyen bocinas, lo que permite incorporar sonido a las apps y ofrecer una dimensión adicional de interacción con el usuario. Un dispositivo Wear OS con bocina incorporada podría activar una alarma o cronómetro junto con una notificación de audio. Las apps de fitness también pueden usar la bocina para proporcionar instrucciones de ejercicio.

Consulta los siguientes recursos relacionados: