使应用程序在越狱设备上自行重启

每次用户访问主屏幕时,我的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后台执行和应用暂停。