Panduan ini menjelaskan cara Anda dapat menggunakan API Android yang sudah dikenal untuk memutar audio di aplikasi Wear OS.
Mendeteksi perangkat audio
Aplikasi Wear OS harus mendeteksi terlebih dahulu apakah perangkat wearable memiliki output audio yang sesuai atau tidak. Perangkat wearable biasanya memiliki setidaknya satu output audio berikut:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: di perangkat dengan speaker bawaan.AudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: saat headset Bluetooth disambungkan dan terhubung.AudioDeviceInfo.TYPE_BLE_BROADCAST
: saat perangkat grup siaran Bluetooth Hemat Energi (BLE) tersambung dan terhubung.AudioDeviceInfo.TYPE_BLE_HEADSET
: saat headset BLE tersambung dan terhubung.AudioDeviceInfo.TYPE_BLE_SPEAKER
: saat speaker BLE tersambung dan terhubung.
Contoh berikut menggunakan metode getDevices()
dengan nilai
FEATURE_AUDIO_OUTPUT
untuk memeriksa apakah jenis output audio tersedia.
private val audioManager: AudioManager by lazy { getSystemService(AUDIO_SERVICE) as AudioManager } 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 } }
Kemudian, Anda dapat menggunakan metode ini untuk memeriksa apakah jenis output audio tersedia.
val hasSpeaker = audioOutputAvailable(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) val hasBluetoothHeadset = audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) val hasBLEBroadcast = audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) val hasBLEHeadset = audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) val hasBLESpeaker = audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)
Untuk memberikan pengalaman pengguna terbaik, hanya putar media saat headphone atau speaker Bluetooth terhubung ke smartwatch.
Memilih perangkat pilihan untuk output audio
Bergantung pada kasus penggunaan aplikasi dan pentingnya audio bagi pengalaman intinya, pilih cara pengguna berinteraksi dengan output audio aplikasi Anda.
Mengizinkan pengguna memilih perangkat output media
Mulai Wear OS 5, sistem menyediakan UI yang memungkinkan pengguna memilih perangkat yang memutar media dan menampilkan informasi tentang konten media yang sedang diputar.
Jika aplikasi Anda mendeteksi bahwa tidak ada headset Bluetooth yang terhubung saat Anda ingin menyediakan pemutaran audio di perangkat yang menjalankan Wear OS 5 atau yang lebih tinggi, tawarkan untuk mengalihkan pengguna langsung ke pengalih output media. Di perangkat yang tidak mendukung pengalih output media, panggil tindakan intent ACTION_BLUETOOTH_SETTINGS
, yang akan mengarahkan pengguna ke halaman Bluetooth di setelan sistem.
Metode launchOutputSelection()
, yang merupakan bagian dari library Horologist
di GitHub, menunjukkan cara mengizinkan pengguna memilih perangkat output media mereka.
Headset Bluetooth
Tidak seperti speaker bawaan, yang selalu tersedia jika ada di perangkat, headset Bluetooth dapat disambungkan atau dilepaskan sambungannya saat aplikasi berjalan. Jika aplikasi Anda memerlukan headset untuk melanjutkan, daftarkan callback untuk mendeteksi saat pengguna menghubungkan dan memutuskan sambungan headset Bluetooth menggunakan registerAudioDeviceCallback
:
val audioDeviceCallback = 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. } } } audioManager.registerAudioDeviceCallback(audioDeviceCallback, /*handler=*/ null)
Jika aplikasi Anda mendeteksi bahwa tidak ada headset Bluetooth yang terhubung saat Anda akan memberikan output
audio, jangan tampilkan pesan error. Sebagai gantinya, tawarkan untuk mengalihkan pengguna langsung ke setelan Bluetooth guna memudahkan mereka terhubung. Anda
dapat melakukannya dengan mengirimkan intent dengan ACTION_BLUETOOTH_SETTINGS
:
fun Context.launchBluetoothSettings(closeOnConnect: Boolean = true) { 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) if (closeOnConnect) { putExtra("EXTRA_CLOSE_ON_CONNECT", true) } putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", FILTER_TYPE_AUDIO) } startActivity(intent) } internal const val FILTER_TYPE_AUDIO = 1
Speaker bawaan
Sebagian besar perangkat Wear OS memiliki speaker bawaan. Jika aplikasi Anda menawarkan kasus penggunaan non-media yang menggunakan suara, pertimbangkan untuk menggunakan speaker guna menawarkan dimensi interaksi tambahan. Misalnya, perangkat Wear OS yang dilengkapi speaker dapat memicu alarm jam atau timer dengan notifikasi audio, dan aplikasi kebugaran mungkin menggunakan speaker untuk memberikan petunjuk latihan.
Lihat WearSpeakerSample untuk mengetahui detailnya.
Memutar audio
Setelah Anda mendeteksi dan memilih output audio yang sesuai, pemutaran audio di Wear OS sama dengan pemutaran audio di perangkat seluler atau perangkat lainnya. Untuk mengetahui informasi selengkapnya, lihat Ringkasan MediaPlayer. Untuk memudahkan akses ke fitur lanjutan, misalnya, streaming dan mendownload media, gunakan ExoPlayer. Ikuti praktik terbaik untuk aplikasi audio, misalnya, mengelola fokus audio.
Mencegah pemutaran media yang tidak diinginkan melalui speaker bawaan
Aplikasi media dapat mengikuti panduan ini untuk mencegah aplikasi memutar media secara tidak sengaja pada speaker smartwatch bawaan. Panduan ini bervariasi bergantung pada pemutar yang digunakan aplikasi Anda.
ExoPlayer
Jika aplikasi Anda menggunakan ExoPlayer:
- Panggil
setSuppressPlaybackOnUnsuitableOutput(true)
method saat membangun instance ExoPlayer:
val exoPlayer = ExoPlayer.Builder(context) .setAudioAttributes(AudioAttributes.DEFAULT, true) .setSuppressPlaybackOnUnsuitableOutput(true) .build()
- Tanggapi peristiwa penghentian pemutaran dengan mendaftarkan
WearUnsuitableOutputPlaybackSuppressionResolverListener
pemroses sebagai pemroses instance ExoPlayer:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Horologist Media Toolkit
Horologist MediaToolkit sudah berisi logika untuk mencegah pemutaran media yang tidak diinginkan pada speaker smartwatch bawaan.
Pemutar media lainnya
- Pastikan pemutaran audio media dimulai hanya saat perangkat output yang sesuai, misalnya, headset atau speaker eksternal, terhubung ke smartwatch. Daftar berikut menunjukkan perangkat output yang cocok untuk aplikasi media:
- Jeda pemutaran jika AudioManager memberi tahu aplikasi Anda bahwa perangkat output audio eksternal berhenti terhubung dari smartwatch.
- Jika pengguna mencoba memulai pemutaran media tetapi belum menghubungkan perangkat audio eksternal, minta mereka untuk menghubungkan perangkat ke smartwatch mereka.