I\'m building a medical diagnostic app. Interruptions while a patient (or doctor) is in the midst of using it would disrupt the purpose of the app and waste a lot of time. <
I found a way to know if DND is on, but it may only be used in certain circumstance... The CallKit will return particular error code when DND is on, for example:
CXCallUpdate *update = [[CXCallUpdate alloc] init];
update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:handle];
[(CXProvider *)self.provider reportNewIncomingCallWithUUID:uuid
update:update
completion:^(NSError *error) {
if (error) {
NSLog(@"error when reporting imconing: %@", [error localizedDescription]);
//The operation couldn’t be completed. (com.apple.CallKit.error.incomingcall error 3.)
if ([error code] == CXErrorCodeIncomingCallErrorFilteredByDoNotDisturb) {
NSLog(@"Disturb mode is on");
}
}
}];
There's no public API about Do Not Disturb or even Airplane mode. Not even to know the status.
About Airplane mode, you could check the network status (using Reachability), but it wouldn't be 100% accurate.
Reachability is a code sample from Apple, but there are several libraries based on it on GitHub.