Android पर कंपन क्यों प्रबंधित करें? 'बीप' से लेकर हैप्टिक मास्टरपीस तक
\n\nक्या आपने कभी सोचा है कि कुछ ऐप्स सुखद और सटीक रूप से क्यों कंपन करते हैं, जबकि अन्य दीवार के पीछे पड़ोसी की ड्रिल की तरह लगते हैं? यह सब कंपन की आवृत्ति और आयाम पर निर्भर करता है। Stack Overflow पर प्रश्न "How to make an Android device vibrate with different frequency?" को हजारों बार देखा गया है - और यह कोई संयोग नहीं है। डेवलपर्स केवल "वाइब्रेट चालू" नहीं करना चाहते, बल्कि एक सार्थक हैप्टिक फीडबैक बनाना चाहते हैं: हल्का स्पर्श, स्पंदित अलार्म सिग्नल, या मैकेनिकल बटन दबाने का अनुकरण।
\n\nइस लेख में, हम Kotlin का उपयोग करके Android पर कंपन को प्रबंधित करने का तरीका जानेंगे। आप जानेंगे कि कौन से API मौजूद हैं, वे Android 8 से Android 14 तक कैसे विकसित हुए, और आपके प्रोजेक्ट के लिए कौन सा दृष्टिकोण चुनना है। चलिए शुरू करते हैं!
\n\nइतिहास में एक संक्षिप्त भ्रमण: Vibrator से VibratorManager तक
\n\nलंबे समय तक, Android डेवलपर्स Vibrator क्लास और vibrate(long milliseconds) विधि का उपयोग करते थे। सरल, लेकिन दुखद: आवृत्ति पर कोई नियंत्रण नहीं। Android 8 (API 26) के आगमन के साथ, Google ने VibrationEffect पेश किया - जटिल कंपन पैटर्न बनाने के लिए एक शक्तिशाली उपकरण। और Android 12 (API 31) में VibratorManager जोड़ा गया, जो कई वाइब्रेटर (जैसे, फोल्डेबल डिवाइस पर) को प्रबंधित करने की अनुमति देता है।
आज हमारे पास तीन मुख्य दृष्टिकोण हैं:
\n- \n
- Vibrator + VibrationEffect (API 26+) - बुनियादी, लेकिन लचीला। \n
- VibratorManager (API 31+) - आधुनिक, मल्टी-वाइब्रेटर उपकरणों के लिए। \n
- पुराना Vibrator.vibrate() - केवल पिछड़ी संगतता के लिए। \n
हम पहले दो पर ध्यान केंद्रित करेंगे, क्योंकि वे आवृत्ति और आयाम पर नियंत्रण प्रदान करते हैं।
\n\nतैयारी: कंपन की अनुमति
\n\n'भूकंप' शुरू करने से पहले, AndroidManifest.xml में अनुमति जोड़ना न भूलें:
<uses-permission android:name="android.permission.VIBRATE" />\n\nइसके बिना, आपका कोड अनदेखा कर दिया जाएगा - कोई त्रुटि नहीं, लेकिन कोई कंपन भी नहीं होगा।
\n\nविधि 1: VibrationEffect - आवृत्ति और आयाम नियंत्रण (API 26+)
\n\nVibrationEffect क्लास आपको निर्दिष्ट आवृत्ति (आयाम के माध्यम से) और अवधि के साथ कंपन बनाने की अनुमति देता है। Android में आवृत्ति सीधे हर्ट्ज़ में सेट नहीं की जाती है - इसके बजाय, आयाम (0-255) का उपयोग किया जाता है, जो हार्डवेयर द्वारा आवृत्ति में परिवर्तित होता है। आयाम जितना अधिक होगा, कंपन उतना ही तीव्र होगा।
आयाम के साथ सरल कंपन
\n\nval vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator\n\n// अधिकतम आयाम (255) के साथ 500 ms का कंपन\nval effect = VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)\nvibrator.vibrate(effect)\n\nविभिन्न आवृत्ति (आयाम) के साथ कंपन
\n\nहल्का कंपन चाहते हैं? आयाम 50 निर्दिष्ट करें:
\nval weakVibration = VibrationEffect.createOneShot(300, 50)\nvibrator.vibrate(weakVibration)\n\nआयाम 255 अधिकतम है, 1 मुश्किल से ध्यान देने योग्य है। प्रयोग करें!
\n\nपैटर्न: विराम के साथ कंपन
\n\nकभी-कभी केवल 'बीप' नहीं, बल्कि स्पंदन की आवश्यकता होती है। createWaveform का उपयोग करें:
val timings = longArrayOf(0, 200, 100, 300) // विराम, कंपन, विराम, कंपन\nval amplitudes = intArrayOf(0, 200, 0, 150) // प्रत्येक चरण के लिए आयाम\n\nval pattern = VibrationEffect.createWaveform(timings, amplitudes, -1) // -1 = दोहराएं नहीं\nvibrator.vibrate(pattern)\n\ntimings का पहला तत्व प्रारंभिक विलंब है। आमतौर पर 0 सेट करें। amplitudes की लंबाई समान होनी चाहिए। यदि आयाम सरणी के बजाय null पास किया जाता है, तो सभी चरणों में अधिकतम आयाम का उपयोग किया जाएगा।
विधि 2: VibratorManager - आधुनिक उपकरणों के लिए (API 31+)
\n\nAndroid 12 से शुरू करके, VibratorManage का उपयोग करने की अनुशंसा की जाती है।