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)初始化
(2)获取iphone上所有正在运行的app的bundle id列表
(3)得到iphone 前台运行的app的bundle id
(4)根据iphone app的bundle id得到其app名称
(5)根据iphone app 的bundle id得到其图标
(6)直接通过app 的bundle id来运行该app
在ios中,一个app调起另一个app的方式通常是用url scheme,但是用这个 私有app,可以在不需要url scheme的情况下运行任何app
本文介绍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); }
相关文章推荐
- IOS程序启动原理
- iOS软件人才稀缺,蜂窝教育iOS培训更专业
- iOS MapViewDemo地图小样例
- iPhone开发【二十三】常用IOS开源组件【第1篇】
- ios 使用第三方框架注意
- IOS 开发,定位相关
- iOS中block的用法 以及和函数用法的区别
- iOS-ViewController的生命周期
- ios开发系列之应用的后台处理
- iOS启动时如何添加引导页面 小demo
- iOS设计模式 - 中介者
- iOS 3d touch设计的秘密
- 1.5-nagios监控客户端-1
- 1.4-nagios安装
- 如何使用自己已经编译过的lamp安装cacti nagios zabbix
- ios 中的开源框架
- 蓝懿iOS 技术内容和心得 10。26
- 通知中心
- 我的iOS学习历程 - OC第一天
- 我的iOS学习历程 - OC第一天