12

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

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

更好(更文明):有什么方法可以让用户从应用程序中打开 DND模式(就像用户可以使用MPVolumeView在应用程序中标准化设备音量一样。)


我找到的最接近的答案指向此页面,使用特殊的“URL”打开飞行模式。但它只适用于 iOS 5。

4

2 回答 2

15

没有关于请勿打扰甚至飞行模式的公共 API。连状态都不知道。

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

Reachability 是来自 Apple 的代码示例,但在 GitHub 上有几个基于它的库。

于 2013-07-10T01:01:17.973 回答
9

我找到了一种知道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] == CXErrorCodeIncomingCallErrorFilteredByDoNotDisturb) {
                                              NSLog(@"Disturb mode is on");
                                          }
                                      }
                                  }];
于 2018-08-08T03:41:28.557 回答