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

时间:2012-04-19 15:06:01

标签: iphone ios5

今天我去面试,我现在遇到了三个问题。他们希望我提供一些解决方案或

思考。      1.当用户按下主页按钮时,应用程序不会返回主界面或延迟5秒钟返回

主界面。      2.当屏幕为黑色时,如何自动激活屏幕(如何捕捉电源按钮按下事件)。      3.在iPhone启动时如何直接启动我的应用程序

我的英语非常糟糕,我希望每个人都能理解我上面所说的话。非常感谢你

4 个答案:

答案 0 :(得分:4)

这些都不适用于iOS设备,除非它已越狱。

答案 1 :(得分:2)

Q1和Q2:不可能

问题3:离您最近的行为是 kiosk(商店演示)模式

在此处查看更多信息:

Lock-down iPhone/iPod/iPad so it can only run one app

这并不是你想要的 - 它限制了设备只使用某个应用程序 - 但据我所知,这是自动启动应用程序而不会使设备失效的唯一方法。

答案 2 :(得分:2)

我知道这个问题已经过时了,但是这里的每个问题都可以轻松解决至少适用于iOS 7+的问题,尽管如果不使用私有API就无法解决问题2。您可以使用公共API答案成功回答问题1和3(虽然他们肯定是hacky)!!

<强> 1。当用户按下主页按钮时,如何在返回主屏幕前延迟5秒?

Oscar Gomez的回答很明显。虽然您无法阻止UI返回主屏幕而不会阻止核心运行循环(这会让您从应用程序商店中被拒绝),但是如果需要可以使用一些后台处理技术来获得额外的5秒,而不是使用UI

<强> 2。你怎么看电源按钮?

这肯定是使用私有API,虽然你可以 PROBABLY 进入App Store,但是一旦Apple得到你这样做,你可能不会持续很长时间。这也是一个黑客。您无法直接收听电源按钮,但您可以立即收听或关闭屏幕。这是我在企业应用程序中的一个小代码片段:

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);
    ...
}

显然你必须让应用程序总是在后台运行(这可能会变得棘手),或者你只需​​要在你要求在后台运行的时间内这样做(这并不难)< / p>

第一步是收听打开/关闭屏幕的darwin通知。 第二步是实现回调。 第三步是停止收听回叫。 注意:DisplayOnOffObserver是一个随机数(在我的情况下不是很随机)

第3。如何在iPhone启动时直接启动您的应用程序?

假设通过直接启动,您的意思是在后台启动,实际上有一种Apple支持的方式。您首先必须为位置启用后台服务。其次,你必须开始听significant location changes。我不知道这是如何记录的,但是一旦iPhone启动,它就会尝试获取它的位置。当它这样做时,它从没有位置变为有位置(这是一个重大变化)。您的应用程序将在后台启动,其中包括调用应用程序:didFinishLaunchingWithOptions:方法,您可以请求更多时间并启动其他进程以在后台永久运行,直到用户手动终止您的应用程序。如果您使用此方法在后台永久运行,则您有可能被Apple拒绝。

希望这对任何人有帮助!如果有人需要更多信息,请发表评论,我会更新我的答案。

答案 3 :(得分:1)

当用户按下主页按钮时,应用程序不会返回主界面或延迟5秒钟返回

你不能,除非你不想在appstore中使用你的应用程序......你唯一能做的就是在你的应用程序终止之前要求更多的时间保存你的数据,但是你的UI体验将仍然是相同的 - iPhone将返回主界面。

当屏幕为黑色时,如何自动激活屏幕(如何捕捉电源按钮按下事件)。

不可能。

第3。 iPhone启动时如何直接启动我的应用

我认为你甚至不能使用私有API,当然也不会在appstore中接受你的app。