Что называется внутренне на 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.
Другие вопросы по тегам