Haptiklerin Uygulanması

Cihaz üreticileri genellikle her cihaz için oluşturulan özel varlıkların sahipleri olarak kabul edilir. Bu nedenle, mühendislik çabaları genellikle cihaz bazındadır ; ekosistemdeki diğer cihazların tutarlılığı için çok az çaba harcanır veya hiç çaba gösterilmez.

Bunun tam tersine geliştiriciler, her cihazın teknik özelliklerinden bağımsız olarak ekosistemdeki tüm Android telefonlarda çalışan uygulamalar oluşturmaya çalışır. Yaklaşımdaki bu farklılık, bir parçalanma sorununa neden olabilir; örneğin, belirli telefonların donanım özellikleri, uygulama geliştiricileri tarafından belirlenen beklentilerle eşleşmez. Bu nedenle, haptik API'leri bazı Android telefonlarda çalışıyor ancak diğerlerinde çalışmıyorsa, sonuç tutarsız bir ekosistemdir. Bu nedenle donanım yapılandırması, üreticilerin Android haptics API'lerini her cihaza uygulayabilmelerini sağlamada kritik bir rol oynar.

Bu sayfa, Android haptics API'lerinin en iyi şekilde kullanılması için donanım uyumluluğunu ayarlamak için adım adım bir kontrol listesi sağlar.

Aşağıdaki şekil, uyumlu bir ekosistem oluşturmada kritik bir adım olan cihaz üreticileri ve geliştiriciler arasında ortak bilgi oluşturmayı göstermektedir.

Uygulama geliştiricileri ve cihaz üreticileri için dokunsal kullanım örnekleri diyagramı

Şekil 1. Cihaz üreticileri ve geliştiriciler arasında bilgi birikimi oluşturma

Haptics uygulama kontrol listesi

  1. Sabitleri uygula

    • Haptikleri uygulamak için sabitlerin listesi.
  2. HAL ve API arasındaki harita sabitleri

  3. Donanımı değerlendirin

    • Hedef dokunsal etkilerle ilgili talimatlar. Donanımınız üzerinde hızlı kontroller yapmak için bu talimatları kullanın.

Bu adımların her birini aşağıda daha ayrıntılı olarak inceleyeceğiz.

Adım 1: Sabitleri uygulayın

Cihazınızın haptikleri uygulamak için minimum gereksinimleri karşılayıp karşılamadığını belirlemek için bu kontrolleri gerçekleştirin.

Haptik uygulama sürecinin akış şeması

Şekil 2. Uygulama etkileri

İlkelleri uygulamaya yönelik adımların akış şeması

Şekil 3. İlkelleri uygulama

Aşağıdaki dokunsal sabitlerin uygulama durumunu kontrol edin.

dokunsal sabitler Konumlar ve özetler
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK VibrationEffect sınıfı
VibrationEffect dokunsal sabitler, herhangi bir girdi olayı kavramı içermez ve hiçbir UI öğesi içermez. Sabitler, bunun yerine createPredefined() tarafından çağrılan EFFECT_CLICK ve EFFECT_HEAVY_CLICK gibi enerji seviyeleri kavramını içerir.
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD VibrationEffect.Composition sınıfı
VibrationEffect.Composition içindeki dokunsal sabitlerin, addPrimitive(int primitiveId, float scale, int delay) tarafından çağrılan ölçeklenebilir yoğunluğa sahip olmasına izin verilir.

Aşağıda açıklanan alternatif titreşimler, VibrationEffect sabitlerini uygulamayan cihazlarda gerçekleştirilecektir. Bu tür cihazlarda en iyi performansı gösterecek şekilde bu yapılandırmaların güncellenmesi önerilir.

  1. EFFECT_CLICK

    VibrationEffect.createWaveform ile oluşturulan dalga formu titreşimi ve frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern yapılandırılan zamanlamalar.

  2. EFFECT_HEAVY_CLICK

    VibrationEffect.createWaveform ile oluşturulan dalga formu titreşimi ve frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern yapılandırılan zamanlamalar.

  3. EFFECT_DOUBLE_CLICK

    VibrationEffect.createWaveform ve zamanlamalarla (0, 30, 100, 30) oluşturulan dalga formu titreşimi.

  4. EFFECT_TICK

    VibrationEffect.createWaveform ile oluşturulan dalga formu titreşimi ve frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern yapılandırılan zamanlamalar.

Dokunsal geri bildirimi test etme adımlarının akış şeması

Şekil 4. Geri besleme sabitlerini uygulama

Aşağıdaki genel geri bildirim sabitlerinin durumunu kontrol edin.

dokunsal sabitler Konumlar ve özetler

CLOCK_TICK , CONTEXT_CLICK , KEYBOARD_PRESS , KEYBOARD_RELEASE , KEYBOARD_TAP , LONG_PRESS , TEXT_HANDLE_MOVE , VIRTUAL_KEY , VIRTUAL_KEY_RELEASE , CONFIRM , REJECT GESTURE_START , GESTURE_END

