[英]What is called internally on iOS 7 for vibration (it has changed!)?
根據iOS中的自定義振動API嗎? (從iOS 5/6開始),AudioServicesPlaySystemSoundWithVibration()在內部用於iOS上的振動。
但是我嘗試使用MobileSubstrate掛接到iOS 7 ... AudioServicesPlaySystemSoundWithVibration < - 似乎永遠不會被稱為AudioServicesPlaySystemSound < - 在切換靜音開關時調用,但沒有其他振動AudioServicesPlayAlertSound < - 似乎從來沒有叫做
所以問題是,從iOS 7開始,內部使用了什么功能(可能仍在AudioToolkit.framework中,但可能沒有)用於振動?
我最近看了一下當你切換靜音開關或連接電源時SpringBoard如何播放振動。 它只使用具有相同參數的AudioServicesPlaySystemSound
(用於充電的0x452,用於靜默切換的0x453)靜音開關的方框。 只有在我看到AudioServicesPlaySystemSoundWithVibration
調用的地方才會添加公告。
這適用於iOS 5-7。 唯一不同的是iOS 5公告使用AudioServicesPlaySoundWithBehavior
因為AudioServicesPlaySystemSoundWithVibration
僅在iOS 6開始提供。
UPDATE
Preferences應用程序使用帶有0x547或0x546的AudioServicesPlaySystemSound
作為參數。 使用MobileSubstrate無法看到的原因是,Preferences應用程序在運行時使用dlopen
加載AudioToolbox
框架,然后使用dlsym
獲取指向AudioServicesPlaySystemSound
指針。 要在這種情況下掛鈎函數,您需要等到Preferences應用程序獲得指針然后才掛鈎它。
更新2
SpringBoard還使用CoreMedia.framework API來發揮振動。 這里的所有參數只是從反匯編看到的猜測。 我對C結構參數和浮點指令沒有多少經驗。
FigVibratorPlayVibrationWithDictionary(CFDictionaryRef pattern, BOOL, float)
。 最后兩個參數對我來說是未知的 - 它們被設置為NO和1.0f。 FigVibratorPlayVibration(float, CMTime, CMTime, CTime)
。 上面的函數最有可能被iOS使用,但還有其他一些值得掛鈎的函數:
FigVibratorStartOneShot(float, CMTime)
FigVibratorStartRepeating
。 第一個參數可能是一個浮點數,但不知道其他的 - 它是一些CMTime參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.