繁体   English   中英

如何抓住iPhone上的电源按钮和主页按钮?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM