打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

 本文介绍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);}

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
iOS提交应用至App Store流程
解决iOS8安装企业版无反应问题
The Complete Tutorial on iOS/iPhone Custom URL Schemes [iOS developer:tips];
WWDC2014之App Extensions学习笔记
iOS 8新特性之扩展(Extension)
NSBundle
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服