检测iPhone中断的类型

时间:2009-12-13 07:09:47

标签: iphone objective-c interrupt-handling

我可以通过使用applicationWillResignActive和applicationDidBecomeActive来检测到iPhone进入睡眠状态并从睡眠中恢复过来。但是我如何找出它是什么样的中断。我正在制作音频播放器应用程序,并且需要在iPhone进入睡眠状态时保持音频播放(我知道该怎么做)。但是当发生消息,警报或电池电量不足中断时,我需要中断音频。此外,我还需要在活动结束后恢复音频。

那么我如何区分这些不同的中断。

2 个答案:

答案 0 :(得分:5)

您的应用可能无法获得该信息,但这里有一些可以尝试的事情。

  1. applicationWillResignActive:中,检查NSNotification的对象和userInfo属性,看看是否有任何提示。

  2. 注册接收发布到默认通知中心的所有通知:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil];
    
  3. 发布任何内容时都会调用您的方法。记录通知对象和userInfo字典,您可能会看到发布的有用通知。如果找到一个,你可以注册。

    1. 这是最hacky,但如果是消息或电池警告,您可能能够访问显示的警报。警报通过应用程序的主UIWindow显示在UIWindow中。您可以注册UIWindowDidBecomeVisibleNotification,然后查看窗口的子视图,看看是否可以找到警报或其他一些有用的线索。
    2. 以上所有方法都依赖于未记录的行为,并且可能会从App Store中拒绝您的提交。它们都不涉及私有方法调用,但您可能会认为观察未记录的通知名称会被视为私有API。最终,Apple的意见是唯一重要的意见。

      就个人而言,我会尝试一下,如果系统发生变化,请确保代码正常失败。

答案 1 :(得分:0)

使用audio session