HapticFeedbackConstants sınıfı
HapticFeedbackConstants içindeki dokunsal sabitler, HapticFeedbackConstants performHapticFeedback() tarafından çağrılan KEYBOARD_PRESS ve KEYBOARD_RELEASE gibi belirli UI öğeleriyle giriş olaylarına yardımcı olur.

2. Adım: HAL ve API arasındaki sabitleri eşleyin

Adım 2, genel HAL sabitleri ve API sabitleri arasında önerilen eşlemeleri sunar. Adım 1'de değerlendirilen donanım HAL sabitlerini uygulamıyorsa, benzer çıktılar oluşturmak için Adım 1'de açıklanan geri dönüş modellerini güncellemek için Adım 2 kullanılmalıdır. Eşleme, iki farklı varsayılan model tarafından desteklenir.

  • Ayrık model (basit)

    • Genlik, bu modelin anahtar değişkenidir. HAL'deki her varlık farklı bir dokunsal genliği temsil eder.
    • Bu model, temel dokunsal UX'i uygulamak için gereken minimum gereksinimdir.
    • Daha gelişmiş bir dokunsal UX, gelişmiş donanım ve gelişmiş bir model (sürekli model) gerektirir.
  • Sürekli model (gelişmiş)

    • Doku ve genlik bu modelin temel değişkenleridir. HAL'deki her varlık farklı dokunsal dokuları temsil eder. Her HAL varlığının genliği, ölçek faktörü ( S ) tarafından kontrol edilir.
    • Bu model gelişmiş donanım gerektirir. OEM'ler VibrationEffect.Composition ile gelişmiş dokunsal UX kullanmak istiyorsa (en yeni haptik API'lerinin en iyi kullanımı için), donanımlarını bu modeli kullanarak uygulamaları önerilir.

ayrık model

API'de sağlanan tüm genel sabitlerin uygun HAL sabitleriyle eşleştirilmesi önerilir. Bu işleme başlamak için, aygıtın HAL'de tanımlayabileceği ayrık genliğe sahip kaç tane haptik dalga biçimini bulun. Bu kavram etrafında yapılandırılmış belirli bir soru şuna benzer: Telefonumda insan tarafından algılanabilir genlik farklılıklarına sahip kaç adet tek darbeli dokunsal etki tanımlanabilir? Bu sorunun cevabı haritalamayı belirler.

HAL sabitlerini tanımlamak donanıma bağlı bir işlemdir. Örneğin, giriş seviyesi bir telefon, yalnızca tek bir dokunsal dalga formu üretecek donanım özelliklerine sahip olabilir. Daha gelişmiş donanım bileşenlerine sahip cihazlar, daha geniş bir aralıkta ayrık genlik seviyeleri üretir ve HAL'de birden çok dokunsal dalga biçimi tanımlayabilir. HAL-API sabit eşlemesi, HAL sabitini alır (temel olarak orta genliği kullanır), ardından buradan daha güçlü veya daha zayıf etkileri düzenler.

HAL sabit aralığı ve geri besleme genlikleri diyagramı

Şekil 5. Genliğe göre HAL sabit aralığı

Ayrık genliğe sahip HAL sabitlerinin sayısı tanımlandığında, HAL ve API sabitlerini HAL sabitlerinin sayısına göre eşleştirmenin zamanı geldi. Bu eşleme işlemi, tek bir dürtü API sabitini üç ayrı genlik düzeyi grubuna kadar bölümlere ayırabilir. API sabitlerinin bölümlere ayrılma şekli, eşlik eden girdi olaylarına yönelik UX ilkelerine dayanır. Daha fazla bilgi için bkz. Haptics UX Design .

HAL-API sabit eşlemesi için ayrık model

Şekil 6. HAL-API sabit eşlemesi: Ayrık model

Cihazınız ayrı genliklere sahip yalnızca iki HAL sabitini destekliyorsa, Orta ve Yüksek genlik düzeyi HAL sabitlerini birleştirmeyi düşünün. Pratikte bu kavramın bir örneği, EFFECT_CLICK ve EFFECT_HEAVY_CLICK aynı HAL sabitine eşlemek olabilir; bu, Orta genlik seviyesi HAL sabiti olacaktır. Cihazınız ayrı genliğe sahip yalnızca bir HAL sabitini destekliyorsa, üç düzeyi tek bir düzeyde birleştirmeyi düşünün.

Sürekli model

HAL sabitlerini tanımlamak için genlik ölçeklenebilirliğine sahip sürekli model uygulanabilir. Ölçeklenmiş HAL ( HAL_H0 x S ) üretmek için HAL sabitlerine (örneğin, HAL_H0 , HAL_H1 ) bir ölçek faktörü ( S ) uygulanabilir. Bu durumda, ölçeklenen HAL, şekil 7'de gösterildiği gibi API sabitlerini ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) tanımlamak için eşlenir. Sürekli modelin genlik ölçeklenebilirliğini kullanarak, bir cihaz, ayırt edici dokulara sahip az sayıda HAL sabiti depolayabilir. ve ölçek faktörünü ( S ) ayarlayarak genlik varyasyonları ekleyin. Cihaz üreticileri, kaç farklı dokunsal doku sağlamak istediklerine bağlı olarak HAL sabitlerinin sayısını tanımlayabilir.

