IPhone वाइब्रेट करना


228

एक बार कंपन करने के लिए iPhone कैसे सेट किया जा सकता है?

उदाहरण के लिए, जब कोई खिलाड़ी जीवन खो देता है या खेल खत्म हो जाता है, तो iPhone को कंपन करना चाहिए।


9
हिला इशारा पूरी तरह से कंपन से अलग है। एक मानव-पहल है, एक उपकरण-पहल है।
ईको

जवाबों:


404

" IPhone ट्यूटोरियल: iOS उपकरणों की क्षमताओं की जांच करने का बेहतर तरीका ":

दो समान कार्य हैं जो एक पैरामीटर लेते हैं kSystemSoundID_Vibrate:

1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

दोनों ही फंक्शन iPhone को वाइब्रेट करते हैं। लेकिन, जब आप कंपन का समर्थन करने वाले उपकरणों पर पहले फ़ंक्शन का उपयोग करते हैं, तो यह एक बीप साउंड बजाता है। दूसरी ओर, दूसरा कार्य, असमर्थित उपकरणों पर कुछ भी नहीं करता है। इसलिए यदि आप डिवाइस को लगातार कंपन करने जा रहे हैं, तो एक चेतावनी के रूप में, सामान्य ज्ञान कहता है, फ़ंक्शन 2 का उपयोग करें।

सबसे पहले, AudioToolbox.frameworkबिल्ड चरणों में अपने लक्ष्य के लिए ऑडियोटूलबॉक्स फ्रेमवर्क जोड़ें ।

फिर, इस हेडर फ़ाइल को आयात करें:

#import <AudioToolbox/AudioServices.h>

3
#import <कोको / कोको.एच> की आवश्यकता नहीं है।
रैप्टर

10
वहाँ 1 सेकंड से कम कंपन समय को कम करने का एक तरीका है?
जॉर्ज असदा

11
मैं यह जोड़ना चाहूंगा कि यदि iOS की सेटिंग्स में कंपन बंद हो जाता है, तो उपयोगकर्ता को इन कमांड का उपयोग करने पर भी कंपन नहीं मिलेगा।
डेनिस कुतलुबाव

7
स्विफ्ट में: AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))(कम से कम बीटा 2 के रूप में)
सैम सॉफ्स

1
AudioServicesPlayAlertSound (kSystemSoundID_Vibrate); IPhone पर तेजी से जीवंत लेकिन यह iPad पर किसी भी बीप ध्वनि नहीं करता है।
मंगेश

45

स्विफ्ट 2.0+

AudioToolbox अब kSystemSoundID_Vibrateएक SystemSoundIDप्रकार के रूप में प्रस्तुत करता है , इसलिए कोड है:

import AudioToolbox.AudioServices

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)

इसके बजाय अतिरिक्त डाली कदम के माध्यम से जाने के लिए

(@Dov को सहारा)

मूल उत्तर (स्विफ्ट 1.x)

और, यहाँ आप इसे स्विफ्ट पर कैसे करते हैं (यदि आप उसी परेशानी में भागे जैसे मैंने किया था)

लिंक के खिलाफ AudioToolbox.framework(अपनी परियोजना पर जाएं, अपने लक्ष्य का चयन करें, चरणों का निर्माण करें, पुस्तकालयों के साथ लिंक बाइनरी, वहां पुस्तकालय जोड़ें)

एक बार जो पूरा हो गया:

import AudioToolbox.AudioServices

// Use either of these
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

चीज़ की बात यह है कि SystemSoundIDमूल रूप से एक typealias(फैंसी स्विफ्ट typedef) है aUInt32 , और kSystemSoundID_Vibrateयह एक नियमित है Int। संकलक आपको इसमें से कास्ट करने की कोशिश करने के लिए एक त्रुटि देता Intहै UInt32, लेकिन त्रुटि "सिस्टमसाउंडआईडी में परिवर्तित नहीं हो सकती" के रूप में पढ़ती है, जो भ्रामक है। सेब क्यों नहीं बना यह सिर्फ एक स्विफ्ट Enum मेरे से परे है।

@ aponomarenko के विवरण में जाता है, मेरा जवाब सिर्फ स्विफ्टर्स के लिए है।


यह स्विफ्ट 2 / iOS 9 / Xcode 7 में तय किया गया प्रतीत होता है। मैंने इसका उपयोग किया AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)और यह ठीक संकलित किया गया
Dov

