हैप्टिक लागू करें

आम तौर पर, डिवाइस बनाने वाली कंपनियों को हर डिवाइस के लिए बनाई गई निजी एसेट का मालिकाना हक माना जाता है. इसलिए, उनकी इंजीनियरिंग की कोशिशें अक्सर हर डिवाइस के हिसाब से होती हैं. इकोसिस्टम में मौजूद अन्य डिवाइसों के लिए, बहुत कम या कोई भी कोशिश नहीं की जाती.

इसके उलट, डेवलपर ऐसे ऐप्लिकेशन बनाने की कोशिश करते हैं जो नेटवर्क के सभी Android फ़ोन पर काम करते हों. भले ही, हर डिवाइस की तकनीकी जानकारी अलग-अलग हो. अलग-अलग तरीकों से काम करने की वजह से, फ़्रैगमेंटेशन की समस्या आ सकती है. उदाहरण के लिए, कुछ फ़ोन की हार्डवेयर क्षमताएं, ऐप्लिकेशन डेवलपर की उम्मीदों के मुताबिक नहीं होती हैं. इसलिए, अगर haptics API कुछ Android फ़ोन पर काम करते हैं, लेकिन कुछ पर नहीं, तो इससे एक जैसा नेटवर्क नहीं बन पाता. इसलिए, हार्डवेयर कॉन्फ़िगरेशन यह पक्का करने में अहम भूमिका निभाता है कि मैन्युफ़ैक्चरर, हर डिवाइस पर Android haptics API लागू कर सकें.

इस पेज पर, Android के haptics API का बेहतर तरीके से इस्तेमाल करने के लिए, हार्डवेयर के लिए ज़रूरी शर्तों को सेट अप करने के बारे में सिलसिलेवार निर्देश दिए गए हैं.

नीचे दी गई इमेज में, डिवाइस बनाने वाली कंपनियों और डेवलपर के बीच सामान्य जानकारी बनाने के बारे में बताया गया है. यह एक बेहतर इकोसिस्टम बनाने के लिए ज़रूरी है.

ऐप्लिकेशन डेवलपर और डिवाइस बनाने वाली कंपनियों के लिए, वाइब्रेशन की सुविधा के इस्तेमाल के उदाहरणों का डायग्राम

पहला डायग्राम. डिवाइस बनाने वाली कंपनियों और डेवलपर के बीच जानकारी शेयर करना

हैप्टिक्स को लागू करने से जुड़ी चेकलिस्ट

  1. कॉन्सटेंट लागू करना

    • हैप्टिक्स लागू करने के लिए, कॉन्स्टेंट की सूची.
  2. HAL और एपीआई के बीच कॉन्स्टेंट मैप करना

  3. हार्डवेयर का आकलन करना

    • टारगेट किए गए हैप्टिक इफ़ेक्ट के बारे में निर्देश. अपने हार्डवेयर की तुरंत जांच करने के लिए, इन निर्देशों का पालन करें.

हम इनमें से हर चरण के बारे में ज़्यादा जानकारी यहां देंगे.

पहला चरण: कॉन्स्टेंट लागू करना

इन जांचों की मदद से पता लगाएं कि आपका डिवाइस, वाइब्रेशन की सुविधा को लागू करने से जुड़ी ज़रूरी शर्तें पूरी करता है या नहीं.

हैप्टिक्स की सुविधा लागू करने की प्रोसेस का फ़्लोचार्ट

दूसरी इमेज. इफ़ेक्ट लागू करना

प्राइमिटिव लागू करने के चरणों का फ़्लोचार्ट

तीसरी इमेज. प्राइमिटिव लागू करना

यहां दिए गए हैप्टिक कॉन्स्टेंट के लागू होने की स्थिति देखें.

