Android डिवाइस को वाइब्रेट कैसे करें?


499

मैंने एक Android एप्लिकेशन लिखा था। अब, मैं एक निश्चित कार्रवाई होने पर डिवाइस को वाइब्रेट करना चाहता हूं। मैं यह कैसे कर सकता हूँ?

जवाबों:


986

प्रयत्न:

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"/>

3
क्या सभी फोन के कंपन को रद्द करने का एक तरीका है? धन्यवाद!
जवि

14
@ जोशस्वॉस यह 500 मिलीसेकंड है जो सिर्फ आधा सेकंड है। Google डॉक्स देखें। developer.android.com/reference/android/os/Vibrator.html
cjayem13

5
यह मुझे देता है: संदर्भ हल नहीं किया जा सकता है या एक क्षेत्र नहीं है ..?! समस्या क्या है
मैकलान

3
कंपन अब पदावनत हो गया है। इसके बजाय हितेश साहू द्वारा समाधान का उपयोग करें।
रे ली

2
इस विधि को एपीआई स्तर 26 में अपदस्थ किया गया था vibrate(VibrationEffect)। इसके बजाय उपयोग करें ।
टिमो बैहर

651

अनुदान कंपन की अनुमति

किसी भी कंपन कोड को लागू करने से पहले, आपको अपने आवेदन को कंपन करने की अनुमति देनी होगी:

<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");
}

दूसरे, कृपया सुनिश्चित करें कि आपने अपने आवेदन को कंपन करने की अनुमति दी है! पहले बिंदु पर वापस जाएँ।


26
उत्कृष्ट उत्तर, हालांकि मैं अनिश्चित काल के लिए कंपन से सावधान रहूंगा। कृपया इस सुविधा का उपयोग करते समय जिम्मेदार रहें!
डेव

4
शानदार जवाब, लेकिन एक बात। जब आप कहते हैं 'यहाँ' 0 'का अर्थ अनिश्चित काल तक दोहराना है', हालांकि यह सच है, थोड़ा भ्रामक है। यह संख्या पैटर्न सरणी का सूचकांक है जिसे दोहराते समय पैटर्न शुरू हो जाएगा।
अनारोन्वार्गस

1
@ARonvargas फेयर पॉइंट, हालांकि यह इस दायरे से बाहर है कि ज्यादातर लोग क्या हासिल करने की कोशिश कर रहे हैं। मैं एक साधारण स्पष्टीकरण के लिए गया था :)
लियाम जॉर्ज बेट्सवर्थ

@ लिआम जॉर्ज बेट्सवर्थ मैं मोबाइल को साइलेंट मोड में भी कैसे कंपनता हूं? कृप्या।
पार्थी

1
विसर्जन-लिंक नीचे है और मैं इसे आर्काइव.ऑर्ग पर नहीं पा सकता :(
लूपर

73

अपडेट 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)
    }
}

2
हमें कंपन के लिए रनटाइम अनुमति की आवश्यकता नहीं है। कंपन एक खतरनाक अनुमति नहीं है, इसलिए इसे केवल घोषणा में घोषित किया जाना चाहिए। [ developer.android.com/guide/topics/permissions/…
Roon13

@BugsHappen प्रलेखन चला गया। इसे अपडेट करेगा या हटाएगा।
Roon13

केवल एक चीज जो मैं getSystemServicethis.getContext().getSystemService
जोड़ूंगा

आप महोदय ने उस कार्य नाम का एक उत्कट 'कारण' अर्जित किया, स्पर्श
Starwave

18

उपरोक्त उत्तर एकदम सही हैं। हालाँकि मैं बटन क्लिक पर अपने ऐप को ठीक दो बार वाइब्रेट करना चाहता था और यह छोटी सी जानकारी यहाँ गायब है, इसलिए मेरे जैसे भविष्य के पाठकों के लिए पोस्ट करना। :)

