通过使用applicationWillResignActive和applicationDidBecomeActive,我可以检测到iPhone进入睡眠状态并从睡眠中回来。但是,我怎么知道它是什么样的中断。我正在制作一个音频播放器应用程序,并且需要在iPhone进入睡眠状态时保持音频播放(我知道该怎么做)。但是当消息,闹钟或低电池电量中断发生时,我需要中断音频。当事件结束时,我还需要恢复音频。检测iPhone中断的类型
那么如何区分这些不同的中断。
通过使用applicationWillResignActive和applicationDidBecomeActive,我可以检测到iPhone进入睡眠状态并从睡眠中回来。但是,我怎么知道它是什么样的中断。我正在制作一个音频播放器应用程序,并且需要在iPhone进入睡眠状态时保持音频播放(我知道该怎么做)。但是当消息,闹钟或低电池电量中断发生时,我需要中断音频。当事件结束时,我还需要恢复音频。检测iPhone中断的类型
那么如何区分这些不同的中断。
该信息可能不适用于您的应用,但这里有一些要尝试的操作。
在applicationWillResignActive:
,检查NSNotification的对象和用户信息的属性,看看是否有任何提示存在。
注册,就能获得所有通知张贴到默认的通知中心:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil];
什么时候张贴你的方法将被调用。记录通知对象和userInfo字典,也许你会看到一个有用的通知张贴。如果你找到一个,你可以注册。
以上所有方法都将依赖未记录的行为来工作,并且可能会让您的提交在App Store中被拒绝。它们都不涉及私人方法调用,但您可能会认为观察未记录的通知名称将视为私有API。最后,苹果的意见是唯一重要的。
就我个人而言,我会尝试一下,确保代码在系统发生变化时优雅地失败。
尝试过A和B,但它全部空了。用户信息中没有描述或键值对。对象也没有。它奇怪苹果如何错过这样简单的功能。没有尝试C,因为它看起来太hacky,即使对我来说。 – Prashant 2009-12-15 06:12:32
你可能想重新考虑一下C:如果你只是假设在你的应用上显示的任何*警告都是暂停音乐的理由,那么你将不会做任何没有记录的事情。它只是围绕视图层次结构来读取将是hacky的警报文本。 – benzado 2009-12-15 06:21:42