हैप्टिक कॉन्स्टेंट जगहें और खास जानकारी
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK VibrationEffect क्लास
VibrationEffect में हैप्टिक कॉन्सटेंट में इनपुट इवेंट का कोई भी नेशन शामिल नहीं होता. साथ ही, इनमें यूज़र इंटरफ़ेस (यूआई) एलिमेंट भी शामिल नहीं होता है. कॉन्सटेंट में ऊर्जा के लेवल का मतलब होता है, जैसे कि EFFECT_CLICK और EFFECT_HEAVY_CLICK. इन्हें createPredefined() कहा जाता है.
PRIMITIVE_TICK, PRIMITIVE_CLICK, PRIMITIVE_LOW_TICK>, PRIMITIVE_SLOW_RISE, PRIMITIVE_QUICK_RISE, PRIMITIVE_QUICK_FALL, PRIMITIVE_SPIN, PRIMITIVE_THUD VibrationEffect.Composition क्लास
VibrationEffect.Composition में हैप्टिक कॉन्सटेंट को बढ़ाने के लिए, स्केलेबल इंटेंसिटी का इस्तेमाल किया जा सकता है. इसे addPrimitive(int primitiveId, float scale, int delay) कहा जाता है.

नीचे बताए गए वैकल्पिक वाइब्रेशन, उन डिवाइसों पर किए जाते हैं जिन पर VibrationEffect कॉन्सटेंट लागू नहीं होता है. हमारा सुझाव है कि आप इन कॉन्फ़िगरेशन को अपडेट करें, ताकि ये डिवाइसों पर बेहतर तरीके से काम कर सकें.

  1. EFFECT_CLICK

    VibrationEffect.createWaveform की मदद से बनाया गया वेवफ़ॉर्म वाइब्रेशन और frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern पर कॉन्फ़िगर की गई समयावधि.

  2. EFFECT_HEAVY_CLICK

    VibrationEffect.createWaveform की मदद से बनाया गया वेवफ़ॉर्म वाइब्रेशन और frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern पर कॉन्फ़िगर की गई समयावधि.

  3. EFFECT_DOUBLE_CLICK

    VibrationEffect.createWaveform और समय (0, 30, 100, 30) का इस्तेमाल करके बनाया गया वेवफ़ॉर्म वाइब्रेशन.

  4. EFFECT_TICK

    VibrationEffect.createWaveform के साथ बनाया गया वेवफ़ॉर्म वाइब्रेशन और frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern पर कॉन्फ़िगर किए गए समय.

हैप्टिक फ़ीडबैक की जांच करने के चरणों का फ़्लोचार्ट

चौथी इमेज. सुझाव/राय देने की सुविधा को लागू करना

यहां दिए गए सार्वजनिक सुझाव/राय/शिकायत वाले कॉन्स्टेंट की स्थिति देखें.

हैप्टिक कॉन्सटेंट जगहें और खास जानकारी
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 क्लास
HapticFeedbackConstants में मौजूद हफ़्टीक कॉन्स्टेंट, KEYBOARD_PRESS और KEYBOARD_RELEASE जैसे कुछ यूज़र इंटरफ़ेस (यूआई) एलिमेंट के साथ इनपुट इवेंट में मदद करते हैं. इन्हें performHapticFeedback() से कॉल किया जाता है.

दूसरा चरण: HAL और API के बीच कॉन्स्टेंट मैप करना

