इस सेक्शन में, Android में उपलब्ध अलग-अलग haptics API के बारे में जानकारी दी गई है. इसमें यह भी बताया गया है कि किसी डिवाइस पर, हैप्टिक इफ़ेक्ट के सही तरीके से काम करने के लिए, ज़रूरी सहायता कब और कैसे देखी जा सकती है.
हैप्टिक इफ़ेक्ट बनाने के कई तरीके हैं. इनमें से किसी एक को चुनते समय, Android के हैप्टिक डिज़ाइन के सिद्धांतों को ध्यान में रखना ज़रूरी है. नीचे दी गई टेबल में, हर तरीके के इन हाई लेवल एट्रिब्यूट के बारे में खास जानकारी दी गई है:
- उपलब्धता, व्यवहार के फ़ॉलबैक की योजना बनाते समय खास तौर पर अहम होती है. साथ ही, यह ज़रूरी है कि अलग-अलग डिवाइसों पर इस सुविधा के काम करने की जांच की जाए.
- साफ़-साफ़ महसूस होने वाली स्पर्श, उपयोगकर्ताओं को साफ़ और सटीक तरीके से महसूस होती है.
- रिच हैप्टिक्स की मदद से, ज़्यादा बेहतर तरीके से जानकारी दी जा सकती है. हालांकि, इसके लिए ज़्यादा सुविधाओं वाले हार्डवेयर की ज़रूरत होती है.
एपीआई का प्लैटफ़ॉर्म | उपलब्धता | हप्टिक्स की सुविधा बंद करना | बेहतर हैप्टिक |
---|---|---|---|
HapticFeedbackConstants | Android 1.5+ (हर कॉन्स्टेंट के हिसाब से) |
||
पहले से तय वाइब्रेशन इफ़ेक्ट | Android 10 और उसके बाद के वर्शन | ||
VibrationEffect Composition | Android 11 और उसके बाद के वर्शन (हर कॉन्स्टेंट के हिसाब से) | ||
वाइब्रेशन की सुविधा चालू/बंद करना, एक बार वाइब्रेशन करना, और वेवफ़ॉर्म वाइब्रेशन | Android 1 |
इसके अलावा, इस पेज पर बताए गए सूचना एपीआई की मदद से, आने वाली सूचनाओं के लिए, हैप्टिक इफ़ेक्ट को पसंद के मुताबिक बनाया जा सकता है.
इस पेज पर, एपीआई के अलग-अलग प्लैटफ़ॉर्म पर काम करने वाले अन्य कॉन्सेप्ट के बारे में भी बताया गया है:
- क्या डिवाइस में वाइब्रेटर है?
- ऐम्प्ल्यट्यूड कंट्रोल की मदद से, बेहतर और ज़्यादा बेहतर हैप्टिक इफ़ेक्ट मिलते हैं. हालांकि, यह सुविधा सभी डिवाइसों पर काम नहीं करती.
VibrationAttributes()
की मदद से, कंपन को उसके इस्तेमाल के आधार पर अलग-अलग कैटगरी में बांटा जा सकता है. इससे यह पक्का किया जा सकता है कि उस पर उपयोगकर्ता के हिसाब से सही सेटिंग लागू की जाएंगी. इससे उपयोगकर्ता को अचानक से कोई परेशानी नहीं होगी.
HapticFeedbackConstants
HapticFeedbackConstants
क्लास, ऐक्शन के आधार पर कॉन्स्टेंट उपलब्ध कराती है. इससे ऐप्लिकेशन, डिवाइस पर एक जैसा हैप्टिक फ़ीडबैक जोड़ सकते हैं. ऐसा करने से, हर ऐप्लिकेशन में सामान्य कार्रवाइयों के लिए अलग-अलग इफ़ेक्ट नहीं दिखते.
काम करने की शर्तें
इन कॉन्स्टेंट के साथ View.performHapticFeedback
तरीके का इस्तेमाल करने के लिए, ऐप्लिकेशन को किसी खास अनुमति की ज़रूरत नहीं होती. यह View.hapticFeedbackEnabled
प्रॉपर्टी पर निर्भर करता है. अगर इसे false
पर सेट किया जाता है, तो व्यू पर सभी हैप्टिक फ़ीडबैक कॉल बंद हो जाएंगे. इनमें डिफ़ॉल्ट कॉल भी शामिल हैं.इससे जुड़ी मुख्य सेटिंग, View.hapticFeedbackEnabled
प्रॉपर्टी है. अगर इसे false
पर सेट किया जाता है, तो व्यू पर सभी हैप्टिक फ़ीडबैक कॉल बंद हो जाएंगे. इनमें डिफ़ॉल्ट कॉल भी शामिल हैं. यह तरीका, टच फ़ीडबैक की सुविधा चालू करने के लिए, उपयोगकर्ता की सिस्टम सेटिंग का भी पालन करता है.
साथ काम करने की शर्त सिर्फ़ यह है कि ऐक्शन के लिए, किसी खास कॉन्स्टेंट का एसडीके-लेवल क्या है.
HapticFeedbackConstants
का इस्तेमाल करते समय, फ़ॉलबैक व्यवहार की जानकारी देने की ज़रूरत नहीं है.
HapticsFeedbackConstants
का इस्तेमाल
HapticFeedbackConstants
का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, इवेंट में हैप्टिक फ़ीडबैक जोड़ना लेख पढ़ें.
पहले से तय VibrationEffect
VibrationEffect
क्लास, पहले से तय कई कॉन्स्टेंट उपलब्ध कराती है. जैसे, CLICK
, TICK
, और
DOUBLE_CLICK
. ये इफ़ेक्ट, डिवाइस के हिसाब से ऑप्टिमाइज़ किए जा सकते हैं.
काम करने की शर्तें
किसी भी VibrationEffect
को चलाने के लिए, ऐप्लिकेशन के मेनिफ़ेस्ट में VIBRATE
अनुमति की ज़रूरत होती है.
पहले से तय किए गए VibrationEffect
का इस्तेमाल करते समय, फ़ॉलबैक व्यवहार देने की ज़रूरत नहीं होती. ऐसा इसलिए है, क्योंकि जिन कॉन्स्टेंट को डिवाइस के हिसाब से ऑप्टिमाइज़ नहीं किया गया है वे स्टैंडर्ड प्लैटफ़ॉर्म फ़ॉलबैक पर वापस आ जाते हैं.
Vibrator.areEffectsSupported
और Vibrator.areAllEffectsSupported
एपीआई, यह तय करने के लिए हैं कि डिवाइस के लिए ऑप्टिमाइज़ किया गया लागू करने का तरीका है या नहीं.
पहले से तय किए गए इफ़ेक्ट का इस्तेमाल, ऑप्टिमाइज़ किए गए तरीके के बिना भी किया जा सकता है. साथ ही, इन इफ़ेक्ट के लिए प्लैटफ़ॉर्म के स्टैंडर्ड फ़ॉलबैक का इस्तेमाल किया जाता है. इसलिए, इन areEffectsSupported
एपीआई की ज़रूरत सिर्फ़ तब होती है, जब कोई ऐप्लिकेशन यह तय करना चाहता है कि इफ़ेक्ट, डिवाइस के लिए ऑप्टिमाइज़ किया गया है या नहीं.
असर की जांच करने के तरीके, इनमें से कोई एक वैल्यू दिखा सकते हैं:
VIBRATION_EFFECT_SUPPORT_YES
से पता चलता है कि डिवाइस पर इस इफ़ेक्ट के लिए ऑप्टिमाइज़ की गई सुविधा है.VIBRATION_EFFECT_SUPPORT_NO
इससे पता चलता है कि डिवाइस पर ऑप्टिमाइज़ की गई सुविधा उपलब्ध नहीं है. हालांकि, वह अब भी प्लैटफ़ॉर्म फ़ॉलबैक का इस्तेमाल करता है.VIBRATION_EFFECT_SUPPORT_UNKNOWN
से पता चलता है कि सिस्टम को यह नहीं पता कि लागू करने का तरीका ऑप्टिमाइज़ किया गया है या नहीं.
UNKNOWN
वैल्यू से पता चलता है कि जांच करने वाला एपीआई उपलब्ध नहीं है. आम तौर पर, यह वैल्यू सभी इफ़ेक्ट के लिए या किसी भी इफ़ेक्ट के लिए नहीं दी जाती. इन डिवाइसों पर, डाइनैमिक तौर पर फ़ॉलबैक होता है.
पहले से तय किए गए VibrationEffect
का इस्तेमाल
पहले से तय किए गए VibrationEffect
का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, हैप्टिक फ़ीडबैक जनरेट करने के लिए, पहले से तय किए गए VibrationEffect
का इस्तेमाल करना लेख पढ़ें.
VibrationEffect
कंपोज़िशन
VibrationEffect
कंपज़िशन, वाइब्रेशन इफ़ेक्ट होता है. इसे VibrationEffect.startComposition
एपीआई का इस्तेमाल करके बनाया जाता है. यह एपीआई, उपयोगकर्ताओं को बेहतर हप्टिक्स का अनुभव देता है. इसके लिए, यह उपयोगकर्ताओं के हिसाब से देरी और इंटेंसिटी के साथ प्राइमिटिव का क्रम बनाता है. हालांकि, इस बात का खास ध्यान रखें कि डिवाइस पर, एक साथ इस्तेमाल की जा रही सुविधाएं काम करती हों. इससे, आपको बेहतर अनुभव मिलेगा.
काम करने की सुविधा और ज़रूरी शर्तें
किसी भी VibrationEffect
को चलाने के लिए, ऐप्लिकेशन के मेनिफ़ेस्ट में VIBRATE
अनुमति की ज़रूरत होती है.
सभी डिवाइसों पर, कॉम्पोज़िशन एपीआई की सभी सुविधाएं काम नहीं करतीं. इसलिए, यह पक्का करना ज़रूरी है कि प्राइमिटिव उपलब्ध हों.
वाइब्रेशन प्राइमिटिव के साथ काम करने की सुविधा की जांच करना
हर प्राइमिटिव के लिए सहायता पाने के लिए,
Vibrator.arePrimitivesSupported
तरीके का इस्तेमाल किया जा सकता है. इसके अलावा, Vibrator.areAllPrimitivesSupported
के तरीके का इस्तेमाल करके, प्राइमिटिव के एक सेट की एक साथ जांच की जा सकती है. यह हर प्राइमिटिव के लिए सहायता AND
करने के बराबर है.
VibrationEffect
कंपोज़िशन का इस्तेमाल
VibrationEffect
कंपोज़िशन इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, कंपोज़िशन बनाना लेख पढ़ें.
वाइब्रेशन की सुविधा को चालू या बंद करना, एक बार वाइब्रेशन करना, और वाइब्रेशन की गति बदलना
Android पर वाइब्रेशन की सुविधा का सबसे पुराना वर्शन, वाइब्रेटर के चालू-बंद होने के पैटर्न के साथ आता है. इन पैटर्न की अवधि को कॉन्फ़िगर किया जा सकता है. आम तौर पर, ये एपीआई हैप्टिक्स डिज़ाइन के सिद्धांतों के मुताबिक नहीं होते, क्योंकि इनसे बज़ी हैप्टिक्स जनरेट हो सकते हैं. इसलिए, इन्हें आखिरी विकल्प के तौर पर ही इस्तेमाल करें.
वाइब्रेशन की सुविधा को चालू या बंद करने का सबसे सामान्य इस्तेमाल, सूचनाओं के लिए किया जाता है. वेवफ़ॉर्म वाइब्रेशन की मदद से, किसी पैटर्न को अनलिमिटेड तौर पर दोहराया जा सकता है. जैसे, किसी रिंगटोन के लिए.
एक बार वाइब्रेट करने वाले पैटर्न का मतलब है कि डिवाइस को N मिलीसेकंड के लिए एक बार वाइब्रेट किया जाए.
वेवफ़ॉर्म पैटर्न दो तरह के होते हैं:
- सिर्फ़ समय. इस तरह की वेवफ़ॉर्म से, डिवाइस के चालू और बंद रहने की अवधि के बारे में जानकारी मिलती है. वाइब्रेशन की अवधि, डिवाइस के बंद रहने की अवधि से शुरू होती है. इसलिए, वाइब्रेशन पैटर्न अक्सर शून्य वैल्यू से शुरू होते हैं, ताकि तुरंत वाइब्रेट करने का पता चल सके.
- समय और ऐम्प्लिटीड. इस तरह के वेवफ़ॉर्म में, पहले फ़ॉर्म के ऑन-ऑफ़ के बजाय, हर टाइमिंग फ़िगर से मैच करने के लिए, ऐम्प्ल्यट्यूड का एक और कलेक्शन होता है. हालांकि, यह देखना ज़रूरी है कि डिवाइस पर ऐम्प्लिटी कंट्रोल की सुविधा काम करती हो, ताकि यह पक्का किया जा सके कि सही स्केलिंग की जा सके.
काम करने की शर्तें
वाइब्रेशन की सुविधा के सबसे पुराने वर्शन में, वाइब्रेशन को चालू और बंद किया जाता है. यह सुविधा, वाइब्रेटर वाले ज़्यादातर डिवाइसों पर काम करती है. इस बारे में इस पेज पर आगे बताया गया है.
VibrationEffect
या पुराने स्टाइल के vibrate
कॉल चलाने के लिए, ऐप्लिकेशन मेनिफ़ेस्ट में VIBRATE
की अनुमति लेना ज़रूरी है.
किसी वेवफ़ॉर्म में अलग-अलग ऐम्प्लitude वैल्यू का इस्तेमाल करते समय, हमारा सुझाव है कि आप यह पक्का कर लें कि डिवाइस ऐम्प्लitude कंट्रोल की सुविधा के साथ काम करता हो.
यह देखना कि ऐम्प्लिटीड कंट्रोल की सुविधा काम करती है या नहीं
जिन डिवाइसों पर ऐम्प्लitude कंट्रोल की सुविधा नहीं है उन पर ऐम्प्लitude की वैल्यू को 100% तक राउंड अप किया जाता है. इसलिए, यह देखना ज़रूरी है कि Vibrator.hasAmplitudeControl
का इस्तेमाल करके, यह सुविधा उपलब्ध है या नहीं. ज़्यादा जानकारी के लिए, ऐम्प्ल्यट्यूड कंट्रोल देखें.
आपको ध्यान से यह देखना चाहिए कि ऐम्प्लिटी कंट्रोल के बिना, आपके इफ़ेक्ट की क्वालिटी अच्छी है या नहीं. साफ़ तौर पर डिज़ाइन किए गए वाइब्रेशन के चालू-बंद मोड का इस्तेमाल करना बेहतर हो सकता है.
वाइब्रेशन की सुविधा को चालू या बंद करने का तरीका
एसडीके के नए लेवल में, सभी वाइब्रेशन मोड को एक ही VibrationEffect
क्लास में शामिल किया गया है. इसमें VibrationEffect.createOneshot
या VibrationEffect.createWaveform
का इस्तेमाल करके, ये सामान्य वाइब्रेशन बनाए जाते हैं.
Notification APIs
अपने ऐप्लिकेशन की सूचनाओं को पसंद के मुताबिक बनाते समय, हर सूचना चैनल के साथ कोई पैटर्न जोड़ने के लिए, इनमें से किसी एक एपीआई का इस्तेमाल किया जा सकता है:
- AndroidX
- Android
NotificationChannel.setVibrationPattern
- (अब काम नहीं करता)
NotificationBuilder.setVibrate
इन सभी फ़ॉर्म में, पहले जैसा ही चालू-बंद वेवफ़ॉर्म पैटर्न होता है. इसमें पहली एंट्री, वाइब्रेटर को चालू करने से पहले की देरी होती है.
सामान्य कॉन्सेप्ट
ऊपर बताए गए एपीआई प्लैटफ़ॉर्म पर कई कॉन्सेप्ट लागू होते हैं.
क्या डिवाइस में वाइब्रेटर है?
context.getSystemService(Vibrator.class)
से, ऐसी Vibrator
क्लास मिल सकती है जो शून्य न हो. अगर डिवाइस में वाइब्रेटर नहीं है, तो वाइब्रेशन एपीआई को कॉल करने का कोई असर नहीं पड़ता. इसलिए, ऐप्लिकेशन को किसी शर्त के आधार पर अपने सभी हैप्टिक्स को गेट करने की ज़रूरत नहीं है. हालांकि, ज़रूरत पड़ने पर, कोई ऐप्लिकेशन hasVibrator()
को कॉल करके यह पता लगा सकता है कि यह असल वाइब्रेटर (true
) है या स्टब (false
).
क्या उपयोगकर्ता ने टच हैप्टिक्स की सुविधा बंद कर दी है?
पसंद के मुताबिक लागू करने के कुछ तरीकों के लिए, मैन्युअल तरीके से यह जांच करना पड़ सकता है कि उपयोगकर्ता ने Android की टच फ़ीडबैक सेटिंग को पूरी तरह से बंद किया है या नहीं. ऐसा होने पर, टच फ़ीडबैक के इफ़ेक्ट को दबा दिया जाना चाहिए. इस सेटिंग के बारे में HAPTIC_FEEDBACK_ENABLED
बटन का इस्तेमाल करके क्वेरी की जा सकती है. 0 वैल्यू का मतलब है कि सेटिंग बंद है.
वाइब्रेशन एट्रिब्यूट
वाइब्रेशन एट्रिब्यूट (फ़िलहाल, AudioAttributes
के तौर पर) दिए जा सकते हैं, ताकि सिस्टम को वाइब्रेशन के मकसद के बारे में जानकारी दी जा सके. जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तब वाइब्रेशन शुरू करने के लिए, ऐसा करना ज़रूरी है. ऐसा इसलिए, क्योंकि बैकग्राउंड में इस्तेमाल करने के लिए, सिर्फ़ ध्यान खींचने वाले हैप्टिक्स काम करते हैं.
AudioAttributes
बनाने के बारे में, क्लास के दस्तावेज़ में बताया गया है. इसे साउंड के बजाय वाइब्रेशन माना जाना चाहिए.
गाइड के तौर पर, ज़्यादातर मामलों में कॉन्टेंट टाइप CONTENT_TYPE_SONIFICATION
होता है. साथ ही, इस्तेमाल की जाने वाली वैल्यू, फ़ोरग्राउंड में टच फ़ीडबैक के लिए USAGE_ASSISTANCE_SONIFICATION
या बैकग्राउंड में अलार्म के लिए USAGE_ALARM
जैसी हो सकती हैं. ऑडियो फ़्लैग से, वाइब्रेशन पर कोई असर नहीं पड़ता.
ऐंप्लीट्यूड कंट्रोल
अगर वाइब्रेटर में ऐम्प्ल्यट्यूड कंट्रोल है, तो वह अलग-अलग तीव्रता के साथ वाइब्रेशन चला सकता है. बेहतर वाइब्रेशन देने के लिए, यह एक अहम सुविधा है. साथ ही, इससे उपयोगकर्ता को डिफ़ॉल्ट वाइब्रेशन की तीव्रता कंट्रोल करने की सुविधा भी मिलती है.
Amplitude कंट्रोल की सुविधा के काम करने की जांच करने के लिए, Vibrator.hasAmplitudeControl
को कॉल करें. अगर किसी वाइब्रेटर में ऐम्प्ल्यट्यूड की सुविधा नहीं है, तो ऐम्प्ल्यट्यूड की सभी वैल्यू, बंद/चालू पर मैप हो जाएंगी. यह इस बात पर निर्भर करेगा कि वे वैल्यू शून्य हैं या नहीं. इसलिए, अगर डिवाइस में ऐम्प्ल्यूड्यूड कंट्रोल की सुविधा नहीं है, तो अलग-अलग ऐम्प्ल्यूड्यूड के साथ रिच हैप्टिक्स का इस्तेमाल करने वाले ऐप्लिकेशन को बंद कर देना चाहिए.