Doku ve genliğe göre HAL sabit aralığı

Şekil 7. Dokuya göre HAL sabit aralığı (HAL_H0) ve genlik ölçeği (S)

HAL-API sabit eşlemesi için sürekli model

Şekil 8. HAL-API sabit eşleme: Sürekli model

Sürekli modelde, farklı HAL sabitleri, farklı genlikler yerine farklı dokunsal dokuları temsil eder; ölçek faktörü ( S ) genliği yapılandırabilir. Ancak, doku algısı (örneğin keskinlik) süre ve genlik algısı ile ilgili olduğundan, doku ve ölçek faktörünün (HAL-API eşleme tasarım sürecinde) birleştirilmesi önerilir.

Şekil 7, genlik ölçeklenebilirliği ile bir HAL'den birçok API sabitine varyasyonu artırarak sabit eşlemeyi gösterir.

Artan Varyasyon 1

Artan Varyasyon 2

Şekil 9. Genlik ölçeklenebilirliği ile artan varyasyon

Not: Yukarıdaki şekil, belirli bir sabit eşleme örneğini göstermektedir, bu nedenle adlandırma kuralları varsayımsaldır. Bu işlemi gerçekleştirmek her cihaz üreticisi için benzersizdir.

VibrationEffect.Composition içindeki PRIMITIVE_TICK ve PRIMITIVE_CLICK gibi tüm ölçeklenebilir API sabitleri için, API sabiti addPrimitive(int primitiveID, float scale, int delay) aracılığıyla bildirildiğinde API sabitinin enerji düzeyi float scale parametresine bağlıdır. PRIMITIVE_TICK ve PRIMITIVE_CLICK , farklı HAL sabitleri kullanılarak net bir ayrımla tasarlanabilir. Texture'a varyasyon eklemek istiyorsanız bu yaklaşım önerilir.

3. Adım: Donanımı değerlendirin

Donanım değerlendirmesi, bu özel değerlendirme için Etkiler 1, 2 ve 3 olarak etiketlenen üç dokunsal etkinin tanımlanmasını içerir.

Etki 1: Önceden tanımlanmış kısa dokunsal sabitler

VibrationEffect.EFFECT_CLICK sabiti, 2. Adımda sağlanan HAL-API eşlemesindeki temel etki veya ortak paydadır. En çok kullanılan efekt olan HapticFeedbackConstants.KEYBOARD_PRESS ile eşlenir. Bu etkinin değerlendirilmesi, hedef cihazınızın net haptikler için hazır olup olmadığını belirlemeye yardımcı olur.

Efekt 2: Kısa özel dokunsal efekt

VibrationEffect.createOneShot(20,255) sabiti, özel dokunsal efektler içindir. Kısa, tek özel darbeler için süreyi tanımlamak için önerilen maksimum eşik 20 ms'dir. 20 ms'den uzun tek bir darbe, sesli bir titreşim olarak algılandığından önerilmez.

Kısa özel dokunsal efektin dalga biçimi

Şekil 10. Kısa özel dokunsal efekt

Efekt 3: Genlik varyasyonu ile uzun özel dokunsal efekt

VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) sabiti, genlik varyasyonu olan uzun özel efektler içindir. Özel dokunsal efektler için değişken genlikler üretme yeteneği, cihazın zengin haptikler için yeteneklerini değerlendirme göstergelerinden biridir. Önerilen timings [] ve amplitudes [] sırasıyla {500, 500} ve {128, 255} şeklindedir ve bu, 500 ms'lik bir örnekleme oranıyla %50'den %100'e artan bir amplitüd eğilimi sunar.

Genlik varyasyonu ile dokunsal etki dalga formu

Şekil 11. Genlik varyasyonu ile uzun özel dokunsal etki

Efekt 3 için genlik kontrolünün donanım özelliklerini kontrol etmek için Vibrator.hasAmplitudeControl() yöntemini kullanın. VibrationEffect.createWaveform amaçlandığı gibi değişen genlikte yürütmek için sonucun true olması gerekir.

Sübjektif dokunsal etki değerlendirmesinin akış şeması

Şekil 12. Haptik etki 1, 2 ve 3'ün özne değerlendirmesi

Sübjektif bir değerlendirme yapmak

Hızlı bir tutarlılık kontrolü için önce öznel bir değerlendirme yapın. Sübjektif değerlendirmenin amacı, cihazın insan tarafından algılanabilir genliklere sahip haptikler oluşturup oluşturamayacağını belirlemek için haptik etkilerin genliğini gözlemlemektir.

Bu kavram etrafında yapılandırılmış özel bir soru şuna benziyor: Cihaz, beklendiği gibi kullanıcılara kolayca algılanabilir dokunsal etkiler üretebiliyor mu? Bu soruyu yanıtlamak, kullanıcıların hissedemeyeceği algılanamayan haptikler veya dalga biçimlerinin istendiği gibi desenler üretmediği istenmeyen haptikler dahil olmak üzere başarısız haptiklerden kaçınmanıza yardımcı olur.