iOS主页按钮警告,是否可能?

5

我真的不认为这是可行的,但我的老板仍然希望我提供一个链接来说明。他想要的是在用户按下主页按钮时添加一个“你确定要退出吗?”的警告,如果用户选择“否”,应用程序将不会变为非活动状态。 这是不可能的,对吗?


感谢您的所有答案,我本来也没想到它可以完成。 - Samssonart
8个回答

16
不行,应用程序无法干涉此事。建议向上级领导询问是否曾见过任何可执行此操作的iOS应用程序示例,很遗憾没有,我敢打赌。
应用程序可以继续在后台执行一些功能,例如流媒体播放、获取位置信息等,但是没有应用程序能够阻止主页按钮。如果可以阻止主页按钮,那么就可以防止某个应用程序关闭。
A) 技术上你做不到,而且 B) 如果你想通过App Store发布,苹果也不会允许这样做
如果查看使用Xcode创建应用程序委托时创建的方法存根,则会发现...
-(void)applicationWillResignActive:(UIApplication *)application

-(void)applicationWillTerminate:(UIApplication *)application

这些评论充满了关于如何使用此方法暂停任务、禁用定时器、降低帧速率、保存数据的内容 - 没有任何关于能够延迟执行或询问用户是否确定的信息。

整个想法与iPhone/Pad/Pod-Touch的用户体验相反。

根据App Store指南(稍作缩写):

修改设备上开关行为的应用将被拒绝

这是一种旨在更改主页按钮行为的提议,因此将被拒绝。


我没有直接引用App Store的指南,因为它是受版权保护的文件,只有拥有开发者账户才能访问。但是,如果你被要求开发iOS应用程序,那么你必须获得相关权限。我建议你去看一看。 - iandotkelly

2
这在越狱设备上是可能的,使用未经批准的API。然而,这个概念违反了苹果的使用政策,所以你永远不会在官方应用商店上看到任何试图实现这个概念的应用程序。以下是其中一些原因:
  1. 您无法更改任何按钮的功能(包括音量按钮,一些相机应用程序曾经使用它们来拍照,但由于此原因被从商店中删除)。
  2. 您不能干涉设备的标准用户交互。主页按钮可以将人们带回主页,您不能阻止它,或者要求确认,因为那样会干涉交互。
  3. 没有公共API可以检测主页按钮的实际使用情况。因此,您需要一个私有API,而且您不能在没有苹果的明确许可的情况下使用私有API,由于上述原因,他们永远不会给您许可。
我相信还有很多原因,但无论如何,这将直接违反应用商店政策以及iOS人机界面指南。
您可以检测应用程序即将失去焦点、已经失去焦点或可能失去焦点的情况(例如电话呼入),但您不能更改流程(即不允许应用程序失去焦点)。
您可以在后台执行代码,但必须遵守后台运行的指南和限制。后台代码可以向用户提交通知,以便他们可以切换回应用程序......这大概是最接近的了,但如果每次应用程序关闭时都发生这种情况,预计苹果将拒绝您的申请。

2
许多其他人已经回答过了,但是不,你不能这样做。当用户按下主页按钮时,会调用应用程序委托的applicationWillResignActive方法,从而禁用应用程序的触摸事件。然后调用applicationDidEnterBackground方法,根据Apple文档

您的委托的applicationDidEnterBackground:方法大约有5秒钟的时间来完成任何任务并返回。在实践中,此方法应尽快返回。如果该方法在时间耗尽之前没有返回,则您的应用程序将被终止并从内存中清除。


1
我知道我回答这个问题已经太晚了。但是,我最近遇到了Samssonart提出的问题。@iandotkelly给出的答案在iOS5中已经过时。现在,不再使用任何委托方法来区分使用Home按钮锁定设备还是将应用程序发送到后台。您现在可以使用applicationState变量来定义触发的操作。applicationState是由appDelegate提供的内置id。

**

if it returns 2 then, it will identify the Home button is pressed
if it returns 1 then, it will identify the lock hardware button is pressed

**

因此,在您的情况下,您可以在**applicationDidEnterBackground**方法中检查此条件。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"decision >> %d",[[UIApplication sharedApplication] applicationState]);
}

享受编程!


1
我很想在这个问题上投反对票:它不是原始问题的答案。它应该是对iandotkelly答案的评论。 - vikingosegundo
是的,我知道这不是对原问题的回答。但我只想告诉大家,被接受的答案中的方法现在已经不再有用了。这是你可以在回到应用程序后检查而不是在关闭它时检查的事情。至于评论,我不知道如何像回答一样排列评论中的单词。这就是为什么我更喜欢给出答案并让每个人都知道这种方法。 - Niru Mukund Shah

1

你需要证据向老板表明显然不是iOS开发者。

Apple人机界面指南

这应该就是你需要的所有证据。但要明确的是,苹果不允许应用程序以任何方式覆盖主页按钮。你可以在注销前放置操作表或弹出窗口进行警告,但一旦按下主页按钮,你必须放弃内存,应用程序将被关闭。


1
你可能想了解一下 iOS 的商店演示模式。这种方式可以禁用主屏幕按钮并锁定设备在引导后启动的第一个应用程序中。

0

我知道这是一个老话题,但我只是想更新一下这个答案。在iOS 7中,这个方法不起作用了。 因此,当应用程序进入后台时,我使用屏幕亮度来区分Home和Lock按钮。

-(void)applicationDidEnterBackground:(UIApplication *)application { if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateInactive) { NSLog(@"按下睡眠按钮"); } else if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { if ([[UIScreen mainScreen] brightness] > 0.0) NSLog(@"按下Home键"); else NSLog(@"按下睡眠按钮"); } }

希望这对以后的任何人有所帮助。


0

我能找到的最好的参考资料是this one。虽然不是非常明确,但苹果公司的人机界面指南有几个标题:“始终准备停止”,接着是“不要通过编程退出”,这些都说明了主页按钮的作用以及你不应该实现自己的退出策略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接