ユーザーにホームボタンを押し続ける代わりに、プログラムでSiriをアプリケーション内で起動したいと思います。これを実現するために利用できるパブリックAPIがないため、誰かがいるかどうか知りたいです。プログラムでプライベートAPIを介してSiriを起動できましたか?もしそうなら、どのプライベートAPIを使用しましたか?
Siriからの戻り値には興味がありません。私がしたいのはそれを起動することです。
答えは、これがApp Storeにアクセスしないアプリ(エンタープライズアプリ、または個人/ホビーアプリ)用か、実際に実行されるかどうかによって少し異なりますjailbroken電話。
ジェイルブレイクされた電話やMobileSubstrateのようなジェイルブレイクユーティリティに頼ることができるなら、Siriと同じように Ryan PetrichのlibActivatorが行う 私 この他の答えに表示 。
ただし、通常のjailed電話用に構築している場合でも、ユーザーがSiriを開く方法をシミュレートすることで、(プライベートAPIを使用して)「ハッキング」できると思います。まず、ホームボタンを押し、少し押し続けてから放します。
このコードは私のために働きます(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 。明らかに、これら2つのヘッダーをダウンロードして、プロジェクトに追加する必要があります。
このコードはGraphicsServicesプライベートフレームワークに含まれているため、そのフレームワークをプロジェクトに追加する必要もあります。通常のフレームワークを追加するのと同じように行いますが、次のような場所を参照する必要があります
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/GraphicsServices.framework
それを見つけるために(XcodeインストールディレクトリとSDKに合わせて調整されたパス)。
免責事項:ジェイルブレイクされた電話でこれをテストしましたが、それは間違いなく通常のアプリ内にあり、/var/mobile/Applications/
サンドボックス領域にインストールされていました。99%は、依存することは何もしていないと確信しています。ジェイルブレイクされたとき。
いいえ。 Siriにアクセスできません。アクセスできれば、どういうわけかAppleはあなたのアプリを拒否するでしょう。(しかし、感謝する人はもっとたくさんいると思います)
ただし、これがあります: http://ps3trophies.com/forums/Apple/6458-siri-cracked-now-even-Android-users-can-use-siri.html
この回答も参照してください: https://stackoverflow.com/a/12607905/2535467