您的位置:首页 > 移动开发 > IOS开发

iphone SprintBoard部分私有API总结(不支持iOS8)

2015-10-27 00:29 549 查看
转载自: http://www.cnblogs.com/gugupluto/p/3206772.html
本文介绍iOS SrpintBoard框架的部分私有API,具体包括:

获取ios上当前正在运行的所有App的bundle id(不管当前程序是在前台还是后台都可以)
获取ios上当前前台运行的App的bundle id(不管当前程序是在前台还是后台都可以)
根据ios app的bundle id得到其App名称、图标(不管当前程序是在前台还是后台都可以)
直接通过App 的bundle id来运行该App,无需使用url scheme(仅限当前程序在前台时,假如程序在后台能随便运行其他App,那就无敌了@_@)

(1)初始化

void * uikit = dlopen("/System/Library/Framework/UIKit.framework/UIKit", RTLD_LAZY);
int (*SBSSpringBoardServerPort)() =
dlsym(uikit, "SBSSpringBoardServerPort");
p = (mach_port_t *)SBSSpringBoardServerPort();
dlclose(uikit);
sbserv = dlopen(SBSERVPATH, RTLD_LAZY);


(2)获取iphone上所有正在运行的app的bundle id列表

NSArray* (*SBSCopyApplicationDisplayIdentifiers)(mach_port_t* port, BOOL runningApps,BOOL debuggablet) =

dlsym(sbserv, "SBSCopyApplicationDisplayIdentifiers");

NSArray *currentRunningAppBundleIdArray= SBSCopyApplicationDisplayIdentifiers(p,NO,YES);


(3)得到iphone 前台运行的app的bundle id

void* (*SBFrontmostApplicationDisplayIdentifier)(mach_port_t* port,char * result) = dlsym(sbserv, "SBFrontmostApplicationDisplayIdentifier");
char topapp[256];
SBFrontmostApplicationDisplayIdentifier(p,topapp);
currentTopAppBundleId=[NSStringstringWithFormat:@"%s",topapp];


(4)根据iphone app的bundle id得到其app名称

NSString * (*SBSCopyLocalizedApplicationNameForDisplayIdentifier)(NSString* ) =   dlsym(sbserv, "SBSCopyLocalizedApplicationNameForDisplayIdentifier");

NSString *strAppName = SBSCopyLocalizedApplicationNameForDisplayIdentifier(strBundleId);


(5)根据iphone app 的bundle id得到其图标

NSData* (*SBSCopyIconImagePNGDataForDisplayIdentifier)(NSString * bundleid) =
dlsym(sbserv, "SBSCopyIconImagePNGDataForDisplayIdentifier");
UIImage *icon = nil;
NSData *iconData = SBSCopyIconImagePNGDataForDisplayIdentifier(bundleid);
if (iconData != nil) {
icon = [UIImage imageWithData:iconData];
}
return icon;


(6)直接通过app 的bundle id来运行该app

在ios中,一个app调起另一个app的方式通常是用url scheme,但是用这个 私有app,可以在不需要url scheme的情况下运行任何app

-(void)openAppByBundleId:(NSString*)bundleId
{
void* sbServices = dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices", RTLD_LAZY);
int (*SBSLaunchApplicationWithIdentifier)(CFStringRef identifier, Boolean suspended) = dlsym(sbServices, "SBSLaunchApplicationWithIdentifier");
const char *strBundleId = [bundleId cStringUsingEncoding:NSUTF8StringEncoding];
int result = SBSLaunchApplicationWithIdentifier((__bridge CFStringRef)bundleId, NO);
dlclose(sbServices);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: