他のアプリケーションが URL スキーマを介してアプリケーションから呼び出すことができることを知っています。ただし、すべてのアプリケーションがスキーマ URL に登録されているわけではありません。では、どうすればそのアプリケーションを起動できますか? 私はiphone jaibroken用に開発しています。
質問する
5212 次
4 に答える
6
バンドルIDを使用してアプリを起動する方法はいくつかあります。
SBApplication
SBApplication *app = [[objc_getClass("SBApplicationController") sharedInstance] applicationWithDisplayIdentifier:@"com.wrightscs.someapp"];
[[objc_getClass("SBUIController") sharedInstance] activateApplicationFromSwitcher: app];
SBApplicationController
SBUIController *uicontroller = (SBUIController *)[%c(SBUIController) sharedInstance];
SBApplicationController *appcontroller = (SBApplicationController *)[%c(SBApplicationController) sharedInstance];
if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)])
{
[uicontroller activateApplicationFromSwitcher:[[appcontroller applicationsWithBundleIdentifier:bundleID] objectAtIndex:0]];
}
else
{
// doesn't work outside of Springboard
[uicontroller activateApplicationAnimated:[[appcontroller applicationsWithBundleIdentifier:bundleID] objectAtIndex:0]];
}
4.xで使用した別の方法がありましたがSBUIController
、5.0で機能しなくなったため、投稿しません。
于 2012-07-27T18:47:03.890 に答える
2
私はこのように使用しました:
void* sbServices = dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices", RTLD_LAZY);
int (*SBSLaunchApplicationWithIdentifier)(CFStringRef identifier, Boolean suspended) = dlsym(sbServices, "SBSLaunchApplicationWithIdentifier");
int result = SBSLaunchApplicationWithIdentifier((CFStringRef)bundleId, false);
dlclose(sbServices);
また、アプリに権限を付与する必要があります。
<key>com.apple.springboard.launchapplications</key>
<true/>
iOS 6で実行できます。
于 2013-03-27T03:30:12.270 に答える
2
私が知っているように、プライベート API だけがこれを行うことができます。初め
@interface PrivateApi_LSApplicationWorkspace
- (bool)openApplicationWithBundleID:(id)arg1;
@end
それからそれを使用してください
PrivateApi_LSApplicationWorkspace* _workspace;
_workspace = [NSClassFromString(@"LSApplicationWorkspace") new];
[_workspace openApplicationWithBundleID:bundleIdentifier];
于 2015-11-16T02:48:08.073 に答える