इस दस्तावेज़ में, Android में उपलब्ध अलग-अलग हैप्टिक एपीआई के बारे में बताया गया है. इसमें यह भी बताया गया है कि अलग-अलग हैप्टिक इफ़ेक्ट कैसे बनाए जाते हैं और यह कैसे पता लगाया जाता है कि डिवाइस में ज़रूरी सुविधाएं उपलब्ध हैं या नहीं. keywords_public: > Android, हैप्टिक, एपीआई, वाइब्रेशन, HapticFeedbackConstants, VibrationEffect, envelope haptics, हैप्टिक फ़ीडबैक, notification, amplitude control
इस सेक्शन में, Android में उपलब्ध अलग-अलग हैप्टिक एपीआई के बारे में बताया गया है. इसमें यह भी बताया गया है कि डिवाइस पर हैप्टिक इफ़ेक्ट की सुविधा है या नहीं. साथ ही, यह भी बताया गया है कि इसे कब और कैसे देखा जा सकता है, ताकि यह पक्का किया जा सके कि हैप्टिक इफ़ेक्ट आपकी उम्मीद के मुताबिक काम कर रहे हैं.
हैप्टिक इफ़ेक्ट बनाने के कई तरीके हैं. इनमें से किसी एक को चुनते समय, Android हैप्टिक डिज़ाइन के सिद्धांतों को ध्यान में रखना ज़रूरी है. यहां दी गई टेबल में, हर तरीके के इन हाई लेवल एट्रिब्यूट के बारे में खास जानकारी दी गई है:
- उपलब्धता, फ़ॉलबैक के व्यवहार की योजना बनाते समय खास तौर पर ज़रूरी होती है. साथ ही, इसे यह देखने के साथ जोड़ा जाना चाहिए कि यह सुविधा किसी डिवाइस पर काम करती है या नहीं.
- साफ़ हैप्टिक से मिलने वाली संवेदनाएं तेज़ और साफ़ होती हैं. इनसे लोगों को कम परेशानी होती है.
- ज़्यादा बेहतर हैप्टिक से ज़्यादा बेहतर अनुभव मिलता है. इसके लिए, अक्सर ज़्यादा सुविधाओं वाले हार्डवेयर की ज़रूरत होती है.
| एपीआई सरफ़ेस | उपलब्धता | हैप्टिक इफ़ेक्ट हटाएं | रिच हैप्टिक |
|---|---|---|---|
| HapticFeedbackConstants | Android 1.5+ (हर कॉन्स्टेंट के लिए) |
||
| Predefined VibrationEffect | Android 10+ | ||
VibrationEffect कंपोज़िशन (इस्तेमाल करें) |
Android 16+ (26Q4) | ||
VibrationEffect प्रिमिटिव कंपोज़िशन |
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 का इस्तेमाल करना लेख पढ़ें.
Envelope VibrationEffect
एनवेलप पर आधारित वाइब्रेशन की सुविधा से, कंट्रोल पॉइंट का क्रम तय करके, समय के साथ वाइब्रेशन के ऐम्प्लिट्यूड और फ़्रीक्वेंसी को सटीक तरीके से कंट्रोल किया जा सकता है. इससे डेवलपर को, हैप्टिक फ़ीडबैक के ज़्यादा बेहतर और बारीकी से अनुभव बनाने में मदद मिलती है. इन वाइब्रेशन को BasicEnvelopeBuilder और WaveformEnvelopeBuilder क्लास का इस्तेमाल करके बनाया जा सकता है.
डिवाइस से जुड़ी शर्तें और अन्य ज़रूरी शर्तें
वाइब्रेशन वाले किसी भी इफ़ेक्ट को चलाने के लिए, आपके ऐप्लिकेशन को ऐप्लिकेशन मेनिफ़ेस्ट में VIBRATE अनुमति का एलान करना होगा.
यह देखने के लिए कि एनवलप इफ़ेक्ट की सुविधा उपलब्ध है या नहीं, Vibrator.areEnvelopeEffectsSupported() पर कॉल करें.
बेसिक एनवलप बिल्डर
बेहतर हैप्टिक अनुभव देने के लिए, एनवेलप इफ़ेक्ट की शुरुआत और अंत में \( 0.0 \)की इंटेंसिटी होनी चाहिए. एपीआई, इस नियम को लागू करता है. इसके लिए, वह शुरुआती इंटेंसिटी को शून्य पर सेट करता है. साथ ही, अगर आखिरी इंटेंसिटी शून्य नहीं होती है, तो एक अपवाद दिखाता है. इस सीमा की वजह से, वाइब्रेशन में अनचाहे डाइनैमिक इफ़ेक्ट नहीं होते. ऐसा इसलिए होता है, क्योंकि ऐंप्लीट्यूड में रुकावटें आती हैं. इससे उपयोगकर्ता की हैप्टिक परसेप्शन पर बुरा असर पड़ सकता है.
सभी डिवाइसों पर एक जैसा एनवेलप इफ़ेक्ट रेंडर करने के लिए, फ़्रेमवर्क को यह ज़रूरी है कि इस सुविधा के साथ काम करने वाले डिवाइस, कंट्रोल पॉइंट के बीच कम से कम 20 मि॰से॰ की अवधि को मैनेज कर सकें. साथ ही, एनवेलप इफ़ेक्ट के लिए कम से कम 16 पॉइंट को मैनेज कर सकें.
वेवफ़ॉर्म एन्वेलप बिल्डर
यह फ़्रेमवर्क, डेवलपर की ओर से दी गई फ़्रीक्वेंसी और ऐम्प्लिट्यूड की वैल्यू में बदलाव नहीं करता. हालांकि, एपीआई ट्रांज़िशन को आसान बनाने के लिए, शुरुआती ऐम्प्लिट्यूड को शून्य पर भी सेट करता है.
Android, डिवाइस की ज़रूरी क्षमताओं के बारे में क्वेरी करने के लिए एपीआई उपलब्ध कराता है. इससे आपको अपने ऐप्लिकेशन के वेवफ़ॉर्म एनवेलप इफ़ेक्ट को ऑप्टिमाइज़ करने और सभी डिवाइसों पर काम करने की सुविधा देने में मदद मिलती है. इन तरीकों से डिवाइस की सीमाओं के बारे में जानकारी मिलती है. जैसे, कंट्रोल पॉइंट के बीच ट्रांज़िशन की ज़्यादा से ज़्यादा और कम से कम अवधि. साथ ही, एक इफ़ेक्ट के लिए ज़्यादा से ज़्यादा कितने कंट्रोल पॉइंट इस्तेमाल किए जा सकते हैं:
getMaxSize()- यह फ़ंक्शन, किसी एनवलप इफ़ेक्ट के लिए इस्तेमाल किए जा सकने वाले कंट्रोल पॉइंट की ज़्यादा से ज़्यादा संख्या को वापस लाता है.
getMinControlPointDurationMillis()- यह फ़ंक्शन, एनवलप इफ़ेक्ट के अंदर दो कंट्रोल पॉइंट के बीच, कम से कम अवधि को मिलीसेकंड में दिखाता है.
getMaxControlPointDurationMillis()- यह फ़ंक्शन, किसी एनवलप इफ़ेक्ट में दो कंट्रोल पॉइंट के बीच, ज़्यादा से ज़्यादा अवधि को मिलीसेकंड में दिखाता है.
getMaxDurationMillis()- यह फ़ंक्शन, मिलीसेकंड में, एनवलप इफ़ेक्ट के लिए ज़्यादा से ज़्यादा अवधि को वापस लाता है.
अगर कोई इफ़ेक्ट, डिवाइस की सीमाओं से ज़्यादा है, जैसे कि बहुत ज़्यादा कंट्रोल पॉइंट या तय की गई अवधि से ज़्यादा अवधि, तो फ़्रेमवर्क इफ़ेक्ट को अपने-आप अडजस्ट कर देता है, ताकि वह तय की गई सीमाओं के अंदर आ जाए. इस प्रोसेस में, डिज़ाइन के ओरिजनल मकसद और लुक को ज़्यादा से ज़्यादा बनाए रखने की कोशिश की जाती है.
Envelope VibrationEffects का इस्तेमाल
एनवेलप वेवफ़ॉर्म इफ़ेक्ट बनाने के बारे में जानने के लिए, एनवेलप की मदद से वाइब्रेशन वेवफ़ॉर्म बनाना लेख पढ़ें.
VibrationEffect कंपोज़िशन
Android 16 (26Q4) से, VibrationEffect.Builder को रिच और एक्सप्रेसिव हैप्टिक इफ़ेक्ट बनाने के लिए सबसे अच्छा एपीआई माना जाता है. इसके लिए, डिज़ाइन की गई टाइमलाइन के साथ कई हैप्टिक एलिमेंट को क्रम से लगाया जाता है. यह VibrationEffect.Composition की जगह लेता है. इसमें टाइमलाइन के हिसाब से शेड्यूल करने की सुविधा, एटॉमिक एनकैप्सुलेशन, मिक्स इवेंट सपोर्ट (प्रीसेट और एनवलप को मिलाकर), और अपने-आप फ़ॉलबैक होने की सुविधा मिलती है.
बिल्डिंग ब्लॉक
बिल्डर की मदद से, हैप्टिक एलिमेंट को इस क्रम में लगाया जा सकता है:
VibrationEffect.Preset: पहले से तय की गई हैप्टिक सेंसेशन, जो सामान्य छोटे पल्स को दिखाती हैं. जैसे,PRESET_CLICK,PRESET_TICK, औरPRESET_LOW_TICK. प्रीसेट,VibrationEffect.Compositionएपीआई के शॉर्ट प्रिमिटिव से ज़्यादा प्राथमिकता रखते हैं. लंबे समय तक चलने वाले, लगातार होने वाले या धीरे-धीरे बढ़ने वाले इफ़ेक्ट (पहले इन्हें राइज़, फ़ॉल, और अन्य प्रिमिटिव से मैनेज किया जाता था) के लिए, एनवलप (PWLE) का इस्तेमाल करें.Preset.create(presetId, scale)का इस्तेमाल करके, प्रीसेट को0.0fसे1.0fतक बढ़ाया जा सकता है.VibrationEffect.Envelope: पीसवाइज़ लीनियर एनवेलप (पीडब्ल्यूएलई) बनाए गए हैं. इन्हेंBasicEnvelopeBuilder(इंटेंसिटी और शार्पनेस के साथ) याWaveformEnvelopeBuilder(फ़्रीक्वेंसी और ऐम्प्लिट्यूड के साथ) का इस्तेमाल करके बनाया गया है. एनवलप,Envelope.create(builder)का इस्तेमाल करके बनाए जाते हैं.VibrationEffect.Event: टाइमलाइन इवेंट,getEvents()का इस्तेमाल करके किसी मौजूदाVibrationEffectसे वापस पाए गए. इन्हेंaddEvents(startTimeShiftMillis, events)का इस्तेमाल करके, टाइमलाइन ऑफ़सेट के साथ जोड़ा जा सकता है.
टाइमलाइन शेड्यूल करना और उसकी पुष्टि करना
हर एलिमेंट को बिल्डर में जोड़ा जाता है. इसमें startTimeMillis होता है, जो कंपोज़िशन की शुरुआत से समय के ऑफ़सेट (मिलीसेकंड में) को दिखाता है:
- बिल्ड-टाइम की पुष्टि: एलिमेंट को उनके शुरू होने के समय के हिसाब से बढ़ते क्रम में जोड़ा जाना चाहिए. बिल्डर, बिल्ड के समय सबसे अच्छी तरह से पुष्टि करता है. इसके लिए, वह कम से कम अवधि की जांच करता है. जैसे, प्रीसेट के लिए 1 मि॰से॰ या एनवलप के लिए तय की गई अवधि. अगर बिल्ड टाइम में कोई ओवरलैप मिलता है, तो
IllegalArgumentExceptionथ्रो किया जाता है. - वीडियो चलाने के समय को अलाइन करना: यह फ़्रेमवर्क, वीडियो चलाने के दौरान टाइमिंग से जुड़ी समस्याओं को ठीक करने की पूरी कोशिश करता है. अगर पिछला इवेंट अब भी चल रहा है और अगले शेड्यूल किए गए इवेंट के शुरू होने का समय आ गया है, तो फ़्रेमवर्क अगले इवेंट को अपने-आप अगले उपलब्ध स्लॉट में भेज देता है. इससे, फ़िज़िकल प्लेबैक में इवेंट ओवरलैप नहीं होते. साथ ही, यह पक्का किया जाता है कि कोई भी हैप्टिक इवेंट न छूटे.
बार-बार होने वाले इफ़ेक्ट
setRepeatingEffect(startTimeMillis, repeatingEffect, durationMillis) का इस्तेमाल करके, कंपोज़िशन में बार-बार दिखने वाला इफ़ेक्ट जोड़ा जा सकता है. बार-बार दिखने वाला इफ़ेक्ट कॉन्फ़िगर करने के बाद, बिल्डर में कोई और एलिमेंट नहीं जोड़ा जा सकता.
फ़ॉलबैक की सुविधा
फ़्रेमवर्क-लेवल पर, अपने-आप फ़ॉलबैक होने की सुविधा डिफ़ॉल्ट रूप से चालू होती है. यह सुविधा, VibrationEffect.Builder से बनाए गए वाइब्रेशन के लिए उपलब्ध है:
- प्लैटफ़ॉर्म फ़ॉलबैक की सुविधा: अगर कोई डिवाइस, अनुरोध किए गए
Presetया बुनियादीEnvelopeके साथ काम नहीं करता है, तो फ़्रेमवर्क, रनटाइम के दौरान काम न करने वाले एलिमेंट को, काम करने वाले वाइब्रेशन से अपने-आप बदल देता है.VibrationEffect.Builderका इस्तेमाल करके बनाई गई कंपोज़िशन चलाने से पहले, आपके ऐप्लिकेशन को डिवाइस की क्षमताओं (जैसे किisPresetSupported) की मैन्युअल तरीके से जांच करने की ज़रूरत नहीं होती. WaveformEnvelopeBuilderके लिए अपवाद:WaveformEnvelopeBuilderसे बनाए गए एनवेलप इफ़ेक्ट (जो हर्ट्ज़ में ऐब्सलूट फ़िज़िकल फ़्रीक्वेंसी और Gs में ऐम्प्लिट्यूड तय करते हैं) के लिए, ऑटोमैटिक फ़ॉलबैक की सुविधा उपलब्ध नहीं है. एडवांस पीडब्ल्यूएलई, खास हार्डवेयर फ़्रीक्वेंसी कर्व (FOAM) पर निर्भर करते हैं. इसलिए, उन्हें अपने-आप बदलने से डिज़ाइन के मकसद पर असर पड़ेगा. अगर डिवाइस पर PWLE इफ़ेक्ट या अनुरोध की गई फ़्रीक्वेंसी काम नहीं करती हैं, तो इस तरह के वाइब्रेशन नहीं चलेंगे. सभी डिवाइसों के साथ काम करने के लिए,BasicEnvelopeBuilderका इस्तेमाल करें.
VibrationEffect.Builder का इस्तेमाल
VibrationEffect.Builder की मदद से इफ़ेक्ट बनाने के कोड के उदाहरणों के लिए, VibrationEffect.Builder की मदद से टाइमलाइन से जुड़ी कंपोज़िशन बनाना लेख पढ़ें.
VibrationEffect प्रिमिटिव कंपोज़िशन
VibrationEffect प्रिमिटिव कंपोज़िशन, वाइब्रेशन का एक ऐसा इफ़ेक्ट है जिसे VibrationEffect.startComposition एपीआई का इस्तेमाल करके बनाया जाता है. इस एपीआई की मदद से, प्रिमिटिव का क्रम बनाया जा सकता है.
डिवाइस से जुड़ी शर्तें और अन्य ज़रूरी शर्तें
किसी भी VibrationEffect को चलाने के लिए, ऐप्लिकेशन के मेनिफ़ेस्ट में VIBRATE अनुमति होना ज़रूरी है.
देखें कि प्रिमिटिव टाइप के साथ कौनसे ब्राउज़र काम करते हैं
इसलिए, VibrationEffect.Composition एपीआई का इस्तेमाल करते समय, आपको Vibrator.arePrimitivesSupported या Vibrator.areAllPrimitivesSupported का इस्तेमाल करके, हर प्रिमिटिव के लिए सहायता की जांच करनी होगी.
हर प्रिमिटिव के लिए सहायता से जुड़ी जानकारी, Vibrator.arePrimitivesSupported तरीके का इस्तेमाल करके वापस पाई जा सकती है. इसके अलावा, Vibrator.areAllPrimitivesSupported तरीके का इस्तेमाल करके, प्रिमिटिव के सेट की एक साथ जांच की जा सकती है. यह हर प्रिमिटिव के लिए AND करने के बराबर है.
VibrationEffect प्रिमिटिव कंपोज़िशन का इस्तेमाल
VibrationEffect प्रिमिटिव कंपोज़िशन इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, वाइब्रेशन प्रिमिटिव कंपोज़िशन बनाना लेख पढ़ें.
वाइब्रेशन को चालू/बंद करने, एक बार वाइब्रेट होने, और वेवफ़ॉर्म वाइब्रेशन की सुविधा
Android पर वाइब्रेशन की सबसे पुरानी सुविधा, वाइब्रेटर को चालू और बंद करने के पैटर्न पर आधारित है. इसमें वाइब्रेशन की अवधि को कॉन्फ़िगर किया जा सकता है. ये एपीआई आम तौर पर, हैप्टिक डिज़ाइन के सिद्धांतों के मुताबिक नहीं होते, क्योंकि ये बज़ी हैप्टिक जनरेट कर सकते हैं. इसलिए, इन्हें आखिरी विकल्प के तौर पर ही इस्तेमाल करें.
वाइब्रेशन को चालू और बंद करने की सुविधा का इस्तेमाल आम तौर पर सूचनाओं के लिए किया जाता है. इसमें वाइब्रेशन की सुविधा को किसी भी स्थिति में चालू रखा जाता है. वेवफ़ॉर्म वाइब्रेशन की मदद से, किसी पैटर्न को अनिश्चित काल तक दोहराया जा सकता है. जैसा कि रिंगटोन के लिए किया जाता है.
एक बार वाइब्रेट होने वाले पैटर्न का मतलब है कि डिवाइस N मिलीसेकंड के लिए एक बार वाइब्रेट होगा.
वेवफ़ॉर्म पैटर्न दो तरह के होते हैं:
- सिर्फ़ समय. इस तरह की वेवफ़ॉर्म, बंद रहने और चालू रहने की अवधि के बारे में बताती है. टाइमिंग की शुरुआत, बंद रहने की अवधि से होती है. इसलिए, वेवफ़ॉर्म पैटर्न अक्सर शून्य वैल्यू से शुरू होते हैं, ताकि तुरंत वाइब्रेट करना शुरू किया जा सके.
- समय और ऐम्प्लिट्यूड. इस तरह के वेवफ़ॉर्म में, हर टाइमिंग फ़िगर से मैच करने के लिए, ऐम्प्लिट्यूड का एक अतिरिक्त कलेक्शन होता है. इसमें पहले फ़ॉर्म की तरह, चालू और बंद होने की सुविधा नहीं होती. हालांकि, यह देखना ज़रूरी है कि डिवाइस में ऐम्प्लिट्यूड कंट्रोल की सुविधा हो, ताकि ज़रूरत के हिसाब से स्केलिंग की जा सके.
डिवाइस से जुड़ी शर्तें और अन्य ज़रूरी शर्तें
वाइब्रेशन को चालू और बंद करने की सुविधा, वाइब्रेशन की सबसे पुरानी सुविधा है. इसलिए, यह सुविधा वाइब्रेटर वाले लगभग सभी डिवाइसों पर काम करती है. इसके बारे में इस पेज पर बाद में बताया गया है.
VibrationEffect या पुराने स्टाइल के vibrate कॉल करने के लिए, ऐप्लिकेशन मेनिफ़ेस्ट में VIBRATE अनुमति होना ज़रूरी है.
वेवफ़ॉर्म में अलग-अलग ऐम्प्लिट्यूड वैल्यू का इस्तेमाल करते समय, हमारा सुझाव है कि आप यह पक्का कर लें कि डिवाइस में ऐम्प्लिट्यूड कंट्रोल की सुविधा उपलब्ध हो.
देखें कि एंप्लीट्यूड कंट्रोल की सुविधा काम करती है या नहीं
जिन डिवाइसों पर ऐम्प्लिट्यूड कंट्रोल करने की सुविधा नहीं होती है उन पर, नॉन-ज़ीरो ऐम्प्लिट्यूड वैल्यू को 100% पर राउंड अप किया जाता है. इसलिए, यह देखना ज़रूरी है कि Vibrator.hasAmplitudeControl का इस्तेमाल करके, यह सुविधा मौजूद है या नहीं. ज़्यादा जानकारी के लिए, ऐम्प्लिट्यूड कंट्रोल देखें.
आपको इस बात पर ध्यान देना चाहिए कि एंप्लीट्यूड कंट्रोल के बिना, आपके इफ़ेक्ट की क्वालिटी अच्छी है या नहीं. वाइब्रेशन को चालू या बंद करने के लिए, साफ़ तौर पर डिज़ाइन किए गए फ़ंक्शन का इस्तेमाल करना बेहतर हो सकता है.
वाइब्रेशन को चालू और बंद करने की सुविधा का इस्तेमाल
एसडीके के नए लेवल में, वाइब्रेशन के सभी मोड को एक ही VibrationEffect क्लास में शामिल कर दिया गया है. इस क्लास में, VibrationEffect.createOneShot या VibrationEffect.createWaveform का इस्तेमाल करके, सामान्य वाइब्रेशन बनाए जाते हैं.
सूचना देने वाले एपीआई
ऐप्लिकेशन की सूचनाओं को पसंद के मुताबिक बनाने के लिए, यहां दिए गए किसी एक एपीआई का इस्तेमाल किया जा सकता है. इससे हर सूचना चैनल के साथ एक पैटर्न जोड़ा जा सकता है:
- AndroidX
- Android
NotificationChannel.setVibrationPattern- (अब काम नहीं करता)
NotificationBuilder.setVibrate
इन सभी फ़ॉर्म में, चालू-बंद होने वाला वेवफ़ॉर्म पैटर्न होता है. इसके बारे में पहले बताया जा चुका है. इसमें पहली एंट्री, वाइब्रेटर को चालू करने से पहले की देरी होती है.
सामान्य कॉन्सेप्ट
ऊपर बताए गए एपीआई के सभी प्लैटफ़ॉर्म पर कई कॉन्सेप्ट लागू होते हैं.
क्या डिवाइस में वाइब्रेटर है?
context.getSystemService(Vibrator.class) से, नॉन-नल Vibrator क्लास को हासिल किया जा सकता है. अगर डिवाइस में वाइब्रेटर नहीं है, तो वाइब्रेशन एपीआई को कॉल करने से कोई असर नहीं पड़ता. इसलिए, ऐप्लिकेशन को किसी शर्त के आधार पर, सभी हैप्टिक को गेट करने की ज़रूरत नहीं होती. हालांकि, अगर ज़रूरत हो, तो कोई ऐप्लिकेशन hasVibrator() को कॉल करके यह पता लगा सकता है कि यह असली वाइब्रेटर (true) है या स्टब (false).
क्या उपयोगकर्ता ने टच हैप्टिक की सुविधा बंद कर दी है?
कुछ कस्टम सेटिंग के लिए, मैन्युअल तरीके से यह जांच करना पड़ सकता है कि उपयोगकर्ता ने Android की टच फ़ीडबैक सेटिंग को पूरी तरह से बंद कर दिया है या नहीं. अगर ऐसा है, तो टच फ़ीडबैक के इफ़ेक्ट को बंद कर देना चाहिए. इस सेटिंग के बारे में क्वेरी करने के लिए, HAPTIC_FEEDBACK_ENABLED कुंजी का इस्तेमाल किया जा सकता है. इसमें शून्य की वैल्यू का मतलब है कि यह सेटिंग बंद है.
वाइब्रेशन एट्रिब्यूट
वाइब्रेशन एट्रिब्यूट (फ़िलहाल, AudioAttributes के तौर पर उपलब्ध है) दिए जा सकते हैं. इससे सिस्टम को वाइब्रेशन के मकसद के बारे में जानकारी मिलती है. जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तब वाइब्रेशन शुरू करने के लिए इसकी ज़रूरत होती है. ऐसा इसलिए, क्योंकि बैकग्राउंड में इस्तेमाल करने के लिए सिर्फ़ अटेंशन हैप्टिक काम करते हैं.
AudioAttributes के बारे में क्लास के दस्तावेज़ में बताया गया है. इसे आवाज़ के बजाय वाइब्रेशन के तौर पर देखा जाना चाहिए.
गाइड के तौर पर, ज़्यादातर मामलों में कॉन्टेंट टाइप CONTENT_TYPE_SONIFICATION होता है. वहीं, इस्तेमाल की वैल्यू USAGE_ASSISTANCE_SONIFICATION हो सकती है. जैसे, फ़ोरग्राउंड में टच फ़ीडबैक के लिए या बैकग्राउंड में अलार्म के लिए USAGE_ALARM. ऑडियो फ़्लैग से वाइब्रेशन पर कोई असर नहीं पड़ता.
ऐंप्लीट्यूड कंट्रोल
अगर वाइब्रेटर में ऐम्प्लिट्यूड कंट्रोल करने की सुविधा है, तो यह अलग-अलग इंटेंसिटी के साथ वाइब्रेशन कर सकता है. यह बेहतर हैप्टिक बनाने के लिए एक ज़रूरी सुविधा है. साथ ही, इससे उपयोगकर्ता को हैप्टिक की डिफ़ॉल्ट इंटेंसिटी को कंट्रोल करने की सुविधा भी मिल सकती है.
आवाज़ को कंट्रोल करने की सुविधा काम करती है या नहीं, यह जानने के लिए Vibrator.hasAmplitudeControl को कॉल करें. अगर वाइब्रेटर में ऐम्प्लिट्यूड की सुविधा काम नहीं करती है, तो सभी ऐम्प्लिट्यूड वैल्यू को बंद या चालू पर मैप किया जाएगा. यह इस बात पर निर्भर करेगा कि वे शून्य हैं या गैर-शून्य. इसलिए, अगर डिवाइस में ऐम्प्लिट्यूड कंट्रोल की सुविधा नहीं है, तो अलग-अलग ऐम्प्लिट्यूड के साथ रिच हैप्टिक का इस्तेमाल करने वाले ऐप्लिकेशन को उन्हें बंद करने पर विचार करना चाहिए.
एन्वेलप इफ़ेक्ट की सुविधा
इनमें एनवेलप इफ़ेक्ट की सुविधा होती है. इससे ज़्यादा डाइनैमिक और बारीकी से वाइब्रेशन जनरेट किए जा सकते हैं. साथ ही, हैप्टिक एक्सपीरियंस को बेहतर बनाने के लिए, वाइब्रेशन की तीव्रता और शार्पनेस को ज़्यादा सटीक तरीके से कंट्रोल किया जा सकता है. आपके डिवाइस पर यह सुविधा काम करती है या नहीं, यह पता लगाने के लिए Vibration.areEnvelopeEffectsSupported का इस्तेमाल करें. अगर ऐसा नहीं होता है, तो एनवलप के आधार पर वाइब्रेशन को अनदेखा कर दिया जाता है.