Что называется внутренне на iOS 7 для вибрации (она изменилась!)?
По словам Есть ли API для пользовательских вибраций в iOS? (это было бы с iOS 5 / 6), AudioServicesPlaySystemSoundWithVibration() используется внутри для вибрации на iOS.
Однако я попытался подключиться к iOS 7, используя MobileSubstrate... AudioServicesPlaySystemSoundWithVibration <- Кажется, никогда не вызывается AudioServicesPlaySystemSound <- вызывается при переключении переключателя молчания, но никаких других вибраций AudioServicesPlayAlertSound <- кажется, никогда не было называться
Таким образом, вопрос в том, какая функция (предположительно, все еще в AudioToolkit.framework, но, возможно, нет) используется для вибрации внутри iOS 7?
1 ответ
Недавно я посмотрел, как SpringBoard воспроизводит свои вибрации, когда вы переключаете тихий переключатель или подключаетесь к источнику питания. Он использует только AudioServicesPlaySystemSound
с тем же аргументом (0x452 для зарядки, 0x453 для бесшумного переключателя) относительно бесшумного переключателя. Единственное место, где я видел AudioServicesPlaySystemSoundWithVibration
вызов, когда бюллетень добавлен.
Это относится к iOS 5-7. Разница только в использовании бюллетеней iOS 5 AudioServicesPlaySoundWithBehavior
так как AudioServicesPlaySystemSoundWithVibration
доступно только начиная с iOS 6.
ОБНОВИТЬ
Приложение предпочтений использует AudioServicesPlaySystemSound
с 0x547 или 0x546 в качестве аргумента. Причина, по которой вы не видите этого с MobileSubstrate, заключается в том, что приложение Preferences загружается AudioToolbox
рамки во время выполнения с помощью dlopen
а затем получает указатель на AudioServicesPlaySystemSound
с dlsym
, Чтобы подключить функцию в этом случае, вам нужно подождать, пока приложение Preferences не получит указатель, и только затем подключить его.
ОБНОВЛЕНИЕ 2
SpringBoard также использует API-интерфейсы CoreMedia.framework для воспроизведения вибраций. Все аргументы здесь являются лишь предположением, глядя на разборку. У меня нет большого опыта работы с аргументами структуры C и инструкциями с плавающей точкой.
FigVibratorPlayVibrationWithDictionary(CFDictionaryRef pattern, BOOL, float)
, Последние два аргумента мне неизвестны - они установлены как NO и 1.0f.FigVibratorPlayVibration(float, CMTime, CMTime, CTime)
,
Вышеуказанные функции, скорее всего, будут использоваться iOS, но есть некоторые другие функции, которые стоит перехватить:
FigVibratorStartOneShot(float, CMTime)
FigVibratorStartRepeating
, Первым аргументом, вероятно, является число с плавающей точкой, но для других не знаю - это некоторое количество аргументов CMTime.