Определение типа прерывания iPhone
Я могу обнаружить, что iPhone пошел спать и вернулся из сна, используя приложение WillResignActive и applicationDidBecomeActive. Но как мне узнать, что это было за прерывание? Я делаю приложение аудиоплеера, и мне нужно, чтобы звук воспроизводился, когда iPhone переходит в спящий режим (что я знаю, как делать). Но мне нужно прервать звук, когда происходит сообщение, тревога или прерывание заряда батареи. Также мне нужно возобновить звук после окончания мероприятия.
Итак, как мне различать эти разные прерывания.
2 ответа
Эта информация, вероятно, недоступна для вашего приложения, но вот несколько вещей, которые можно попробовать.
В
applicationWillResignActive:
проверьте NSNotification объект и свойства userInfo, чтобы увидеть, есть ли какие-либо подсказки там.Зарегистрируйтесь, чтобы получать все уведомления, размещенные в центре уведомлений по умолчанию:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil];
Ваш метод будет вызван, когда что-нибудь опубликовано. Зарегистрируйте объект уведомления и словарь userInfo, и, возможно, вы увидите, что будет опубликовано полезное уведомление. Если вы найдете один, вы можете зарегистрироваться только для этого.
- Это самый взломанный, но вы можете получить доступ к предупреждению, которое отображается, если это сообщение или предупреждение о батарее. Оповещения отображаются в окне UIWindow поверх основного окна вашего приложения. Вы можете зарегистрироваться для UIWindowDidBecomeVisibleNotification, а затем посмотреть на подвиды окна, чтобы увидеть, можете ли вы найти предупреждение или какую-либо другую полезную подсказку.
Все вышеперечисленные методы будут основываться на недокументированном поведении и могут отклонить вашу заявку в App Store. Ни один из них не связан с вызовами закрытых методов, хотя можно утверждать, что наблюдение за недокументированным именем уведомления считается частным API. В конце концов, мнение Apple - единственное, что будет иметь значение.
Лично я бы попробовал это сделать, убедившись, что код корректно завершится неудачей, если и когда система изменится.