use*_*939 16 iphone-privateapi ios siri
我希望以编程方式在我的应用程序中启动Siri,而不是让用户按住主页按钮.由于没有可用于实现此目的的公共API,我想知道,如果有人能够通过私有API以编程方式启动Siri,那么您使用了哪些私有API?
我对Siri的任何返回值都不感兴趣.我想要做的就是启动它.
Nat*_*ate 13
答案取决于是否适用于不会进入App Store(企业应用程序或个人/爱好应用程序)的应用程序,或者是否真的会在越狱手机上运行.
如果你可以依赖越狱手机和越狱实用程序如MobileSubstrate,那么我相信你可以实现一种方法来打开Siri,就像Ryan Petrich的libActivator一样,正如我在其他答案中所展示的那样.
但是,如果您正在构建普通的被盗手机,我仍然认为您可以通过模拟用户打开Siri的方式来"破解"它(使用私有API).首先,按Home键,按住一下,然后松开.
此代码适用于我(iOS 6.1):
#import "GSEvent.h"
Run Code Online (Sandbox Code Playgroud)
和
- (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);
}
Run Code Online (Sandbox Code Playgroud)
这依赖于具有GSEvent.h标头,该标头不是公共标头集的一部分.我相信我在这里得到了我的,以及它引入的GSWindow.h.显然,您需要下载这两个标题并将它们添加到您的项目中.
此代码位于GraphicsServices私有框架中,因此您还需要将该框架添加到项目中.这样做就像添加一个普通的框架,但你需要浏览到某个地方
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/GraphicsServices.framework
Run Code Online (Sandbox Code Playgroud)
找到它(为你的Xcode安装目录调整路径,以及SDK).
免责声明:我在越狱手机上测试了这个,但它肯定在一个正常的应用程序中,安装在/var/mobile/Applications/沙箱区域,我99%肯定我没有做任何取决于被越狱的事情.