35

ऐसा करने का एक सरल तरीका ऑडियो सेवाओं के साथ है:

#import <AudioToolbox/AudioToolbox.h> 
...    
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

3
#import <AudioToolbox / AudioToolbox.h> और आपको अपने प्रोजेक्ट के बिल्ड चरणों में AudioToolbox.framework को जोड़ना होगा।
माइकल मंगोल्ड

31

मुझे इस बात से बहुत परेशानी हुई कि जिन डिवाइसों में कंपन था, वे किसी तरह से बंद हो गए, लेकिन हमें इसकी परवाह किए बिना काम करने की ज़रूरत थी, क्योंकि यह हमारे एप्लिकेशन के कामकाज के लिए महत्वपूर्ण है, और चूंकि यह एक डॉक्यूमेंटेड मेथड कॉल का पूर्णांक है, इसलिए यह पास हो जाएगा मान्यता। इसलिए मैंने कुछ ध्वनियों की कोशिश की है जो यहाँ के अच्छी तरह से प्रलेखित लोगों के बाहर थीं: TUNER88 / iOSSystemSoundsLibrary

मैंने तब 1352 पर ठोकर खाई है, जो साइलेंट स्विच या डिवाइस पर सेटिंग्स की परवाह किए बिना काम कर रहा है (Settings->vibrate on ring, vibrate on silent)

- (void)vibratePhone;
{
     if([[UIDevice currentDevice].model isEqualToString:@"iPhone"])
     {
         AudioServicesPlaySystemSound (1352); //works ALWAYS as of this post
     }
     else
     {
          // Not an iPhone, so doesn't have vibrate
          // play the less annoying tick noise or one of your own
          AudioServicesPlayAlertSound (1105);
     }
}

7
मैजिक कॉन्स्टेंट के बजाय एलिसियस नाम का उपयोग करना हमेशा बेहतर होता है, जैसे कि kSystemSoundID_Vibrate इसके बजाय 1352। मैं आपको अपना उत्तर अपडेट करने के लिए प्रोत्साहित करता हूं।
nalexn

3
मैं सहमत हूं कि यह जादू 1352 का उपयोग करना आदर्श नहीं है, लेकिन जब डिवाइस पर कंपन स्विच बंद होता है तब भी मुझे कंपन को मजबूर करने का कोई अन्य तरीका नहीं मिल सकता है। यह एकमात्र तरीका प्रतीत होता है।
मार्शिलिंग

4
मैंने प्रकाशित स्थिरांक से शुरू होने वाले पूर्णांक के साथ लूप के लिए लिखा और यह पता लगाया कि कौन एक कंपन पैदा करता है
जोएल टेप्ली

2
मैं पुष्टि कर सकता हूं कि आईफोन पर मूक मोड सक्रिय होने पर भी आईफोन कंपन करता है। बहुत बढ़िया जवाब!
vomako

2
AudioServicesPlaySystemSound (1352) अभी भी iPhones के लिए काम करता है, भले ही जनवरी 2016 तक मौन स्विच स्थिति की परवाह किए बिना
JustAnotherCoder

26

महत्वपूर्ण नोट: भविष्य में गिरावट का अलर्ट।

IOS 9.0 के रूप में , API के लिए वर्णन कार्य करता है:

AudioServicesPlaySystemSound(inSystemSoundID: SystemSoundID)
AudioServicesPlayAlertSound(inSystemSoundID: SystemSoundID)

निम्नलिखित नोट शामिल हैं:

This function will be deprecated in a future release.
Use AudioServicesPlayAlertSoundWithCompletion or  
AudioServicesPlaySystemSoundWithCompletion instead.

जाने का सही तरीका इन दोनों में से किसी एक का उपयोग करना होगा:

AudioServicesPlayAlertSoundWithCompletion(kSystemSoundID_Vibrate, nil)

या

AudioServicesPlayAlertSoundWithCompletion(kSystemSoundID_Vibrate) {
 //your callback code when the vibration is done (it may not vibrate in iPod, but this callback will be always called)
}

स्मरण में रखना import AVFoundation


आपको आयात विवरण याद आ रहा है
जुआन बोएरो

आयात AudioToolbox.AudioServices
ह्यूगो अलोंसो

मैंने इसे स्वयं किया, बस एवीफ़ाउंडेशन एक के साथ है।
जुआन बोइरो

