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

时间:2011-08-18 19:04:33

标签: iphone ios ipad

我真的不认为这可以做到,但我的老板还是希望我提供一个链接。他想要的是添加'你确定要退出吗?'当用户按下主页按钮时发出警告,如果用户说“不”,则该应用程序不会变为非活动状态。 它无法完成,可以吗?

8 个答案:

答案 0 :(得分:16)

不,你不能这样做 - 应用程序在这方面没有发言权。问问你的老板他是否见过一个可以做到这一点的iOS应用程序的例子。没有...我打赌不会。

应用程序可以继续在后台执行某些功能 - 例如流媒体音乐,获取位置信息,但没有应用程序可以阻止主页按钮。如果你能做到这一点,你就可以阻止一个应用程序关闭。

A)你在技术上无法做到这一点

B)Apple不会允许它在App Store上发布,如果那是你正在分发的路线

如果您在创建应用程序委托时查看由XCode创建的方法存根

-(void)applicationWillResignActive:(UIApplication *)application

-(void)applicationWillTerminate:(UIApplication *)application

有关如何使用此方法暂停任务,禁用计时器,降低帧速率,保存数据的评论 - 还有关于能够延迟,查询用户一个“你确定”的消息。

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

从App Store指南(略有缩写):

  

改变设备上交换机行为的应用程序将是   拒绝

这是建议更改主页按钮的行为 - 因此会被拒绝。

答案 1 :(得分:2)

这可以在使用未经批准的API的监狱破坏设备上实现。这个概念是多次违反苹果的使用政策,但是你永远不会得到一个试图在官方应用程序商店以任何方式实现这一点的应用程序。这只是几个原因:

  1. 您不能改变任何按钮的功能(包括音量按钮,用于拍摄照片的一些相机应用程序,但结果是它们从商店启动)。
  2. 您不能干扰标准用户与设备的互动。主页按钮将人们送回家,您无法阻止,或要求确认,因为这会干扰互动。
  3. 没有公共API来检测主页按钮的实际使用情况。因此,您需要一个私有API,如果没有Apple的明确许可,您就无法使用私有API,由于上面的#1和#2,它们永远不会提供。
  4. 我确信还有很多原因,但不管它是否会直接违反应用商店政策以及iOS人机界面指南。

    您可以检测到应用即将失去焦点,失去焦点或可能失去焦点(例如来电话),但您无法改变流量(即不允许应用失去焦点)

    您可以在后台准则和限制中继续在后台执行代码。后台代码可以向用户提交一个通知,允许他们切换回应用程序...尽可能接近,并且如果每次应用程序关闭时苹果都会拒绝你...... / p>

答案 2 :(得分:2)

已经有很多人回答,但不,你不能这样做。当用户按下主页按钮时,将调用应用程序委托的applicationWillResignActive,这会禁用应用程序的触摸事件。然后调用applicationDidEnterBackground,根据Apple docs

  

您的委托的applicationDidEnterBackground:方法有   大约5秒钟完成任务并返回。在实践中,   这种方法应该尽快返回。如果方法有   在时间用完之前没有返回,你的应用程序被杀死并被清除   从记忆中

答案 3 :(得分:1)

你需要证明你的老板显然不是iOS开发人员。

Apple Human Interface Guide

这应该是你需要的所有证据。但要明确的是,Apple不允许应用程序以任何方式覆盖主页按钮。在退出之前你肯定会把动作表或弹出窗口警告,但是一旦按下主页按钮,你就会注意放弃你的记忆,你正在关闭。

答案 4 :(得分:1)

您可能需要查看IOS的商店演示模式。通过这种方式,您可以取消主页按钮并将设备锁定在启动后启动的第一个应用程序中。

答案 5 :(得分:1)

我知道我来不及回答这个问题。

但我最近遇到了Samssonart的问题。

@iandotkelly给出的答案已被iOS5弃用。现在,没有任何委托方法可用于区分锁定设备或使用“主页”按钮将应用程序发送到后台。

现在可以使用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]);
}

享受编程!

答案 6 :(得分:0)

我能找到的最佳参考是this one。它并不是很明确,但Apple的人机界面指南有几个标题'总是准备停止',接着是'不要以编程方式',它说明了主页按钮的功能,你不应该实现你的自己的戒烟策略。

答案 7 :(得分:0)

我知道这是一个老话题,但我只是想更新这个答案。在iOS 7中,这不起作用。 因此,当应用程序转到后台以识别Home和Lock按钮之间的差异时,我会使用screenbrightness。

-(void)applicationDidEnterBackground:(UIApplication *)application { if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateInactive) { NSLog(@"Sleep button pressed"); } else if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { if ([[UIScreen mainScreen] brightness] > 0.0) NSLog(@"Home button pressed"); else NSLog(@"Sleep button pressed"); } }

我希望将来对任何人都有任何帮助