在睡眠模式下与iPhone互动

3
我希望我的应用程序能够在用户按下睡眠按钮后继续运行并与用户交互。
到目前为止,我已经学到了,使用以下代码可以使我的应用程序保持活动状态:

NSTimer *timer = [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

这是成功的。方法
- (void)timerFireMethod:(NSTimer*)theTimer
即使处于睡眠模式,也会每0.5秒调用一次。

现在我的问题是:如何在睡眠模式下与我的应用程序进行交互? 我只需要一个触发器来开始播放自定义音频文件。因此,我需要一个触发事件,例如检测:
-显示器上的触摸
-加速度活动
-MotionShake事件

但是,在获取了applicationWillResignActive事件之后,以上所有内容都无法工作。我的加速计停止传递加速度事件。我无法再次启动它们。 MotionShake事件将不会被传递,而且我不知道在睡眠时是否可能捕获触摸事件。

更新
我希望用户使用我的应用程序,比如5个小时。如果它空闲了一段时间,它会自动进入睡眠状态。 我可能误解了我所说的睡眠模式的含义。iPhone应该一直开着,但我不需要显示器和背景灯一直亮着(这是最耗电的部分)。我知道,当每10秒播放一个无声音时,iPhone不会进入睡眠状态。我知道iPod应用程序能够在该模式下运行,并且用户可以通过摇动设备与其交互。因此,难道没有任何官方方法让应用程序做同样的事情吗?
---

有人有什么想法吗?

谢谢Zensursula

1个回答

3
一旦在您的应用程序上调用了applicationWillResignActive,您将停止接收事件:

委托可以实现此方法以在应用程序从活动状态转换为非活动状态时进行调整。当应用程序处于非活动状态时,它正在执行但不会分派传入事件。当弹出悬浮窗口或锁定设备时,就会发生这种情况。

睡眠模式的目的是节省能量。为达到此目的,设备停止监听您所请求的事件。
NSTimer事件仍然会触发,因为它们不需要昂贵(电池方面)的硬件监控。此外,闹钟是使用NSTimer实现的,因此即使在睡眠中也需要能够正常工作。否则,人们可能无法醒来并指责他们的iPhone。

感谢您对正在发生的事情进行解释。我更新了我的问题,以更详细地解释我想要的内容。也许有另一种解决方案可以解决我的问题。 - Zensursula

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