Обнаружить монитор, когда системные сообщения и уведомления отображаются и отклоняются?
Иногда системное сообщение iOS будет отображаться и прерывать приложение. Например, системное сообщение о конфиденциальности может запрашивать доступ к фотоальбому или использовать микрофон, или системное сообщение может отображать уведомление, например о низком заряде батареи.
Какие методы можно использовать для iOS7/8/9 в Swift, которые обнаруживают и отслеживают, когда отображается системное сообщение или уведомление, а также когда оно отклоняется?
1 ответ
Таким образом, похоже, что этого можно достичь с помощью уведомлений о трамплине / уведомлений Дарвина. До сих пор я проверял это только на напоминаниях, и, похоже, он отлично работает.
- (void)viewDidLoad {
[super viewDidLoad];
//com.apple.springboard.showingAlertItem
// Do any additional setup after loading the view, typically from a nib.
[self registerforDeviceLockNotif];
}
//call back
static void displayStatusChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
NSString *lockState = (__bridge NSString*)name;
NSLog(@"Darwin notification NAME = %@",name);
if ([lockState isEqualToString:@"com.apple.springboard.showingAlertItem"]) {
NSLog(@"Notification was shown");
}
}
-(void)registerforDeviceLockNotif {
//Alert notification
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
NULL, // observer
displayStatusChanged, // callback
CFSTR("com.apple.springboard.showingAlertItem"), // event name
NULL, // object
CFNotificationSuspensionBehaviorDeliverImmediately);
}
Вот список всех уведомлений о трамплине, которые вы можете прослушать. Вполне возможно, что для достижения того, чего вы хотите, может потребоваться комбинация нескольких из них.
Полный список
Name Firmware
com.apple.springboard.bootedcleanly 2.0 –
com.apple.springboard.fullycharged 2.0 –
com.apple.springboard.pluggedin 2.0 –
com.apple.springboard.lockinterrupted 2.0 –
com.apple.springboard.callinterruptedapp 2.0 –
com.apple.airportsettingsvisible 3.0 –
com.apple.springboard.lockstate 2.0 –
com.apple.springboard.lockcomplete 2.0 –
com.apple.springboard.showingAlertItem 2.0 –
com.apple.springboard.lowPowerAlertPresented 2.0 –
com.apple.airport.userNotification 2.0 –
com.apple.mobile.SubstantialTransition 2.0 –
SignificantTimeChangeNotification 2.0 –
com.apple.powerlog.exit 3.0 –
com.apple.springboard.deviceWillShutDown 2.1 –
SBSpringBoardDidLaunchNotification 2.1 –
displayID-activated 2.2 –
displayID-suspended 2.0 –
com.apple.springboard.DeviceLockStatusChanged 2.0 –
SBDidTurnOnDisplayNotification 2.1 –
SBDidTurnOffDisplayNotification 2.1 –
com.apple.springboard.activeCallStateChanged 3.0 –
com.apple.springboard.attemptactivation 2.0 –
SBFormattedPhoneNumber 2.0 –
PSAirplaneModeChangedNotification 2.2 –
com.apple.alarm.alarmchanged 2.0 –
com.apple.alarm.alarmfired 2.0 –
com.apple.SpringBoard.ReadyForRestore 2.0 –
com.apple.springboard.syncingUnblocked 2.0 –
kGSCapabilityChangedNotification 2.0 –
com.apple.springboard.RentalsExpiredNotification 2.0 –
com.apple.remotenotification.notificationdelivered 3.0 –
SBRingerSilent 2.0 –
SBRinger1 2.0 –
com.apple.springboard.ringerstate 2.0 –
com.apple.springboard.doubleheightmode 3.0 –
com.apple.springboard.hasBlankedScreen 2.0 –
com.apple.springboard.unambiguousOrientation 2.0 –
com.apple.springboard.orientation 2.0 –
com.apple.springboard.rawOrientation 2.2 –
com.apple.springboard.curvedBatteryCapacity