दूसरे चरण में, सार्वजनिक HAL कॉन्स्टेंट और एपीआई कॉन्स्टेंट के बीच सुझाई गई मैपिंग दिखाई जाती है. अगर पहले चरण में आकलन किया गया हार्डवेयर, एचएएल कॉन्सटेंट को लागू नहीं करता है, तो पहले चरण में बताए गए फ़ॉलबैक पैटर्न को अपडेट करने के लिए, दूसरे चरण का इस्तेमाल किया जाना चाहिए. इससे, मिलते-जुलते आउटपुट जनरेट किए जा सकते हैं. मैपिंग के लिए, दो अलग-अलग डिफ़ॉल्ट मॉडल का इस्तेमाल किया जाता है.

  • डिस्क्रीट मॉडल (सरल)

    • ऐंप्लीट्यूड इस मॉडल का मुख्य वैरिएबल है. एचएएल की हर इकाई एक अलग हैप्टिक आयाम दिखाती है.
    • बेसिक हैप्टिक UX को लागू करने के लिए, यह मॉडल एक ज़रूरी शर्त है.
    • बेहतर हैप्टिक यूज़र एक्सपीरियंस के लिए, बेहतर हार्डवेयर और बेहतर मॉडल (कंटिन्यूअस मॉडल) की ज़रूरत होती है.
  • लगातार मॉडल (बेहतर)

    • टेक्स्चर और ऐम्प्लिटीड्यून, इस मॉडल के मुख्य वैरिएबल हैं. एचएएल की हर इकाई अलग-अलग हैप्टिक टेक्सचर दिखाती है. हर HAL इकाई के ऐम्प्लitude को स्केल फ़ैक्टर (S) से कंट्रोल किया जाता है.
    • इस मॉडल के लिए बेहतर हार्डवेयर की ज़रूरत होती है. अगर OEM, VibrationEffect.Composition के साथ बेहतर हैप्टिक यूज़र एक्सपीरियंस (नए हैप्टिक्स एपीआई का सबसे अच्छा इस्तेमाल करने के लिए) का इस्तेमाल करना चाहते हैं, तो हमारा सुझाव है कि वे इस मॉडल का इस्तेमाल करके अपना हार्डवेयर लागू करें.

डिस्क्रीट मॉडल

हमारा सुझाव है कि एपीआई में दी गई सभी सार्वजनिक कॉन्स्टेंट को, सही एचएएल कॉन्स्टेंट के साथ मैप करें. इस प्रोसेस को शुरू करने के लिए, पता लगाएं कि डिवाइस, एचएएल में अलग-अलग ऐम्प्ल्यट्यूड वाले कितने हैप्टिक वेवफ़ॉर्म तय कर सकता है. इस सोच को ध्यान में रखकर बनाया गया खास सवाल कुछ ऐसा दिखता है: मेरे फ़ोन में कितने सिंगल-इंप्स हैप्टिक इफ़ेक्ट के बारे में बताया जा सकता है, जिसमें लोगों को पता चलता है कि उनका आयाम कितना बदल सकता है? इस सवाल के जवाब से मैपिंग तय होती है.

एचएएल के कॉन्स्टेंट तय करना, हार्डवेयर पर निर्भर करता है. उदाहरण के लिए, हो सकता है कि एंट्री-लेवल फ़ोन में सिर्फ़ एक वाइब्रेशन वेवफ़ॉर्म जनरेट करने की हार्डवेयर क्षमता हो. ज़्यादा बेहतर हार्डवेयर कॉम्पोनेंट वाले डिवाइसों में अलग-अलग डाइमेंशन लेवल की बड़ी रेंज पैदा होती है. साथ ही, एचएएल में कई हैप्टिक वेवफ़ॉर्म बनाए जा सकते हैं. HAL-एपीआई कॉन्सटेंट मैपिंग में एचएएल कॉन्स्टेंट शामिल होता है और इसमें मीडियम डाइमेंशन का इस्तेमाल बेसलाइन के तौर पर किया जाता है. इसके बाद, यह एचएएल कॉन्सटेंट की मदद से मज़बूत या कमज़ोर इफ़ेक्ट को व्यवस्थित करता है.

एचएएल की लगातार रेंज और फ़ीडबैक ऐम्प्ल्यट्यूड का डायग्राम

पांचवीं इमेज. आयाम के हिसाब से एचएएल की कॉन्स्टेंट रेंज

