[英]how to catch the power button and home button on iPhone?
今天我去工作面试,现在遇到三个问题。他们希望我提供一些解决方案或
思维。 1.当用户按下主页按钮时,应用程序不返回主界面或延迟5秒返回
主界面。 2.当屏幕为黑色时,如何自动激活屏幕(如何捕捉电源按钮按下事件)。 3.iPhone启动时如何直接启动我的应用程序
我的英语很不好,我希望每个人都能听懂我上面说的话。非常感谢
除非已越狱,否则这些设备均无法在iOS设备上实现。
Q1和Q2:不可能
Q3:最接近您期望的行为的是信息亭(商店演示)操作模式 。
在这里查看更多:
锁定iPhone / iPod / iPad,使其只能运行一个应用程序
这并不完全是您要查找的内容-它限制了设备仅使用某些应用程序-但据我所知,这是无需启动设备即可自动启动应用程序的唯一方法。
我知道这个问题很旧,但是这里的每个问题都可以轻松解决,至少可以在iOS 7+上使用,尽管不使用私有API也无法解决问题2。 您可以使用公共API答案成功回答问题1和3(尽管它们确实很hacky)!!
1.当用户按下主屏幕按钮时,如何延迟5秒才能返回主屏幕?
奥斯卡·戈麦斯(Oscar Gomez)的回答很明确。 虽然您不能在不阻止核心运行循环的情况下延迟UI返回主屏幕(这将使您从应用商店中被拒绝),但是如果需要,您可以使用一些后台处理技术来获得额外的5秒时间,只是不使用UI 。
2.如何抓住电源按钮的按下?
这是肯定的使用私有API,虽然你也许可以得到进入App Store,你可能不会持续多久一旦苹果得到的,你这样做风。 这也是一个hack。 您不能直接收听电源按钮,但可以收听屏幕的开或关,或同时收听这两者。 这是我在企业应用程序中的一个小代码段:
在UIAppDelegate内部
static int const DisplayOnOffObserver = 54321876;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, &PLDisplayOnOff, CFSTR("com.apple.springboard.hasBlankedScreen"), NULL, 0);
...
return YES;
}
static void PLDisplayOnOff(CFNotificationCenterRef center, void* observer, CFStringRef name, const void* object, CFDictionaryRef userInfo) {
...
DO SOME MAGIC
...
}
- (void)applicationWillTerminate:(UIApplication *)application {
...
CFNotificationCenterRemoveEveryObserver(CFNotificationCenterGetDarwinNotifyCenter(), &DisplayOnOffObserver);
...
}
显然,您必须始终在后台运行该应用程序(这可能会很棘手),或者您只需要在要求在后台运行的时间内执行即可(这并不困难)
第一步是侦听darwin通知,以了解正在打开/关闭的屏幕。 第二步是实现回调。 第三步是停止监听回叫。 注意:DisplayOnOffObserver是一个随机数(在我的情况下不是非常随机)
3.当iPhone启动时,如何直接启动应用程序?
假设直接启动是指在后台启动,那么实际上有Apple支持的方法。 您首先必须启用后台服务进行定位。 其次,您必须开始侦听位置的重大变化 。 我不知道这有多好记录,但是一旦iPhone启动,它就会尝试获取它的位置。 这样做时,它会从没有位置变成拥有一个位置(这是一个重大变化)。 您的应用程序将在后台启动,其中包括调用application:didFinishLaunchingWithOptions:方法,您可以在其中请求更多时间并启动其他进程以在后台永久运行,直到用户手动杀死您的应用程序为止。 如果确实使用此方法在后台永久运行,则确实有可能被Apple拒绝。
希望这对任何人都有帮助! 如果有人需要更多信息,请发表评论,我将更新我的答案。
当用户按下主屏幕按钮时,应用程序不返回主界面或延迟5秒钟返回
除非您不希望自己的应用程序出现在应用商店中,否则您将无法进行操作...唯一可以做的就是在终止应用程序之前要求更多的时间来保存数据,但是UI体验仍然是相同的- iPhone将返回主界面。
当屏幕为黑色时,如何自动激活屏幕(如何捕捉电源按钮按下事件)。
不可能。
3. iPhone启动时如何直接启动我的应用程序
我认为您甚至不能使用私有API来做到这一点,当然,您的应用也不会在应用商店中接受。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.