जवाबों:
प्रयत्न:
import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
//deprecated in API 26
v.vibrate(500);
}
ध्यान दें:
AndroidManifest.xml फ़ाइल में अनुमति शामिल करना न भूलें:
<uses-permission android:name="android.permission.VIBRATE"/>
vibrate(VibrationEffect)
। इसके बजाय उपयोग करें ।
किसी भी कंपन कोड को लागू करने से पहले, आपको अपने आवेदन को कंपन करने की अनुमति देनी होगी:
<uses-permission android:name="android.permission.VIBRATE"/>
इस लाइन को अपनी AndroidManifest.xml फ़ाइल में शामिल करना सुनिश्चित करें।
अधिकांश IDE आपके लिए ऐसा करेंगे, लेकिन यहाँ आयात विवरण है यदि आपका नहीं है:
import android.os.Vibrator;
इस गतिविधि में सुनिश्चित करें कि आप कहाँ कंपन चाहते हैं।
ज्यादातर परिस्थितियों में, आप डिवाइस को थोड़े समय के लिए पूर्व निर्धारित मात्रा में कंपन करना चाहते हैं। आप vibrate(long milliseconds)
विधि का उपयोग करके इसे प्राप्त कर सकते हैं । यहाँ एक त्वरित उदाहरण है:
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 400 milliseconds
v.vibrate(400);
यह आसान है!
यह ऐसा मामला हो सकता है कि आप चाहते हैं कि डिवाइस अनिश्चित काल तक कंपन करना जारी रखे। इसके लिए, हम इस vibrate(long[] pattern, int repeat)
विधि का उपयोग करते हैं :
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Start without a delay
// Vibrate for 100 milliseconds
// Sleep for 1000 milliseconds
long[] pattern = {0, 100, 1000};
// The '0' here means to repeat indefinitely
// '0' is actually the index at which the pattern keeps repeating from (the start)
// To repeat the pattern from any other point, you could increase the index, e.g. '1'
v.vibrate(pattern, 0);
जब आप कंपन को रोकने के लिए तैयार हों, तो cancel()
विधि को कॉल करें :
v.cancel();
यदि आप एक और अधिक कंपन कंपन चाहते हैं, तो आप अपने स्वयं के कंपन पैटर्न बनाने का प्रयास कर सकते हैं:
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Start without a delay
// Each element then alternates between vibrate, sleep, vibrate, sleep...
long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100};
// The '-1' here means to vibrate once, as '-1' is out of bounds in the pattern array
v.vibrate(pattern, -1);
कई एसडीके हैं जो हेप्टिक फीडबैक की अधिक व्यापक श्रेणी प्रदान करते हैं। एक जो मैं विशेष प्रभावों के लिए उपयोग करता हूं वह है एंड्रॉइड के लिए विसर्जन का हाप्टिक डेवलपमेंट प्लेटफ़ॉर्म ।
यदि आपका उपकरण कंपन नहीं करेगा, तो पहले सुनिश्चित करें कि यह कंपन कर सकता है:
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Output yes if can vibrate, no otherwise
if (v.hasVibrator()) {
Log.v("Can Vibrate", "YES");
} else {
Log.v("Can Vibrate", "NO");
}
दूसरे, कृपया सुनिश्चित करें कि आपने अपने आवेदन को कंपन करने की अनुमति दी है! पहले बिंदु पर वापस जाएँ।
अपडेट 2017 कंपन (अंतराल) विधि Android-O (API 8.0) के साथ पदावनत है
सभी Android संस्करणों का समर्थन करने के लिए इस विधि का उपयोग करें।
// Vibrate for 150 milliseconds
private void shakeItBaby() {
if (Build.VERSION.SDK_INT >= 26) {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150);
}
}
Kotlin:
// Vibrate for 150 milliseconds
private fun shakeItBaby(context: Context) {
if (Build.VERSION.SDK_INT >= 26) {
(context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
(context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(150)
}
}
getSystemService
this.getContext().getSystemService
उपरोक्त उत्तर एकदम सही हैं। हालाँकि मैं बटन क्लिक पर अपने ऐप को ठीक दो बार वाइब्रेट करना चाहता था और यह छोटी सी जानकारी यहाँ गायब है, इसलिए मेरे जैसे भविष्य के पाठकों के लिए पोस्ट करना। :)
हमें ऊपर बताए अनुसार अनुसरण करना होगा और नीचे के रूप में केवल एक परिवर्तन कंपन पैटर्न में होगा,
long[] pattern = {0, 100, 1000, 300};
v.vibrate(pattern, -1); //-1 is important
यह ठीक दो बार कंपन होगा । जैसा कि हम पहले से ही जानते हैं
वैकल्पिक रूप से देरी और कंपन का उल्लेख करने पर कोई भी जा सकता है (जैसे 0, 100, 1000, 300, 1000, 300, 3 कंपन और इतने पर ..) लेकिन याद रखें @ दवे का शब्द जिम्मेदारी से उपयोग करें। :)
यहां यह भी ध्यान दें कि रिपीट पैरामीटर -1 पर सेट है जिसका मतलब है कि कंपन वैसा ही होगा जैसा पैटर्न में बताया गया है । :)
मैंने अपने पहले कार्यान्वयन पर यह समझने के लिए संघर्ष किया कि यह कैसे करें - सुनिश्चित करें कि आपके पास निम्नलिखित हैं:
1) आपका डिवाइस कंपन का समर्थन करता है (मेरा सैमसंग टैबलेट काम नहीं करता था इसलिए मैंने कोड की फिर से जांच की - मूल कोड पूरी तरह से मेरे सीएम ड्रॉपपैड पर काम किया
2) आपने अपनी AndroidManifest.xml फ़ाइल में एप्लिकेशन स्तर ऊपर घोषित किया है ताकि कोड चलाने की अनुमति दी जा सके।
3) अन्य आयातों के साथ अपने MainActivity.java में निम्नलिखित दोनों का आयात किया है: android.content.Chtext आयात करें; आयात android.os.Vibrator;
4) अपने कंपन को कॉल करें (पहले से ही इस थ्रेड में बड़े पैमाने पर चर्चा की गई) - मैंने इसे एक अलग फ़ंक्शन में किया और इसे अन्य बिंदुओं पर कोड में कॉल किया - जो आप कंपन को कॉल करने के लिए उपयोग करना चाहते हैं उसके आधार पर आपको एक छवि की आवश्यकता हो सकती है ( Android: एक बटन पर लंबे समय तक क्लिक करें -> कार्य प्रदर्शन ) या बटन श्रोता, या एक क्लिक करने योग्य वस्तु के रूप में एक्सएमएल में परिभाषित ( क्लिक करने योग्य छवि - Android ):
public void vibrate(int duration)
{
Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibs.vibrate(duration);
}
यदि आप उपयोगकर्ता क्रिया पर प्रतिक्रिया देने के लिए केवल एक बार डिवाइस को वाइब्रेट करना चाहते हैं। आप performHapticFeedback()
एक के समारोह का उपयोग कर सकते हैं View
। इसे VIBRATE
घोषणा में अनुमति की आवश्यकता नहीं है ।
अपनी परियोजना के Utils.kt जैसे कुछ सामान्य वर्ग में शीर्ष स्तर के समारोह के रूप में निम्नलिखित फ़ंक्शन का उपयोग करें:
/**
* Vibrates the device. Used for providing feedback when the user performs an action.
*/
fun vibrate(view: View) {
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
}
और फिर इसे अपने Fragment
या Activity
निम्नलिखित के रूप में कहीं भी उपयोग करें :
vibrate(requireView())
इतना ही आसान!
<uses-permission android:name="android.permission.VIBRATE"/>
<manifest>
टैग और बाहरी <application>
टैग के अंदर जोड़ा जाना चाहिए ।
मैं निम्नलिखित बर्तन विधि का उपयोग करता हूं:
public static final void vibratePhone(Context context, short vibrateMilliSeconds) {
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(vibrateMilliSeconds);
}
AndroidManifest फ़ाइल के लिए निम्नलिखित अनुमति जोड़ें
<uses-permission android:name="android.permission.VIBRATE"/>
यदि आप ऊपर दिए गए सुझाव के अनुसार विभिन्न प्रकार के कंपन (पैटर्न / अनिश्चित) का उपयोग करना चाहते हैं तो आप ओवरलोडेड तरीकों का उपयोग कर सकते हैं।
उपरोक्त उत्तर बहुत सही है, लेकिन मैं इसे करने के लिए एक आसान कदम दे रहा हूं:
private static final long[] THREE_CYCLES = new long[] { 100, 1000, 1000, 1000, 1000, 1000 };
public void longVibrate(View v)
{
vibrateMulti(THREE_CYCLES);
}
private void vibrateMulti(long[] cycles) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification();
notification.vibrate = cycles;
notificationManager.notify(0, notification);
}
और फिर अपनी xml फ़ाइल में:
<button android:layout_height="wrap_content"
android:layout_width ="wrap_content"
android:onclick ="longVibrate"
android:text ="VibrateThrice">
</button>
यह सबसे आसान तरीका है।
पैटर्न / लहरों में कंपन :
import android.os.Vibrator;
...
// Vibrate for 500ms, pause for 500ms, then start again
private static final long[] VIBRATE_PATTERN = { 500, 500 };
mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// API 26 and above
mVibrator.vibrate(VibrationEffect.createWaveform(VIBRATE_PATTERN, 0));
} else {
// Below API 26
mVibrator.vibrate(VIBRATE_PATTERN, 0);
}
प्लस
इसमें आवश्यक अनुमति AndroidManifest.xml
:
<uses-permission android:name="android.permission.VIBRATE"/>
इसे अपने प्रोजेक्ट के कुछ सामान्य वर्ग जैसे Utils.kt में एक शीर्ष स्तर के फ़ंक्शन के रूप में उपयोग करें
// Vibrates the device for 100 milliseconds.
fun vibrateDevice(context: Context) {
val vibrator = getSystemService(context, Vibrator::class.java)
vibrator?.let {
if (Build.VERSION.SDK_INT >= 26) {
it.vibrate(VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
@Suppress("DEPRECATION")
it.vibrate(100)
}
}
}
और फिर इसे अपने कोड में कहीं भी निम्नानुसार कॉल करें:
vibrateDevice(requireContext())
स्थिरांक Vibrator::class.java
का उपयोग करने से अधिक प्रकार सुरक्षित है String
।
हम vibrator
उपयोग करने के लिए अशक्तता की जांच करते हैं let { }
, क्योंकि यदि कंपन डिवाइस के लिए उपलब्ध नहीं है, तो vibrator
होगा null
।
else
खंड में अवक्षेपण को दबा देना ठीक है , क्योंकि चेतावनी नए एसडीके से है।
हमें कंपन का उपयोग करने के लिए रनटाइम पर अनुमति की आवश्यकता नहीं है। लेकिन हमें इसे AndroidManifest.xml
निम्न रूप में घोषित करने की आवश्यकता है :
<uses-permission android:name="android.permission.VIBRATE"/>
इसे इस्तेमाल करो:
import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 1000 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneShot(1000,VibrationEffect.DEFAULT_AMPLITUDE));
}else{
//deprecated in API 26
v.vibrate(1000);
}
ध्यान दें:
AndroidManifest.xml फ़ाइल में अनुमति शामिल करना न भूलें:
<uses-permission android:name="android.permission.VIBRATE"/>
आप डिवाइस और उसके काम को वाइब्रेट कर सकते हैं
Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(100);
अनुमति आवश्यक है, लेकिन आवश्यक रनटाइम अनुमति पर नहीं
<uses-permission android:name="android.permission.VIBRATE"/>