Обнаружить монитор, когда системные сообщения и уведомления отображаются и отклоняются?

Иногда системное сообщение 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

Другие вопросы по тегам