1

根据iOS 中是否有用于自定义振动的 API?(从 iOS 5 / 6 开始),AudioServicesPlaySystemSoundWithVibration() 在 iOS 内部用于振动。

但是我尝试使用 MobileSubstrate 连接到 iOS 7... AudioServicesPlaySystemSoundWithVibration <- 似乎从来没有被称为 AudioServicesPlaySystemSound <- 当静音开关被切换时被调用,但没有其他振动 AudioServicesPlayAlertSound <- 似乎从来没有叫做

所以问题是,从 iOS 7 开始,什么函数(可能仍在 AudioToolkit.framework 中,但可能不是)在内部用于振动?

4

1 回答 1

3

我最近研究了当您切换静音开关或连接到电源时 SpringBoard 如何播放它的振动。它只使用AudioServicesPlaySystemSound相同的参数(0x452 用于充电,0x453 用于静音开关)与静音开关无关。我见过通话的唯一地方AudioServicesPlaySystemSoundWithVibration是添加公告时。

这适用于 iOS 5-7。唯一的区别在于 iOS 5 公告的使用AudioServicesPlaySoundWithBehavior,因为AudioServicesPlaySystemSoundWithVibration仅从 iOS 6 开始可用。

更新

首选项应用程序使用AudioServicesPlaySystemSound0x547 或 0x546 作为参数。您看不到 MobileSubstrate 的原因是因为 Preferences 应用程序AudioToolbox在运行时使用加载框架,dlopen然后获取指向AudioServicesPlaySystemSoundwith 的指针dlsym。要在这种情况下挂钩该函数,您需要等到 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 参数。
于 2014-05-14T08:02:59.963 回答