【问题标题】:Interacting with IPhone while in sleep mode在睡眠模式下与 iPhone 交互
【发布时间】:2010-12-20 18:48:58
【问题描述】:

我希望我的应用继续运行并与用户交互,即使用户按下了睡眠按钮。
到目前为止,我了解到,我的应用可以通过以下代码保持活力:

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<br> 即使我处于睡眠模式,也会每 0.5 秒调用一次。

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

但是在得到applicationWillResignActive-Event 之后,上述方法都不起作用。我的加速度计停止传递加速度事件。而且我无法再次启动它们。 MotionShake Event 不会被传递,我不知道是否可以在睡眠时捕捉到触摸事件。

更新
我希望用户使用我的应用程序可以说 5 小时。如果它空闲了一段时间,它会自己去睡觉。 我可能误解了睡眠模式的含义。 Iphone 应该一直启动并运行,但我不需要一直打开显示屏和背景灯(这些是最耗电的部分)。我知道每 10 秒播放一次无噪音的声音时,iphone 不会进入睡眠状态。而且我知道 iPod 应用程序能够在该模式下运行,并且用户可以通过摇动设备与之交互。那么应用程序没有任何官方方法可以做到这一点吗?
---

有人知道吗?

感谢 Zensursula

【问题讨论】:

    标签: iphone objective-c sleep


    【解决方案1】:

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

    委托可以实现这个方法 进行调整时 从活动的应用程序转换 状态变为非活动状态。当一个 应用程序处于非活动状态,它是 执行但不分派 传入事件。当一个 覆盖窗口弹出或当 设备已锁定。

    睡眠模式的重点是节省能源。为此,设备会停止侦听您要求的事件。

    NSTimer 事件仍然会触发,因为它们不需要昂贵的(电池方面的)硬件监控。此外,警报是使用 NSTimer 实现的,因此即使在睡眠中也需要能够正常工作。否则,人们可能不会醒来并责怪他们的 iPhone。

    【讨论】:

    • 感谢您对正在发生的事情的解释。我更新了我的问题,以更详细地解释我想要什么。可能对我的问题有另一种解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多