如何在iphone中连续振动?

Ama*_*007 6 iphone

在我的应用程序中,我正在使用以下编码模式来振动我的iPhone设备

包括:AudioToolbox框架

头文件:

#import "AudioToolbox/AudioServices.h"
Run Code Online (Sandbox Code Playgroud)

码:

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);  
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我运行我的应用程序时,它会振动,但只有第二次,但我希望它会持续振动直到我停止它.

怎么可能呢?

Jas*_*ins 22

值得庆幸的是,不可能改变振动的持续时间.触发振动的唯一方法就是kSystemSoundID_Vibrate按照你的方式进行.如果你真的想要,你可以做的是无限期地重复振动,产生脉冲振动效果而不是长连续振动效果.要执行此操作,您需要注册一个回调函数,当您播放的振动声音完成时将调用该函数:

 AudioServicesAddSystemSoundCompletion (
        kSystemSoundID_Vibrate,
        NULL,
        NULL,
        MyAudioServicesSystemSoundCompletionProc,
        NULL
    );
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
Run Code Online (Sandbox Code Playgroud)

然后定义您的回调函数以再次重放振动声音:

#pragma mark AudioService callback function prototypes
void MyAudioServicesSystemSoundCompletionProc (
   SystemSoundID  ssID,
   void           *clientData
);

#pragma mark AudioService callback function implementation

// Callback that gets called after we finish buzzing, so we 
// can buzz a second time.
void MyAudioServicesSystemSoundCompletionProc (
   SystemSoundID  ssID,
   void           *clientData
) {
  if (iShouldKeepBuzzing) { // Your logic here...
      AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 
  } else {
      //Unregister, so we don't get called again...
      AudioServicesRemoveSystemSoundCompletion(kSystemSoundID_Vibrate);
  }  
}
Run Code Online (Sandbox Code Playgroud)


war*_*enm 4

有许多示例展示了如何使用私有 CoreTelephony call: 来执行此操作_CTServerConnectionSetVibratorState,但这实际上不是一个明智的做法,因为您的应用程序因滥用此类振动功能而被拒绝。只是不要这样做。