Haptiklerin uygulanması

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

Tam tersine, geliştiriciler, her bir cihazın teknik özelliklerine bakılmaksızın, ekosistemdeki tüm Android telefonlarda çalışan uygulamalar oluşturmaya çalışır. Bu yaklaşım farklılığı, 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 üzere adım adım 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 haptik kullanım durumlarının diyagramı

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

Haptik uygulama kontrol listesi

  1. sabitleri uygulama

    • Haptik uygulamak için sabitlerin listesi.
  2. HAL ve API arasında 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.

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

1. Adım: Sabitleri uygulayın

Cihazınızın haptik 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. İlkellerin uygulanması

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 UI öğeleri 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 zamanlamaları (0, 30, 100, 30) ile 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 etmek için adımların akış şeması

Şekil 4. Geri bildirim 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 kullanıcı arabirimi öğeleriyle giriş olaylarına yardımcı olur.

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

Adım 2, genel HAL sabitleri ile 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 öğesinin genliği, ölçek faktörü ( S ) tarafından kontrol edilir.
    • Bu model gelişmiş donanım gerektirir. OEM'ler, VibrationEffect.Composition ile (en son haptik API'lerinin en iyi kullanımı için) gelişmiş dokunsal UX kullanmak istiyorsa, donanımlarını bu modeli kullanarak uygulamaları önerilir.

Ayrık model

API'de sağlanan tüm genel sabitlerin uygun HAL sabitleriyle eşlenmesi önerilir. Bu işleme başlamak için, cihazın HAL'de kaç tane ayrı genliğe sahip dokunsal dalga formu tanımlayabileceğini öğrenin. Bu kavram etrafında yapılandırılmış özel bir soru şuna benzer: Telefonumda insan tarafından algılanabilir genlik farklılıklarına sahip kaç tane tek dürtülü 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ı amplitüd seviyeleri üretir ve HAL'de çoklu dokunsal dalga biçimleri tanımlayabilir. HAL-API sabit eşleme, HAL sabitini alır (temel olarak orta genliği kullanarak), ardından oradan daha güçlü veya daha zayıf etkiler düzenler.

HAL sabit aralığı ve geri besleme genliklerinin şeması

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

Ayrı genliğe sahip HAL sabitlerinin sayısı tanımlandığında, HAL ve API sabitlerini HAL sabitlerinin sayısına göre eşleme zamanı gelmiştir. Bu eşleme işlemi, tek bir dürtü API sabitini en fazla üç ayrı genlik seviyesi grubuna bölebilir. API sabitlerinin bölümlere ayrılma şekli, eşlik eden giriş olayları için UX ilkelerine dayanır. Daha fazla bilgi için bkz. Haptics UX tasarımı .

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 seviyeli HAL sabitlerini birleştirmeyi düşünün. Pratikte bu kavramın bir örneği, EFFECT_CLICK ve EFFECT_HEAVY_CLICK Orta genlik seviyesi HAL sabiti olan aynı HAL sabitine eşlemek olabilir. Cihazınız ayrık genliğe sahip yalnızca bir HAL sabitini destekliyorsa, üç düzeyi de tek bir seviyede birleştirmeyi düşünün.

sürekli model

HAL sabitlerini tanımlamak için genlik ölçeklenebilirliğine sahip sürekli model uygulanabilir. Ölçeklendirilmiş HAL'yi ( 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çeklenmiş 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ımlayabilirler.

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

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

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

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

Sürekli modelde, farklı HAL sabitleri, farklı genliklerden ziyade farklı dokunsal dokuları temsil eder; ölçek faktörü ( S ) genliği yapılandırabilir. Bununla birlikte, doku algısı (örneğin keskinlik), süre ve genlik algısıyla 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östermektedir.

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. Dokuya 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 Etki 1, 2 ve 3 olarak adlandırılan üç dokunsal etkinin tanımlanmasını içerir.

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

VibrationEffect.EFFECT_CLICK sabiti, Adım 2'de sağlanan HAL-API eşlemesinde 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 dokunma duyusuna hazır olup olmadığını belirlemenize 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, vızıltılı bir titreşim olarak algılandığından önerilmez.

Kısa özel dokunsal etkinin dalga biçimi

Şekil 10. Kısa özel dokunsal efekt

Efekt 3: Genişlik varyasyonlu uzun özel dokunsal efekt

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

Genlik varyasyonlu dokunsal efekt dalga biçimi

Şekil 11. Genişlik varyasyonlu uzun özel dokunsal efekt

Efekt 3 için amplitüd kontrolünün donanım yeteneklerini kontrol etmek için Vibrator.hasAmplitudeControl() yöntemini kullanın. Sonuç, VibrationEffect.createWaveform istendiği gibi değişken genlikle yürütmek için true olmalıdır.

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

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

Sübjektif bir değerlendirme yapmak

Hızlı bir tutarlılık kontrolü için önce sübjektif bir değerlendirme yapın. Subjektif değerlendirmenin amacı, cihazın insan tarafından algılanabilen genliklere sahip haptikler üretip üretemeyeceğini belirlemek için dokunsal etkilerin genliğini gözlemlemektir.

Bu kavram etrafında yapılandırılmış özel bir soru şuna benzer: Cihaz, beklendiği gibi kullanıcılar için kolayca algılanabilir dokunsal etkiler üretebilir mi? Bu soruyu yanıtlamak, kullanıcıların hissedemeyeceği algılanamaz dokunuşlar veya dalga biçimlerinin istendiği gibi kalıplar üretmediği istenmeyen dokunmalar dahil olmak üzere başarısız dokunma teknolojilerinden kaçınmanıza yardımcı olur.