通过使用 applicationWillResignActive 和 applicationDidBecomeActive,我可以检测到 iPhone 进入睡眠状态并从睡眠中恢复。但是我怎么知道它是什么类型的中断。我正在制作一个音频播放器应用程序,并且需要在 iPhone 进入睡眠状态时保持音频播放(我知道该怎么做)。但是当出现消息、警报或电池电量不足中断时,我需要中断音频。我还需要在活动结束后恢复音频。
那么如何区分这些不同的中断。
通过使用 applicationWillResignActive 和 applicationDidBecomeActive,我可以检测到 iPhone 进入睡眠状态并从睡眠中恢复。但是我怎么知道它是什么类型的中断。我正在制作一个音频播放器应用程序,并且需要在 iPhone 进入睡眠状态时保持音频播放(我知道该怎么做)。但是当出现消息、警报或电池电量不足中断时,我需要中断音频。我还需要在活动结束后恢复音频。
那么如何区分这些不同的中断。
您的应用可能无法获得该信息,但可以尝试以下方法。
在applicationWillResignActive:
中,检查 NSNotification 的 object 和 userInfo 属性,看看那里是否有任何提示。
注册以接收发布到默认通知中心的所有通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil];
发布任何内容时都会调用您的方法。记录通知对象和 userInfo 字典,也许您会看到发布的有用通知。如果你找到一个,你可以注册。
上述所有方法都依赖于未记录的行为来工作,并且可能会导致您的提交被 App Store 拒绝。它们都不涉及私有方法调用,尽管您可以争辩说观察未记录的通知名称算作私有 API。最后,苹果的意见是唯一重要的。
就个人而言,我会尝试一下,确保在系统发生变化时代码优雅地失败。
使用音频会话?