2012-09-19 48 views
3

这是一个难题。我每天切换飞行模式十几次,并希望以一种快捷的方式来做到这一点。我是一个非常罕见的用户,他会为专用于飞行模式的实体按钮而杀人。我想尝试使用向下音量按钮进行操作。这不会在应用程序商店,我很高兴(实际上,我认为这是必要的),以使用一些私人图书馆。事实上,这可能会证明我需要越狱手机。我在这个阶段寻找一般的架构建议,而不是特定的代码(尽管这从来不会伤害)。使用音量按钮切换iPhone上的飞行模式

所以,问题是:什么是用于处理这个问题的最佳架构?我以这种方式分解问题:

1)如何让应用程序在后台运行,以便它可以监听和响应音量按钮按下(也可能是来自遥控设备的低音量事件)。我有三个选择在这里: --create一个VOIP应用 --create导航应用 --create一个音频应用 的音频应用程序似乎最合理的方式。我将不得不连续播放一段沉默的曲目,让我的应用程序在后台保持活跃状态​​?如果我从另一个应用播放音频曲目,似乎我的应用会出现问题。

2)如何拦截降低音量事件。对此问题的一个答案: program access to iPhone volume buttons

3)如何检查飞机状态并进行更改。一个老的回答这个问题,一些马赫代码和动态链接我不明白: http://blogs.oreilly.com/iphone/2009/01/bring-airplane-mode-control-ba.html

理解的私人图书馆的最佳资源似乎是在这里: http://theiphonewiki.com/wiki/index.php?title=/System/Library/Frameworks

更好的私人图书馆的任何建议“docs”或Zdziarski的“iPhone开放应用程序开发”一书的更新将受到欢迎。

感谢想这个跟我来!

+0

这是[如何切换飞行模式](http://stackoverflow.com/a/13464144/119114) – Nate

回答

2

我认为,最好把它分解到多个不同的问题,因为所有的人都无关。

1)在backgrounding。我建议使用LocationManager并定期打开和关闭它。这会重置定时器,它将计算您可以保留在背景中的时间。

这里有一些有用的链接:

iPhone - Backgrounding to poll for events

setKeepAliveTimeout and BackgroundTasks

http://www.slideshare.net/tranq72/ios4-multitasking-development-notes

2)不知道。

3)由于SBSetAirplaneModeEnabled api被删除,该方法不再有效。

不过,我可以解释在提供的链接代码是如何工作的:

#define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices" 

这些都只是定义了不同的动态加载的库的哪个存储位置。

void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY); 

这将加载的动态载入库

int (*setAPMode)(mach_port_t* port, BOOL yorn) = 
     dlsym(sbserv, "SBSetAirplaneModeEnabled"); 

此代码做了两两件事。 dlsym在此动态加载的库中查找SBSetAirplaneModeEnabled函数和地址。并将其存储在setAPMode变量中。

setAPMode(p, yorn); 

这只是调用这个函数。

dlclose(sbserv); 

这将关闭句柄(我们不再需要它)。

作为许多私有API调用的一部分,您将看到很多mach_port_t。一般this mach port is part of inter process communication system

这里是非常简短的解释。为了与其他应用程序通信,您需要向其发送消息,并且mach_port_t是您通过其发送这些消息的句柄。例如,setAPMode在内部发送消息给SpringBoard应用程序,该应用程序打开/关闭飞行模式。这就是为什么我们必须将它传递给这些功能的原因。

有不同的方式来获得其他应用程序的端口。然而,对于私有API最常见的方法是调用另一个将端口返回给您的私有API。

有一个API,SBSSpringBoardServerPort,它返回Springboard服务器端口,并将其传递给其他Sprinboard客户端API。

+0

是的,我真的应该把它分成3个问题。非常有用的链接。谢谢!关于如何加快编程私有API以及处理Mach端口的任何建议? –

+0

2Russ:给我发电子邮件(你可以在我的个人资料中找到我的电子邮件地址)。我会向您发送有关私有API的信息。 –