Semua peningkatan framework Android yang dibangun berdasarkan haptic didorong oleh seperangkat prinsip UX yang berkembang pada kecepatan yang sama. Saat ini prinsip terkait mengganti getaran bergetar dengan haptic yang jelas, dan dan menjelajahi haptic yang kaya.
Gambar 1. Prinsip saat ini
Tabel berikut mencantumkan semua API haptics yang tersedia.
API | Metode | Tahun ditambahkan |
---|---|---|
android.view.HapticFeedbackConstants |
|
Sebelum 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
Tampilan Android |
|
Sebelum 2016 |
android.os.Vibrator |
|
Sebelum 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.os.GetaranEffect |
|
2017 (Android 8) |
|
2019 (Android 10) | |
android.os.GetbrationEffect.Composition |
|
2020 (Android 11) |
android.media.AudioAttributes.Builder |
|
2019 (Android 10) |
Getaran bergetar
Kembali ke pager dan ponsel menengah, ERM berkualitas rendah tetapi hemat daya Getaran berbasis suara telah digunakan sebagai pengganti dering suara mode senyap. Komponen hardware lama yang menghasilkan suara derau yang terdengar dapat membahayakan UX haptik dengan mengirimkan tayangan iklan berkualitas rendah (untuk misalnya, ponsel yang murah dan rusak).
Hapus haptic
haptic yang jelas mendukung sensasi perubahan status terpisah (misalnya, perubahan biner selama proses menyalakan/mematikan). Karena sifat Kemampuan terpisah, haptic yang jelas dihasilkan sebagai entitas tunggal (untuk misalnya, satu efek haptic per satu peristiwa input).
Android bertujuan untuk memberikan haptic yang jelas dengan sensasi kuat, namun tajam daripada sensasi yang bergetar atau lembek.
Konstanta haptic yang telah ditentukan sebelumnya yang dibuat untuk mendukung haptic yang jelas mencakup berikut ini.
Di dalam
HapticFeedbackConstants
CLOCK_TICK
CONFIRM
CONTEXT_CLICK
GESTURE_END
GESTURE_START
KEYBOARD_PRESS
KEYBOARD_RELEASE
KEYBOARD_TAP
LONG_PRESS
REJECT
TEXT_HANDLE_MOVE
VIRTUAL_KEY
VIRTUAL_KEY_RELEASE
Di dalam
VibrationEffect
EFFECT_CLICK
EFFECT_DOUBLE_CLICK
EFFECT_HEAVY_CLICK
EFFECT_TICK
Membangun pengetahuan bersama antara produsen perangkat dan developer adalah kunci untuk meningkatkan kualitas haptic secara keseluruhan di ekosistem Android. Gunakan checklist dasar, penilaian hardware, dan CDD. untuk mempelajari lebih lanjut implementasi haptic.
Gambar 3. Menekan dan melepaskannya.
Haptic yang kaya
Multi-haptic yang kaya adalah kategori haptic yang terus berkembang yang lebih dari sekadar haptic tunggal efek berbasis impuls. Android bertujuan untuk mendukung haptic yang kaya dengan komposabilitas dan penyesuaian dengan tingkat perincian yang baik. Hal berikut kasus penggunaan didukung di Android 11 atau yang lebih rendah.
Gambar 4. Haptic kaya dengan tekstur geser
Gambar 5. Menarik dan menggeser
Kasus penggunaan 1: Tekstur bergeser
Jika efek haptic diulang saat jari meluncur di atas permukaan sentuh (untuk misalnya, menarik, menggeser, menjelajahi permukaan dengan tekstur haptic hantu), efek haptik berulang sebaiknya tajam dan halus.
Jika efek individualnya bergetar dan bukan tajam, maka interval antara pengulangan kemungkinan akan terhapus. Hasilnya adalah sebuah peristiwa yang panjang, bukan daripada beberapa sinyal diskrit.
Jika amplitudo tidak cukup halus, energi haptik yang dirasakan akan menumpuk melalui pengulangan, yang menghasilkan haptic yang sangat kuat di akhir pengulangan.
Mengimplementasikan tekstur haptic permukaan sederhana untuk gestur geser dan tarik
Gunakan CLOCK_TICK
dan TEXT_HANDLE_MOVE
di
HapticFeedbackConstants
Konstanta ini menentukan terlebih dahulu karakteristik pengulangan dan amplitudo.
Buat efek Anda sendiri
Untuk membuat efek Anda sendiri, buat desain dengan merangkai urutan
dari PRIMITIVE_CLICK
dan PRIMITIVE_TICK
inci
VibrationEffect.Composition
Anda dapat menyesuaikan karakteristik skala pengulangan dan amplitudo
menggunakan addPrimitive(int primitiveID, float scale, int delay)
. Dukungan bergantung pada
tindakan
CAP_COMPOSE_EFFECTS
kemampuan
Antarmuka Vibrator HAL.
Kasus penggunaan 2: Getaran panjang dengan efek kemudahan
Getaran panjang adalah getaran amplitudo halus yang bertransisi dari 0 ke amplitudo target. Getaran lama dapat menghasilkan atensi yang mudah dilihat haptic. Namun, getaran lama yang tiba-tiba dapat mengejutkan pengguna lingkungan, dan biasanya menghasilkan suara dengungan yang dapat didengar. Untuk membuat getaran panjang yang menyenangkan, terapkan efek easy-in di awal durasi getaran. Ini menghasilkan transisi amplitudo halus yang mengarah ke amplitudo target.
Terapkan efek {i>easing-in<i}
Periksa kemampuan hardware kontrol amplitudo dengan
android.os.Vibrator.hasAmplitudeControl()
- Hasilnya harus
true
untuk menghasilkan efek kemudahan dengan amplitudo yang bervariasi.
- Hasilnya harus
Gunakan
VibrationEffect
.createWaveform(timings[], amplitudes[], int repeat)
Sesuaikan rangkaian
timings[]
danamplitudes[]
untuk menghasilkan seperti yang ditunjukkan pada Gambar 6.
Gambar 6. Kurva kemudahan getaran panjang
Kasus penggunaan 3: Haptic yang digabungkan audio
haptic yang digabungkan dengan audio adalah pola haptik yang digabungkan dengan ritme audio untuk mendapatkan perhatian pengguna.
Haptic yang digabungkan dengan audio: Manfaat
Untuk menerapkan haptic yang digabungkan dengan audio, gabungkan haptic yang jelas dengan getaran panjang. Sensasi haptik yang kuat namun singkat dari haptic yang jelas menghasilkan pola ritmis. Ketika dikombinasikan dengan tingkat stimulus tinggi yang lama memberikan getaran, ini pekerjaan yang baik untuk menarik perhatian pengguna.
Penting untuk mempertimbangkan pola ritmis sensasi. Jika tidak masuk akal, ritme, pengguna merasakan sensasi haptik sebagai getaran acak, dan cenderung untuk mengabaikannya.
Gambar 7. Contoh haptic pasangan audio
Haptic yang digabungkan audio: Tips untuk mengimplementasikan
Menerapkan haptic yang digabungkan dengan audio memerlukan pemahaman dasar tentang konten pemutaran saluran audio dan haptic. Ingatlah hal-hal berikut.
Menggunakan
MediaPlayer
atauSoundPool
Google Cloud Platform.- Aset dalam format OGG dengan kunci metadata khusus
(
ANDROID_HAPTIC
diikuti dengan sejumlah saluran haptic) menunjukkan adanya data haptic dan pemutaran denganMediaPlayer
danSoundPool
.
- Aset dalam format OGG dengan kunci metadata khusus
(
Menunjukkan dukungan haptic dan pemutaran audio di
audio_policy_configuration.xml
.- Menggunakan profil output dengan saluran haptic
AUDIO_CHANNEL_OUT_HAPTIC_A|B
. - Untuk streaming output dengan saluran haptic, ingatlah bahwa fungsi haptic saluran disajikan sebagai saluran tambahan dalam data.
Contoh
Jika mask channel untuk streaming output terlihat seperti ini:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
Maka setiap sampel akan terlihat seperti ini:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A
- Menggunakan profil output dengan saluran haptic
Ubah
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
kefalse
untuk memutar saluran haptic.- Secara default, saluran haptic dibisukan (
true
). - Kasus penggunaan mencakup nada dering dan suara UI dengan haptic dan respons.
- Secara default, saluran haptic dibisukan (
Vibrator HAL harus menerapkan dukungan kontrol eksternal.
- Untuk penerapan HiDL, gunakan
setExternalControl(bool enabled) generates (Status status)
- Untuk penerapan AIDL, gunakan
void setExternalControl(in boolean enabled)
- Untuk penerapan HiDL, gunakan
Gambar 8. Mengimplementasikan haptic yang digabungkan dengan audio
Haptic yang digabungkan dengan audio: Generator Haptic
HapticGenerator
adalah Efek Audio
diperkenalkan di Android 12 yang dapat menghasilkan data
haptik dari saluran audio dan
memutarnya secara real time sebagai haptic yang digabungkan audio.
Efek diterapkan ke AudioTrack
seperti yang dijelaskan dalam Gambar 9.
Gambar 9. Arsitektur Generator Haptic
Untuk memastikan algoritme generator haptic Anda menghasilkan haptic berkualitas tinggi, setel algoritma pembangkitan ke motor vibrator perangkat dengan menyesuaikan parameter yang mengonfigurasi rantai filter yang diterapkan pada bentuk gelombang audio. Bagian ini menjelaskan parameter tersebut secara mendetail dan menjelaskan cara menyesuaikannya sesuai spesifikasi hardware Anda.
Frekuensi resonan untuk filter band-pass
Frekuensi resonansi vibrator adalah frekuensi saat aktuator haptik memiliki {i>output<i} maksimum. Parameter ini menyesuaikan anti-resonator menjadi sebagian meratakan fungsi transfer respons, untuk mendapatkan {i>bandwidth<i} yang lebih luas. Framework Android secara otomatis menautkan nilai ini ke output Metode HAL Vibrator
IVibrator.getResonantFrequency
.Nilai default untuk parameter ini adalah 150 Hz. Fungsi ini dapat diubah di kode di sini.
Kekuatan normalisasi untuk amplop lambat
Parameter ini menentukan eksponen dalam normalisasi parsial (kontrol penguatan otomatis). Nilai defaultnya adalah -0.8, yang berarti 80% variasi rentang dinamis dihapus oleh langkah kontrol peningkatan ini. Ini dapat diubah dalam kode di sini.
Faktor Q untuk filter band-stop
Faktor kualitas penggetar (faktor Q) ditentukan oleh dua parameter:
{i>Zero Q<i}, faktor kualitas dari nol dalam filter {i>band-stop<i} yang sebagian membatalkan resonansi.
Kutub Q, faktor kualitas kutub dalam filter {i>band-stop<i}.
Rasio kedua nilai tersebut membatasi penyembunyian resonansi secara berurutan untuk meningkatkan frekuensi yang lebih rendah dan memperluas respons algoritma. Misalnya, nilai default 8 untuk Zero Q dan 4 untuk Pole Q menghasilkan rasio 2, yang membatasi penyembunyian resonansi dengan faktor 2 (6 dB). Framework Android menautkan kedua nilai ke output Vibrator HAL
IVibrator.getQFactor
.Jika nilai default tidak memperhitungkan redaman kekuatan motorik di perangkat, sebaiknya ubah kedua nilai sekaligus, dan meningkatkan keduanya atau mengurangi keduanya. Rasio Zero Q terhadap Kutub Q harus lebih besar dari 1. Ini dapat diubah dalam kode di sini.
Frekuensi sudut untuk distorsi
Frekuensi sudut diterapkan oleh filter low-pass yang menekan getaran tingkat rendah dan meningkatkan level yang lebih tinggi menggunakan distorsi kubik. Setelan defaultnya adalah 300 Hz. Ini dapat diubah dalam kode di sini.
Penguatan input dan nilai minimum kubus untuk distorsi
Parameter ini digunakan oleh filter distorsi nonlinear yang diterapkan pada bentuk gelombang input yang meredam amplitudo sinyal frekuensi yang lebih rendah dan akan meningkatkan frekuensi yang lebih tinggi.
- Nilai default untuk faktor penguatan input adalah 0.3.
- Nilai default untuk ambang batas kubus adalah 0.1.
Sebaiknya ubah kedua nilai secara bersamaan. Dapat ditemukan dalam kode di sini.
Untuk informasi selengkapnya tentang fungsi yang diterapkan oleh filter ini, lihat penerapan yang tersedia tersedia di sini. Untuk mempelajari lebih lanjut tentang bagaimana kedua parameter ini mempengaruhi output, kita sebaiknya merencanakan respons frekuensi filter tersebut dan mengamati respons frekuensi berubah dengan parameter value yang berbeda.
Penguatan output untuk distorsi
Parameter ini mengontrol amplitudo getaran akhir. Merupakan keuntungan akhir diterapkan setelah pembatas lembut yang membatasi amplitudo getaran ke tingkat yang lebih rendah dari 1. Nilai defaultnya adalah 1.5, dan dapat diubah di kode di sini. Jika getarannya terlalu halus, tingkatkan nilainya. Jika Anda dapat mendengar getaran perangkat keras aktuator, kurangi nilainya.