हमें ऊपर बताए अनुसार अनुसरण करना होगा और नीचे के रूप में केवल एक परिवर्तन कंपन पैटर्न में होगा,

long[] pattern = {0, 100, 1000, 300};
v.vibrate(pattern, -1); //-1 is important

यह ठीक दो बार कंपन होगा । जैसा कि हम पहले से ही जानते हैं

  1. 0 देरी के लिए है
  2. 100 कहते हैं कि पहली बार 100ms के लिए कंपन करें
  3. अगला 1000 मी की देरी से आता है
  4. और 300ms के लिए फिर से कंपन करने वाली पोस्ट करें

वैकल्पिक रूप से देरी और कंपन का उल्लेख करने पर कोई भी जा सकता है (जैसे 0, 100, 1000, 300, 1000, 300, 3 कंपन और इतने पर ..) लेकिन याद रखें @ दवे का शब्द जिम्मेदारी से उपयोग करें। :)

यहां यह भी ध्यान दें कि रिपीट पैरामीटर -1 पर सेट है जिसका मतलब है कि कंपन वैसा ही होगा जैसा पैटर्न में बताया गया है । :)


-1 का मतलब कंपन क्यों होता है जैसा कि पैटर्न में बताया गया है? धन्यवाद!
रुचिर बारोनिया 19

@ मेरे जवाब के लिए कृपया देखें। '-1' वह इंडेक्स है जिस पर पहली बार पैटर्न का पालन करने के बाद कंपन से दोहराने की कोशिश की जाएगी। '-1' सीमा से बाहर है, इसलिए कंपन दोहराता नहीं है।
लियाम जॉर्ज बेट्सवर्थ

@ रीच - लियाम जॉर्ज बेट्सवर्थ सही है। एंड्रॉइड डॉक्स का कहना है - पैटर्न को दोहराने के लिए, पैटर्न सरणी में इंडेक्स पास करें जिस पर रिपीट शुरू करने के लिए, या -1 को दोहराए जाने को अक्षम करें। लिंक - developer.android.com/reference/android/os/… , int)
अतुल ओ होलिक

14

मैंने अपने पहले कार्यान्वयन पर यह समझने के लिए संघर्ष किया कि यह कैसे करें - सुनिश्चित करें कि आपके पास निम्नलिखित हैं:

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);    
 }

10

अनुमति का उपयोग किए बिना कंपन करें

यदि आप उपयोगकर्ता क्रिया पर प्रतिक्रिया देने के लिए केवल एक बार डिवाइस को वाइब्रेट करना चाहते हैं। आप 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())

इतना ही आसान!


2
अच्छा और सरल उपाय!
वाडईहाइप


4

मैं निम्नलिखित बर्तन विधि का उपयोग करता हूं:

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"/>

यदि आप ऊपर दिए गए सुझाव के अनुसार विभिन्न प्रकार के कंपन (पैटर्न / अनिश्चित) का उपयोग करना चाहते हैं तो आप ओवरलोडेड तरीकों का उपयोग कर सकते हैं।


4

उपरोक्त उत्तर बहुत सही है, लेकिन मैं इसे करने के लिए एक आसान कदम दे रहा हूं:

 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>

यह सबसे आसान तरीका है।


3

पैटर्न / लहरों में कंपन :

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"/>

3

अधिक प्रकार की सुरक्षा के लिए कोटलिन अपडेट

इसे अपने प्रोजेक्ट के कुछ सामान्य वर्ग जैसे 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"/>

2

इसे इस्तेमाल करो:

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"/>

1

आप डिवाइस और उसके काम को वाइब्रेट कर सकते हैं

   Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
           v.vibrate(100);

अनुमति आवश्यक है, लेकिन आवश्यक रनटाइम अनुमति पर नहीं

<uses-permission android:name="android.permission.VIBRATE"/>

इस समाधान को पदावनत किया गया है
BekaBot
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.