अलग-अलग ऐम्प्ल्यट्यूड वाले एचएएल कॉन्स्टेंट की संख्या तय करने के बाद, एचएएल कॉन्स्टेंट की संख्या के हिसाब से एचएएल और एपीआई कॉन्स्टेंट को मैप करना ज़रूरी है. इस मैपिंग प्रोसेस से, एक इंपल्स एपीआई कॉन्स्टेंट को, ऐम्प्ल्यट्यूड लेवल के तीन अलग-अलग ग्रुप में बांटा जा सकता है. एपीआई कॉन्स्टेंट को सेगमेंट करने का तरीका, इनपुट इवेंट के साथ यूज़र एक्सपीरियंस (यूएक्स) के सिद्धांतों पर आधारित होता है. ज़्यादा जानकारी के लिए, हैप्टिक्स यूज़र इंटरफ़ेस (UX) डिज़ाइन देखें.

HAL-API के लिए कॉन्स्टेंट मैपिंग का डिसक्रेट मॉडल

छठी इमेज. HAL-API कॉन्स्टेंट मैपिंग: डिस्क्रेट मॉडल

अगर आपका डिवाइस, अलग-अलग ऐम्प्ल्यट्यूड वाले सिर्फ़ दो एचएएल कॉन्स्टेंट के साथ काम करता है, तो मध्यम और ज़्यादा ऐम्प्ल्यट्यूड लेवल के एचएएल कॉन्स्टेंट को मर्ज करें. इस सिद्धांत को लागू करने का उदाहरण यह है कि EFFECT_CLICK और EFFECT_HEAVY_CLICK को एक ही एचएएल कॉन्स्टेंट पर मैप किया जाए. यह एचएएल कॉन्स्टेंट, मीडियम ऐम्प्ल्यट्यूड लेवल का एचएएल कॉन्स्टेंट होगा. अगर आपके डिवाइस पर अलग-अलग ऐम्प्ल्यट्यूड के साथ सिर्फ़ एक एचएएल कॉन्स्टेंट काम करता है, तो तीनों लेवल को एक में मर्ज करें.

कंटीन्यूअस मॉडल

एएमप्ल्यट्यूड स्केलेबिलिटी वाले लगातार मॉडल का इस्तेमाल, एचएएल के कॉन्स्टेंट तय करने के लिए किया जा सकता है. स्केल किए गए एचएएल (HAL_H0 x S) बनाने के लिए, एचएएल के कॉन्स्टेंट (उदाहरण के लिए, HAL_H0, HAL_H1) पर स्केल फ़ैक्टर (S) लागू किया जा सकता है. इस मामले में, स्केल किए गए एचएएल को एपीआई कॉन्स्टेंट (HAL_H0 x S1 = H0S1 = EFFECT_TICK) तय करने के लिए मैप किया जाता है, जैसा कि फ़िगर 7 में दिखाया गया है. डिवाइस में, ऐम्प्ल्यफ़िकेशन को लगातार बदलने वाले मॉडल का इस्तेमाल करके, अलग-अलग टेक्स्चर के साथ कुछ एचएएल कॉन्स्टेंट सेव किए जा सकते हैं. साथ ही, स्केल फ़ैक्टर (S) में बदलाव करके, ऐम्प्ल्यफ़िकेशन में बदलाव किए जा सकते हैं. डिवाइस मैन्युफ़ैक्चरर, एचएएल कॉन्स्टेंट की संख्या तय कर सकते हैं. यह इस बात पर निर्भर करता है कि उन्हें कितने अलग-अलग हैप्टिक टेक्स्चर देने हैं.

टेक्स्चर और ऐम्प्ल्यट्यूड के हिसाब से एचएएल की कॉन्स्टेंट रेंज

सातवीं इमेज. टेक्स्चर (HAL_H0) और ऐम्प्ल्यट्यूड स्केल (S) के हिसाब से एचएएल की कॉन्सटेंट रेंज

HAL-API के लिए, लगातार मैपिंग करने वाला मॉडल

आठवीं इमेज. HAL-API कॉन्सटेंट मैपिंग: लगातार अपडेट होने वाला मॉडल

