Ответ немного зависит от того, предназначено ли это приложение, которое просто не появится в App Store (корпоративное приложение или личное/хобби-приложение), или же оно действительно будет работать на взломанных телефонах. .
Если вы можете положиться на взломанный телефон и утилиты для джейлбрейка, такие как MobileSubstrate, то я считаю, что вы можете реализовать метод для открытия Siri точно так же, как libActivator Райана Петрича делает, как я показываю в этом другом ответе .
Однако, если вы создаете для обычных заключенных телефонов, я все еще думаю, что вы можете «взломать» его (с помощью частных API), имитируя способ, которым пользователь открывает Siri. Сначала нажмите кнопку «Домой», немного удерживайте ее, затем отпустите.
Этот код работает для меня (iOS 6.1):
#import "GSEvent.h"
а также
- (void)launchSiri {
[self simulateTouchEvent: kGSEventMenuButtonDown];
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self simulateTouchEvent: kGSEventMenuButtonUp];
});
}
- (void)simulateTouchEvent: (GSEventType)type
{
struct GSEventRecord record;
memset(&record, 0, sizeof(record));
record.type = type;
record.timestamp = GSCurrentEventTimestamp();
GSSendSystemEvent(&record);
}
Это зависит от наличия заголовка GSEvent.h, который не является частью общедоступного набора заголовков. Кажется, я получил свой здесь, а также GSWindow. h, который он втягивает. Очевидно, вам нужно будет загрузить эти два заголовка и добавить их в свой проект.
Этот код находится в частной структуре GraphicsServices, поэтому вам также потребуется добавить эту структуру в свой проект. Сделайте это так же, как добавление обычного фреймворка, но вам нужно перейти куда-нибудь, например
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/GraphicsServices.framework
чтобы найти его (путь скорректирован для вашего каталога установки Xcode и SDK).
Отказ от ответственности: я проверял это на взломанном телефоне, но это определенно было внутри обычного приложения, установленного в /var/mobile/Applications/
песочнице, и я на 99% уверен, что не сделал ничего, что зависит от того, взломан.
person
Nate
schedule
07.09.2013