2014-05-13 6 views
1

Согласно Are there APIs for custom vibrations in iOS? (это было бы как iOS 5/6), AudioServicesPlaySystemSoundWithVibration() используется внутри для вибрации на iOS.Что называется внутренне на iOS 7 для вибрации (он изменился!)?

Однако я попытался закреплять в КСН 7, используя MobileSubstrate ... AudioServicesPlaySystemSoundWithVibration < - Не кажется ли когда-нибудь назвать AudioServicesPlaySystemSound < - Вызывается, когда молчание переключатель переключается, но никакие другие вибрации не AudioServicesPlayAlertSound < - Кажется, никогда не назовешь

Вопрос в том, какая функция (предположительно все еще в AudioToolkit.framework, но, возможно, нет) используется внутри для вибрации с iOS 7?

ответ

3

Недавно я посмотрел, как SpringBoard играет на своих вибрациях, когда вы переключаете тихий переключатель или подключаетесь к источнику питания. Он использует только AudioServicesPlaySystemSound с тем же аргументом (0x452 для зарядки, 0x453 для бесшумного переключателя). Только место, где я видел AudioServicesPlaySystemSoundWithVibration звонок, когда добавлен бюллетень.

Это относится к iOS 5-7. Только разница в IOS 5 Бюллетени использовать AudioServicesPlaySoundWithBehavior потому AudioServicesPlaySystemSoundWithVibration доступна только начиная с прошивкой 6.

UPDATE

Preferences приложение использует AudioServicesPlaySystemSound с 0x547 или 0x546 в качестве аргумента. Причина, по которой вы не видите, что с MobileSubstrate заключается в том, что приложение Preferences загружает фреймворк AudioToolbox во время выполнения с использованием dlopen, а затем получает указатель на AudioServicesPlaySystemSound с dlsym. Чтобы перехватить функцию в этом случае, вам нужно подождать, пока приложение «Настройки» не получит указатель и только затем перехватит его.

UPDATE 2

SpringBoard также использует CoreMedia.framework API, чтобы играть вибрации. Все аргументы здесь - это всего лишь предположение о разборке. У меня не так много опыта с аргументами структуры C и инструкциями с плавающей запятой.

  • FigVibratorPlayVibrationWithDictionary(CFDictionaryRef pattern, BOOL, float). Последние два аргумента мне неизвестны - они установлены как NO и 1.0f.
  • FigVibratorPlayVibration(float, CMTime, CMTime, CTime).

функции выше, скорее всего, будет использоваться прошивкой, но есть некоторые другие функции стоит зацепляющие:

  • FigVibratorStartOneShot(float, CMTime)
  • FigVibratorStartRepeating. Первый аргумент, вероятно, является float, но не знает других - это несколько аргументов CMTime.
+0

Право. Но тогда есть все эти другие вибрации в iOS, например, когда вы переключаете вибрацию внутри настроек, получаете уведомление, получаете вызов и т. Д., И никто из них не использует AudioServicesPlaySystemSound/AudioServicesPlaySystemSoundWithVibration. Я понятия не имел о AudioServicesPlaySoundWithBehavior. Возможно, это то, что они используют! У вас есть определение функции/args? И как вы его нашли? – tydbwjiiofj23iof2jiojf2ifj3i2

+0

AudioServicesPlaySoundWithBehavior предназначен только для iOS5. Он отсутствует с iOS6 - его заменяет AudioServicesPlaySystemSoundWithVibration. Я уже рассказывал об уведомлениях/бюллетенях - они используют AudioServicesPlaySystemSoundWithVibration. По крайней мере, это то, что я видел. – creker

+0

Я обновил свой ответ с информацией о приложении «Настройки». Как я нашел все это - разборку. – creker