检测 iPhone 中断的类型
Posted
技术标签:
【中文标题】检测 iPhone 中断的类型【英文标题】:Detecting the type of iPhone interrupt 【发布时间】:2009-12-13 07:09:47 【问题描述】:我可以通过使用 applicationWillResignActive 和 applicationDidBecomeActive 检测到 iPhone 进入睡眠状态并从睡眠中恢复。但是我怎么知道它是什么类型的中断。我正在制作一个音频播放器应用程序,并且需要在 iPhone 进入睡眠状态时保持音频播放(我知道该怎么做)。但是当出现消息、警报或电池电量不足中断时,我需要中断音频。活动结束后我还需要恢复音频。
那么我该如何区分这些不同的中断。
【问题讨论】:
【参考方案1】:您的应用可能无法获得该信息,但可以尝试以下方法。
在applicationWillResignActive:
中,检查NSNotification的object和userInfo属性,看看是否有任何提示。
注册以接收发布到默认通知中心的所有通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil];
发布任何内容时都会调用您的方法。记录通知对象和 userInfo 字典,也许您会看到发布的有用通知。如果你找到了,你可以注册。
-
这是最骇人听闻的,但如果它是消息或电池警告,您可能能够访问显示的警报。警报显示在应用程序主 UIWindow 上方的 UIWindow 中。您可以注册 UIWindowDidBecomeVisibleNotification,然后查看窗口的子视图,看看是否可以找到警报或其他有用的线索。
上述所有方法都依赖于未记录的行为来工作,并且可能会导致您的提交被 App Store 拒绝。它们都不涉及私有方法调用,尽管您可以争辩说观察未记录的通知名称算作私有 API。最后,苹果的意见是唯一重要的。
就我个人而言,我会尝试一下,确保代码在系统发生变化时优雅地失败。
【讨论】:
试过 A 和 B,但结果都是空的。用户信息中没有描述或键值对。对象也没有。奇怪的是,苹果错过了这么简单的功能。没有尝试过 C,因为它似乎太 hacky,即使对我来说也是如此。 您可能需要重新考虑 C:如果您只是假设在您的应用上显示的 任何 警报是暂停音乐的理由,那么您将不会做任何未记录的事情。它只是在视图层次结构中四处寻找,以读取可能会很糟糕的警报文本。【参考方案2】:使用audio session?
【讨论】:
这绝对不是答案,也不应该作为答案发布。我认为,在 cmets 中提出澄清问题会更好。以上是关于检测 iPhone 中断的类型的主要内容,如果未能解决你的问题,请参考以下文章