लगातार चलने वाले मॉडल में, अलग-अलग एएमपीलिटी के बजाय, अलग-अलग एचएएल कॉन्स्टेंट अलग-अलग हैप्टिक टेक्स्चर दिखाते हैं. स्केल फ़ैक्टर (S) से एएमप्लिटी को कॉन्फ़िगर किया जा सकता है. हालांकि, टेक्स्चर की परसेप्शन (उदाहरण के लिए, शार्पनेस) अवधि और ऐम्प्ल्यट्यूड की परसेप्शन से जुड़ी होती है. इसलिए, हमारा सुझाव है कि HAL-API मैपिंग की डिज़ाइन प्रोसेस में, टेक्स्चर और स्केल फ़ैक्टर को एक साथ जोड़ा जाए.

सातवें चित्र में, एक एचएएल से कई एपीआई कॉन्स्टेंट में बदलाव करके, कॉन्स्टेंट मैपिंग को दिखाया गया है. साथ ही, इसमें एम्प्लitude स्केलेबिलिटी का इस्तेमाल किया गया है.

वृद्धि 1

वैरिएशन 2 बढ़ाना

नौवीं इमेज. ऐम्प्लिटीड को स्केल करने की सुविधा की मदद से वैरिएशन बढ़ाना

VibrationEffect.Composition में मौजूद PRIMITIVE_TICK और PRIMITIVE_CLICK जैसे सभी स्केलेबल एपीआई कॉन्स्टेंट के लिए, एपीआई कॉन्स्टेंट का एनर्जी लेवल, float scale पैरामीटर पर निर्भर करता है. ऐसा तब होता है, जब एपीआई कॉन्स्टेंट को addPrimitive(int primitiveID, float scale, int delay) के ज़रिए एलान किया जाता है. PRIMITIVE_TICK और PRIMITIVE_CLICK को अलग-अलग एचएएल कॉन्सटेंट का इस्तेमाल करके एक साफ़ अंतर के साथ डिज़ाइन किया जा सकता है. अगर आपको टेक्सचर में वैरिएशन जोड़ना है, तो इस तरीके का सुझाव दिया जाता है.

तीसरा चरण: हार्डवेयर का आकलन करना

हार्डवेयर की जांच में, तीन हैप्टिक इफ़ेक्ट तय करने होते हैं. इस खास जांच के लिए, इन्हें इफ़ेक्ट 1, 2, और 3 के तौर पर लेबल किया जाता है.

पहला इफ़ेक्ट: पहले से तय किए गए छोटे हैप्टिक कॉन्स्टेंट

VibrationEffect.EFFECT_CLICK कंसटेंट, दूसरे चरण में दी गई एचएएल-एपीआई मैपिंग में बेसलाइन इफ़ेक्ट या कॉमन डेनोमिनेटर होता है. इसे सबसे ज़्यादा इस्तेमाल किए जाने वाले इफ़ेक्ट, HapticFeedbackConstants.KEYBOARD_PRESS के साथ मैप किया गया है. इस असर का आकलन करने से, यह तय करने में मदद मिलती है कि आपका टारगेट डिवाइस, साफ़ हप्टिक्स के लिए तैयार है या नहीं.

दूसरा इफ़ेक्ट: पसंद के मुताबिक बनाया गया छोटा हैप्टिक इफ़ेक्ट

VibrationEffect.createOneShot(20,255) कांटस्टेंट, पसंद के मुताबिक हैप्टिक इफ़ेक्ट के लिए है. छोटे और एक बार के कस्टम इंपल्स के लिए, गति की अवधि तय करने के लिए 20 मिलीसेकंड का सुझाव दिया जाता है. एक बार में 20 मिलीसेकंड से ज़्यादा का इंपल्स इस्तेमाल करने का सुझाव नहीं दिया जाता, क्योंकि इसे ज़्यादा वाइब्रेशन के तौर पर महसूस किया जाता है.

छोटे कस्टम हैप्टिक इफ़ेक्ट का वेवफ़ॉर्म

10वीं इमेज. छोटा कस्टम हैप्टिक इफ़ेक्ट

