iphone中的SBSSpringBoardServerPort()函数

有时候,我们的程序需要向springboard发送消息,这个可以用SpringBoardServices.framework库(这个是私有的库,有关这个库的介绍参见http://iphonedevwiki.net/index.php/SpringBoardServices.framework),网上的一般的方法是

 

 

#import <UIKit/UIKit.h>
#import <UIKit/UIApplication.h>
#include <dlfcn.h>
#include <stdio.h>

// Framework Paths
#define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"
#define UIKITPATH "/System/Library/Framework/UIKit.framework/UIKit"

int main(int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

//
// For testing try issuing the following:
// ap y; sleep 5; ./ap n
//

if (argc < 2)
{
printf("Usage: %s (y | n)/n", argv[0]);
exit(-1);
}

// Argument used to switch airplane mode off or on
BOOL yorn = [[[NSString stringWithCString:argv[1]]
uppercaseString] hasPrefix:@"Y"];

// Fetch the SpringBoard server port
mach_port_t *p;
void *uikit = dlopen(UIKITPATH, RTLD_LAZY);
int (*SBSSpringBoardServerPort)() =
dlsym(uikit, "SBSSpringBoardServerPort");
p = SBSSpringBoardServerPort();
dlclose(uikit);

// Link to SBSetAirplaneModeEnabled
void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY);
int (*setAPMode)(mach_port_t* port, BOOL yorn) =
dlsym(sbserv, "SBSetAirplaneModeEnabled");
setAPMode(p, yorn);
dlclose(sbserv);

[pool release];
}

 

以上是通过动态加载的方式

 

其实也可以用另外一种方式

做法如下

1。用class-dump导出SpringBoardServices.framework库的头文件(比如导出3.0sdk的,class-dump -H /Developer/xcode_3_2_3/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices -o ~/Desktop/springboard,对于此命令我就不解释了,各位看客可以自己google),在SpringBoardServices.framework下新建一个Headers目录,将刚导出的头文件放到Header目录下

进入你的程序,将SpringBoardServices.framework增加进来,

在你程序的最上方加上

extern "C" int SBSSpringBoardServerPort();

你就可以使用SBSSpringBoardServerPort();这个函数了,此函数很有用,当你想在你的程序中向springboard发送消息时,消息都需要一个参数mach_port_t变量,这个mach_port_t变量就是SBSSpringBoardServerPort();的返回值,至于能够发送那些消息给springboard,可以参见http://iphonedevwiki.net/index.php/SpringBoard.app/MIG_subsystem

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值