3

我有一个应用程序,如果它有前台,它可能会从硬件附件接收定期更新。该硬件配件上有一个物理硬件按钮。用户认为这是“与设备的交互”(在这种情况下是 iPhone 或 iPad 触摸),我希望按下这些硬件按钮来重置 UIApplication 内的计数器或计时器机制,这样它就不会在用户时立即进入睡眠状态正在积极使用该应用程序。

我怎么做?目前我只能完全禁用定时器,然后从一些内部辅助定时器重新启用它。所有这些计时器到计时器的东西似乎都很愚蠢。

我正在寻找类似的方法 [UIApplication userDidSomethingSoPleaseDontGoToSleepYouSillyThing];

现在,如果我的应用程序禁用空闲计时器然后忘记重新启用它,用户的设备只会耗尽电池并关闭。这对于电池寿命测试很有用,但可能会让最终用户感到不安。我宁愿不碰这个 idleTimerDisabled 并简单地告诉应用程序保持清醒至少一段时间,然后如果用户再次按下按钮,告诉 UIApplication 再次重置其内部计时器。

4

2 回答 2

0

也许我不明白你...但是

/* Block idleTimer */
application.idleTimerDisabled = YES;

/* DO ALL YOUR STUFF */
/* AND IF SOMETHING APPEN */

/* Restore idleTimer */
application.idleTimerDisabled = NO;
于 2013-04-23T15:00:08.280 回答
0

也许尝试以下方法来重置空闲计时器:

[UIApplication sharedApplication].idleTimerDisabled = YES;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  [UIApplication sharedApplication].idleTimerDisabled = NO;
});

其中 0.5 为 0.5 秒。请注意,我自己没有尝试过这段代码。我不确定是否存在(m)gcd 块不会执行的任何条件。

于 2014-03-25T14:50:48.917 回答