वैसे भी कंपन की अवधि निर्धारित करने के लिए?
माइक्रो

आपको कई कॉल समाप्‍त करने की आवश्‍यकता है, हर नई कॉल के बीच एक समय चूक का उपयोग करें
ह्यूगो अलोंसो

7

IPhone 7/7 प्लस या नए के लिए, इन तीन Haptic फ़ीडबैक API का उपयोग करें।

उपलब्ध एपीआई

सूचनाओं के लिए:

let generator = UINotificationFeedbackGenerator()
generator.notificationOccured(style: .error)

उपलब्ध शैलियों रहे हैं .error, .success, और .warning। प्रत्येक की अपनी विशिष्ट अनुभूति है।
से डॉक्स :

एक ठोस UIFeedbackGeneratorउपवर्ग जो सफलताओं, असफलताओं और चेतावनियों को संप्रेषित करने के लिए हाप्टिक्स बनाता है।

सरल कंपन के लिए:

let generator = UIImpactFeedbackGenerator(style: .medium)
generator.impactOccured()

उपलब्ध शैलियों रहे हैं .heavy, .medium, और .light। ये "कठोरता" की अलग-अलग डिग्री के साथ सरल कंपन हैं।
से डॉक्स :

एक ठोस UIFeedbackGeneratorउपवर्ग जो भौतिक प्रभावों को अनुकरण करने के लिए haptics बनाता है

जब उपयोगकर्ता ने किसी आइटम का चयन किया हो

let generator = UISelectionFeedbackGenerator()
generator.selectionChanged()

यह सभी सरीसृपों में से कम से कम ध्यान देने योग्य है, और इसलिए सबसे उपयुक्त है जब हापिक्स को ऐप के अनुभव से अधिक नहीं लेना चाहिए।
से डॉक्स :

एक ठोस UIFeedbackGeneratorउपवर्ग जो चयन में बदलाव का संकेत देने के लिए haptics बनाता है।

टिप्पणियाँ

इन एपीआई का उपयोग करते समय कुछ बातें याद रखने लायक हैं।

नोट ए

आप वास्तव में हैप्टिक नहीं बनाते हैं। आप सिस्टम से हैप्टिक उत्पन्न करने का अनुरोध करते हैं । सिस्टम नीचे के आधार पर तय करेगा:

  • यदि डिवाइस पर हैप्टिक्स संभव है (चाहे इस मामले में ताप्ती इंजन हो)
  • क्या ऐप ऑडियो रिकॉर्ड कर सकता है (अवांछित हस्तक्षेप को रोकने के लिए रिकॉर्डिंग के दौरान haptics उत्पन्न नहीं करता है)
  • सिस्टम सेटिंग्स में हैप्टिक्स सक्षम हैं या नहीं।

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