तीसरा इफ़ेक्ट: ऐम्प्ल्यट्यूड में बदलाव के साथ लंबा कस्टम हैप्टिक इफ़ेक्ट

VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) वाला कॉन्स्टेंट, लंबे समय तक चलने वाले कस्टम इफ़ेक्ट के लिए होता है. इसमें ऐम्प्ल्यट्यूड में बदलाव होता है. बेहतर हैप्टिक्स के लिए डिवाइस की क्षमताओं का आकलन करने के लिए, पसंद के मुताबिक हैप्टिक इफ़ेक्ट के लिए अलग-अलग ऐम्प्ल्यट्यूड जनरेट करने की सुविधा एक इंडिकेटर है. timings [] और amplitudes [] के लिए सुझाए गए वैल्यू {500, 500} और {128, 255} हैं. इनसे पता चलता है कि 500 एमएस के सैंपलिंग रेट के साथ, ऐम्प्ल्यट्यूड में 50% से 100% तक की बढ़ोतरी हुई है.

ऐंप्लीट्यूड में बदलाव के साथ हैप्टिक इफ़ेक्ट की वेवफ़ॉर्म

11वीं इमेज. लंबे समय तक चलने वाला कस्टम हैप्टिक इफ़ेक्ट, जिसमें ऐम्प्ल्यट्यूड में बदलाव होता है

इफ़ेक्ट 3 के लिए, ऐम्प्लीट्यूड कंट्रोल की हार्डवेयर क्षमताओं की जांच करने के लिए, Vibrator.hasAmplitudeControl() तरीके का इस्तेमाल करें. VibrationEffect.createWaveform को ज़रूरत के हिसाब से अलग-अलग ऐम्प्ल्यट्यूड के साथ इस्तेमाल करने के लिए, नतीजा true होना चाहिए.

व्यक्तिगत तौर पर, हैप्टिक इफ़ेक्ट के आकलन का फ़्लोचार्ट

12वीं इमेज. पहली, दूसरी, और तीसरी हैप्टिक इफ़ेक्ट के विषय का आकलन

अपने हिसाब से आकलन करना

डेटा के एक-दूसरे से मेल खाने की जांच करने के लिए, पहले अपने हिसाब से आकलन करें. व्यक्तिगत आकलन का लक्ष्य, वाइब्रेशन के एम्प्लitude को देखना है, ताकि यह पता लगाया जा सके कि डिवाइस, वाइब्रेशन के ऐसे एम्प्लitude जनरेट कर सकता है या नहीं जिन्हें लोग महसूस कर सकते हैं.

इस धारणा के आधार पर बनाया गया कोई खास सवाल ऐसा दिखता है: क्या डिवाइस, उपयोगकर्ताओं को उम्मीद के मुताबिक हैप्टिक इफ़ेक्ट दे सकता है? इस सवाल का जवाब देकर, फ़ेल हैप्टिक से बचने में मदद मिलती है. इसमें ऐसे हैप्टिक शामिल हैं जिन्हें उपयोगकर्ता महसूस नहीं कर सकते. इसके अलावा, अनचाहे हैप्टिक से भी बचा जा सकता है, जहां वेवफ़ॉर्म, मनमुताबिक पैटर्न नहीं बनाते.

बेहतर तरीके से आकलन करना

क्वालिटी का बेहतर आकलन करने का सुझाव दिया जाता है. बेहतर क्वालिटी के आकलन से, बेहतर हैप्टिक्स लागू करने के लिए, हैप्टिक इफ़ेक्ट के मेज़र किए जा सकने वाले एट्रिब्यूट की जानकारी मिलती है. प्रोसेस पूरी होने के बाद, डिवाइस बनाने वाली कंपनियां, वाइब्रेशन की मौजूदा स्थिति का पता लगा सकती हैं. इसका मतलब है कि वे पूरी क्वालिटी को बेहतर बनाने के लिए लक्ष्य सेट कर सकती हैं. हार्डवेयर की जांच देखें.