0

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

思维。1.当用户按下Home键时,应用程序不返回主界面或延迟5秒返回主界面

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

我的英文很差,希望大家能明白我上面说的。非常感谢

4

4 回答 4

4

除非越狱,否则这些在 iOS 设备上都是不可能的。

于 2012-04-19T15:07:59.853 回答
2

我知道这个问题很老了,但是这里的每个问题都有简单的解决方法,至少适用于 iOS 7+,尽管如果不使用私有 API 就无法解决问题 2。您可以使用公共 API 答案成功回答问题 1 和 3(尽管它们确实很老套)!!

1.当用户按下home键时,如何延迟5秒才返回主屏幕?

奥斯卡戈麦斯的回答很到位。虽然你不能在不阻塞核心运行循环的情况下延迟 UI 返回主屏幕(这会让你被应用商店拒绝),但如果需要,你可以使用一些后台进程技术来获得额外的 5 秒,而不是使用 UI .

2.如何捕捉电源按钮按下?

这肯定是使用私有 API,虽然您可能会进入 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);
    ...
}

显然,您必须让应用程序始终在后台运行(这可能会变得很棘手),或者您只需要在您要求在后台运行的时间内完成它(这并不难)

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

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

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

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

于 2014-09-12T02:21:36.403 回答
2

Q1 和 Q2:不可能

Q3:您可以获得的最接近所需行为的是信息亭(商店演示)操作模式。

在这里查看更多:

锁定 iPhone/iPod/iPad,使其只能运行一个应用程序

这并不完全是您正在寻找的 - 它限制设备只能使用某些应用程序 - 但据我所知,这是在不越狱设备的情况下自动启动应用程序的唯一方法。

于 2012-04-19T16:04:54.043 回答
1

当用户按下 Home 键时,应用程序不返回主界面或延迟 5 秒返回主界面

你不能,除非你不希望你的应用程序出现在应用程序商店中......你唯一可以做的就是在你的应用程序终止之前要求更多时间来保存你的数据,但 UI 体验仍然是一样的 - iphone将返回主界面。

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

不可能。

3. iPhone启动时如何直接启动我的应用程序

我认为你甚至不能使用私有 API 来做到这一点,当然还有你的应用在应用商店中不被接受。

于 2012-04-19T15:09:53.070 回答