Panduan ini menjelaskan cara aplikasi di Wear OS dapat menggunakan API Android yang sudah dikenal untuk memutar audio.
Mendeteksi perangkat audio
Aplikasi Wear OS harus terlebih dahulu mendeteksi apakah perangkat wearable memiliki output audio yang sesuai atau tidak. Developer dapat memperkirakan bahwa perangkat wearable akan memiliki minimal salah satu output audio berikut:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: di perangkat yang memiliki speaker bawaanAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: saat headset Bluetooth tersambung dan terhubungAudioDeviceInfo.TYPE_BLE_BROADCAST
: saat perangkat grup siaran Bluetooth Hemat Energi (BLE) tersambung dan terhubungAudioDeviceInfo.TYPE_BLE_HEADSET
: saat headset BLE tersambung dan terhubungAudioDeviceInfo.TYPE_BLE_SPEAKER
: saat speaker BLE tersambung dan terhubung
Dalam contoh berikut, aplikasi menggunakan
metode
getDevices()
bersama dengan nilai FEATURE_AUDIO_OUTPUT
untuk menghitung semua 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)
Untuk memberikan pengalaman pengguna terbaik, aplikasi Anda harus memastikan untuk hanya memutar 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 inti aplikasi, pilih cara pengguna berinteraksi dengan output audio aplikasi Anda.
Izinkan pengguna memilih perangkat output media
Mulai Wear OS 5, sistem menyediakan UI yang memungkinkan pengguna memilih perangkat akan memutar media dan menampilkan informasi tentang media yang sedang diputar saat ini.
Jika aplikasi Anda mendeteksi bahwa tidak ada headset Bluetooth yang terhubung saat Anda menginginkannya
untuk menyediakan pemutaran audio di perangkat yang menjalankan Wear OS 5 atau yang lebih baru, tawarkan untuk
pengguna langsung ke pengalih {i>
output<i} media. Pada perangkat yang tidak mendukung
pengalih output media, panggil intent ACTION_BLUETOOTH_SETTINGS
, yang membawa pengguna ke laman Bluetooth di pengaturan sistem.
Metode launchOutputSelection()
, bagian dari library Horologist
di GitHub, menunjukkan cara membiarkan 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 membutuhkan headset untuk melanjutkan,
daftarkan callback untuk mendeteksi kapan
pengguna menghubungkan dan memutuskan
headset Bluetooth menggunakan
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)
Jika aplikasi Anda mendeteksi bahwa tidak ada headset Bluetooth yang terhubung saat Anda akan memberikan output
audio, jangan tampilkan pesan error. Sebagai gantinya, tawarkanlah untuk mengalihkan pengguna langsung ke setelan Bluetooth
guna memudahkan mereka terhubung. Tindakan ini dapat dilakukan dengan mengirimkan intent dengan
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)
Speaker
Sebagian besar perangkat Wear OS memiliki speaker. Jika aplikasi Anda menawarkan kasus penggunaan non-media yang menggabungkan suara, pertimbangkan menggunakan speaker untuk menawarkan dimensi interaksi tambahan dengan pengguna. Misalnya, perangkat Wear OS yang dilengkapi speaker dapat memicu alarm jam atau timer, lengkap dengan notifikasi audio, dan aplikasi kebugaran mungkin menggunakan speaker untuk memberikan petunjuk latihan.
Catatan: Speaker tidak memberikan pengalaman terbaik untuk mendengarkan konten media karena tidak dirancang untuk tujuan ini.
Lihat WearSpeakerSample untuk mengetahui detailnya.
Memutar audio
Setelah Anda mendeteksi dan memilih output audio yang sesuai, proses untuk memutar audio di Wear OS sama dengan proses yang ada di perangkat seluler atau perangkat lainnya. Untuk mengetahui informasi selengkapnya, lihat Ringkasan MediaPlayer. Untuk memudahkan akses ke fitur lanjutan, seperti streaming dan mendownload media, gunakan ExoPlayer. Pastikan untuk mengikuti praktik terbaik untuk aplikasi Audio seperti Mengelola Fokus audio.
Mencegah pemutaran media yang tidak diinginkan melalui speaker
Aplikasi media dapat mengikuti panduan berikut untuk memastikan aplikasi tidak memutar konten media secara tidak sengaja pada speaker smartwatch bawaan. Panduan ini berbeda-beda berdasarkan pemutar mana yang digunakan aplikasi.
ExoPlayer
Jika aplikasi Anda menggunakan ExoPlayer:
Panggil setSuppressPlaybackOnUnsuitableOutput(true) saat membangun instance ExoPlayer:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
Tanggapi peristiwa penghentian pemutaran dengan mendaftarkan WearUnsuitableOutputPlaybackSuppressionResolverListener 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 tidak dimulai kecuali jika perangkat output yang sesuai, seperti headset atau satu set speaker eksternal, terhubung ke smartwatch. Lihat daftar berikut untuk mengetahui perangkat output yang cocok bagi 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 pengguna untuk menghubungkan perangkat tersebut ke smartwatch mereka.