使应用程序在越狱设备上自行重启
每次用户访问主屏幕时,我的iOS应用程序是否可以自动重启? 这是一个越狱设备 – 该应用程序不是为了应用程序商店。
一般来说,如何让我的应用程序重新启动特定用户的行动之外的应用程序?
加速度计
如果你只想让你的应用程序在遇到某些加速度计条件时运行,那么你可以使用Activator
。 激活者是一个伟大的应用程序,由赖安佩特里奇 ,可在Cydia免费。 它使您可以configuration设备,以便在执行特定用户操作时运行任何应用程序(或切换)。 这可能是主页button按下,电源/lockingbutton按下,或加速计震动。
如果一个基本的动摇不是你想要的,或者你正在构build一个应用程序给许多用户,并且不希望他们自己设置Activator,那么你可能需要自己编写一些代码。
例如, 除了主UI应用程序之外 ,还可以编写启动守护 程序,并使启动守护进程监视加速计。
当您检测到您感兴趣的特定types的动作时,可以使用open
命令启动您的UI应用程序 。 如果这只是你自己的使用,只需从Cydia下载open
包。 如果这是要发布给其他人,请确保您的应用程序依赖于open
以确保它已安装。 例如,如果打包在Debian .deb软件包中,DEBIAN /控制文件可能有这样的:
Depends: open
以确保安装您的应用程序的用户也将自动open
,您的应用程序需要。
开锁
您的其他问题涉及在用户解锁手机时启动应用程序。 再次,我会使用您的启动守护进程来监听这个情况。 在iOS 5上,当我解锁手机时,看到这个通知:
截获的通知:com.apple.springboard.lockstate
(我通过从命令行运行notificationWatcher
实用程序来检测到这一情况,同时通过SSHlogin到了我的手机中。NotificationWatcher也可以从Cydia获得,作为Erica Sadun的Erica Utilities软件包的一部分)
所以,我会让你的启动守护进程注册达尔文通知 "com.apple.springboard.lockstate"
。 像这样的东西:
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center self, // observer: can be NULL if callback doesn't need self onLockStateChanged, // callback CFSTR("com.apple.springboard.lockstate"), // name NULL, // object CFNotificationSuspensionBehaviorDeliverImmediately);
callback函数在这里:
static void onLockStateChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { // if you need access to member data (ivars): MyLaunchDaemon* this = (MyLaunchDaemon*)observer; //if (userInfo != nil) { // CFShow(userInfo); //} NSDictionary* info = (NSDictionary*)userInfo; // I'm not sure if the userInfo object has any useful // description for the lock state event if (/* unlocked */) { // force app to open, or resume from the background system("/usr/bin/open com.mycompany.MyAppName"); } }
当屏幕locking或解锁时,我会看到相同的通知,所以您可能需要启动守护程序跟踪locking/解锁状态,或者检查userInfo
对象以查看是否告诉您这是locking还是解锁事件。 我确定还有其他的方法。
更新:如果你需要帮助整理屏幕locking或解锁时是否发生通知,你可以看到我的更新2 在这个其他的答案 。 可以使用notify_get_state()
来确定事件是打开还是closures事件。
在应用程序的Info.plist文件中将UIApplicationExitsOnSuspend
的值设置为YES。
UIApplicationExitsOnSuspend(布尔 – iOS)指定应该终止应用程序,而不是在退出时移动到后台。 与iOS SDK 4.0或更高版本链接的应用可以包含此密钥,并将其值设置为YES,以防止自动join后台执行和应用暂停。