如何在应用程序中检测DND模式?

时间:2013-07-10 00:57:54

标签: iphone ios cocoa-touch

我正在建立一个医疗诊断应用程序。当患者(或医生)正在使用它时中断会破坏应用程序的目的并浪费大量时间。

我想知道如何在应用程序中检测是否打开/关闭“请勿打扰”模式。 (了解飞机模式是否开启也很好。)这样我就可以提醒用户进入设置以打开它。

更好(更文明):有什么方法可以让用户从应用程序中的开启免打扰模式吗? (而非用户可以使用MPVolumeView在应用内规范化设备音量。)


使用特殊网址开启Air Plane模式时,最接近的answer I've yet found会指向this page。'但它在iOS 5中是only works

2 个答案:

答案 0 :(得分:15)

没有关于“请勿打扰”甚至“飞机”模式的公共API。甚至不知道状态。

关于Air Plane模式,您可以检查网络状态(使用可达性),但不会100%准确。

可达性是code sample from Apple,但在GitHub上有几个基于它的库。

答案 1 :(得分:5)

我找到了一种方法来知道DND是否打开,但是它只能在某些情况下使用... 启用DND时,CallKit将返回特定的错误代码,例如:

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] == 3) {
                                              NSLog(@"Disturb mode is on");
                                          }
                                      }
                                  }];