func haptic() {
    // Get whether the device can generate haptics or not
    // If feedbackSupportLevel is nil, will assign 0
    let feedbackSupportLevel = UIDevice.current.value(forKey: "_feedbackSupportLevel") as? Int ?? 0

    switch feedbackSupportLevel { 
    case 2:
        // 2 means the device has a Taptic Engine
        // Put Taptic Engine code here, using the APIs explained above

    case 1: 
    // 1 means no Taptic Engine, but will support AudioToolbox
    // AudioToolbox code from the myriad of other answers!

    default: // 0
        // No haptic support
        // Do something else, like a beeping noise or LED flash instead of haptics
    }

टिप्पणी स्थानापन्न switch- caseबयान, और इस हैप्टिक पीढ़ी कोड अन्य IOS उपकरणों के लिए पोर्टेबल हो जाएगा। यह जल्दबाजी के उच्चतम स्तर को उत्पन्न करेगा।

नोट बी

  • इस तथ्य के कारण कि हेप्टिक्स उत्पन्न करना एक हार्डवेयर-प्रकार का कार्य है, जब आप हैप्टिक-पीढ़ी कोड को कॉल करते हैं, और जब वास्तव में ऐसा होता है , तो इसके बीच विलंबता हो सकती है। इस कारण से, Taptic Engine API में सभी की एक prepare()विधि होती है, इसे तत्परता की स्थिति में रखना। उदाहरण के लिए अपने गेम का उपयोग करना: आप यह जान सकते हैं कि उपयोगकर्ता एचपी के बहुत कम होने या खतरनाक राक्षस के पास होने के कारण गेम समाप्त होने वाला है।
  • यदि आप कुछ सेकंड के भीतर एक हैप्टिक उत्पन्न नहीं करते हैं, तो तापिक इंजन निष्क्रिय स्थिति में वापस आ जाएगा (बैटरी जीवन को बचाने के लिए)


इस मामले में, ताप्ती इंजन को तैयार करने से उच्च-गुणवत्ता, अधिक उत्तरदायी अनुभव पैदा होगा।

उदाहरण के लिए, मान लें कि आपका ऐप दृश्यमान दुनिया के हिस्से को बदलने के लिए पैन जेस्चर पहचानकर्ता का उपयोग करता है। जब आप उपयोगकर्ता को 360 डिग्री के 'गोल' दिखते हैं, तो आप उत्पन्न करना चाहते हैं। यहां बताया गया है कि आप इसका उपयोग कैसे कर सकते हैं prepare():

@IBAction func userChangedViewablePortionOfWorld(_ gesture: UIPanGestureRecogniser!) {

    haptic = UIImpactFeedbackGenerator(style: .heavy)

    switch gesture.state {
        case .began:
            // The user started dragging the screen.
            haptic.prepare()

        case .changed:
            // The user trying to 'look' in another direction
            // Code to change viewable portion of the virtual world

            if virtualWorldViewpointDegreeMiddle = 360.0 { 
                haptic.impactOccured()
            }
        
        default:
            break

} 

बस याद रखना import UIKit!
बेंज

आप hapticइस विधि के अंदर एक नया उदाहरण नहीं बनाना चाहते हैं । आप impactOccuredउसी उदाहरण पर कॉल नहीं कर रहे हैं जिसे आप कॉल करते हैं prepare
3

5

और यदि आप ज़ामरीन (एकरस) ढांचे का उपयोग कर रहे हैं, तो बस कॉल करें

SystemSound.Vibrate.PlayAlertSound()

5

मेरी यात्रा में मैंने पाया है कि यदि आप ऑडियो रिकॉर्ड करते समय निम्न में से किसी एक को आज़माते हैं, तो डिवाइस सक्षम होने पर भी कंपन नहीं करेगा।

1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

डिवाइस के आंदोलनों की माप में एक विशिष्ट समय पर मेरी विधि को बुलाया गया था। मुझे रिकॉर्डिंग बंद करनी थी और फिर कंपन होने के बाद इसे फिर से चालू करें।

ऐसा लग रहा था।

-(void)vibrate {
    [recorder stop];
    AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
    [recorder start];
}

recorder एक AVRecorder उदाहरण है।

आशा है कि यह दूसरों की मदद करता है जो पहले एक ही समस्या थी।


4

IOS 10 में, और नए iPhones पर, आप haptic API का उपयोग कर सकते हैं। यह हैप्टिक प्रतिक्रिया AudioToolbox API की तुलना में नरम है।

आपके GAME OVER परिदृश्य के लिए, भारी UI प्रभाव प्रतिक्रिया उपयुक्त होनी चाहिए।

UIImpactFeedbackGenerator(style: .heavy).impactOccurred()

आप अन्य haptic राय शैलियों का उपयोग कर सकते हैं ।


1

स्विफ्ट में:

import AVFoundation
...
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))

0

मेरे मामले में मैं AVCaptureSession का उपयोग कर रहा था। AudioToolbox परियोजना के निर्माण चरणों में था और इसे आयात किया गया था लेकिन फिर भी काम नहीं किया। इसे काम करने के लिए मैंने कंपन से पहले सत्र रोक दिया और उसके बाद भी जारी रहा।

#import <AudioToolbox/AudioToolbox.h>
...
@property (nonatomic) AVCaptureSession *session;
...
- (void)vibratePhone;
{
  [self.session stopRunning];
     NSLog(@"vibratePhone %@",@"here");
    if([[UIDevice currentDevice].model isEqualToString:@"iPhone"])
    {
        AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); 
    }
    else
    {
        AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
    }
  [self.session startRunning];
}

-5

आप उपयोग कर सकते हैं

1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);

iPhone और कुछ नए iPods के लिए।

2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

आईपैड के लिए।


3
आईपॉड टच और आईपैड वाइब्रेट नहीं कर सकते।
DDPWNAGE

1
कोई कंपन क्षमता (iPod टच की तरह) वाले डिवाइस पर यह कुछ भी नहीं करेगा
लाल कृष्ण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.