2010-04-27 213 views
6

在我的應用程序正在使用下面的編碼碼型振動我的iPhone設備如何在iPhone中持續振動?

包括:AudioToolbox框架

頭文件:

#import "AudioToolbox/AudioServices.h" 

代碼:

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 

我的問題是當我運行我的應用程序時,它會振動,但只是第二次,但我希望它會繼續振動直到我會阻止它。

怎麼可能?

+3

因爲我生活和呼吸,我希望這不能做:)請永遠不要讓你的應用程序振動我的手機不停:D – 2010-04-27 05:02:10

+4

「輕推,微推,眨眼睛,不要再說了」 – 2010-04-27 05:25:41

+5

即將推出應用商店... iBrator – 2010-04-27 05:36:06

回答

4

有很多例子顯示瞭如何通過私人CoreTelephony調用來做到這一點:_CTServerConnectionSetVibratorState,但它確實不是一個明智的做法,因爲你的應用程序因爲濫用像這樣的振動功能而被拒絕。只是不要這樣做。

22

謝天謝地,不可能改變振動的持續時間。觸發振動的唯一方法就是像現在這樣玩kSystemSoundID_Vibrate。如果你真的想,但你可以做的是無限期地重複振動,產生脈衝振動效果,而不是長時間的振動效果。要做到這一點,你需要註冊一個回調函數將被調用時,你玩的振動聲齊全:

AudioServicesAddSystemSoundCompletion (
     kSystemSoundID_Vibrate, 
     NULL, 
     NULL, 
     MyAudioServicesSystemSoundCompletionProc, 
     NULL 
    ); 
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 

然後定義您的回調函數來重播再次震動聲:

#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); 
    } 
} 
+0

@jason Jenkins:isholdKeepbuzzing是局部變量或全局變量。我的布爾變量不接受,即使我宣佈廣告__block – srinadh 2013-03-21 09:49:42

1

閱讀蘋果iPhone人機交互指南。我相信這在應用程序中尚未獲得批准。

0

iOS 5已實現自定義振動模式。所以在某些情況下可變振動是可以接受的唯一不知道庫處理的是什麼(肯定不是CoreTelephony),以及它是否對開發者開放。所以繼續搜索。