在我的 iPhone 应用程序内的“设置”应用程序中读取通知标志

Posted

技术标签:

【中文标题】在我的 iPhone 应用程序内的“设置”应用程序中读取通知标志【英文标题】:Reading Notification flag in "Settings" application inside my iPhone application 【发布时间】:2011-03-22 23:29:08 【问题描述】:

我正在为我的应用程序启用推送通知。当我的应用程序正在运行时,我们如何在“设置”应用程序中读取通知标志。由于某些原因,我需要知道特定通知(警报、声音、徽章)是否设置为 ON/OFF。

请指导。

【问题讨论】:

【参考方案1】:

尝试调用此方法[[UIApplication sharedApplication] enabledRemoteNotificationTypes]

它将返回一个 UIRemoteNotificationType,您可以使用它来确定可用的内容。

UIRemoteNotificationType status = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

现在,可以使用NSLog(@"status = ", status); 将状态视为一个 int,我们可以准确地确定它的状态。但要做到这一点,我们需要了解 UIRemoteNotificationType。

typedef enum 
   UIRemoteNotificationTypeNone    = 0,
   UIRemoteNotificationTypeBadge   = 1 << 0,
   UIRemoteNotificationTypeSound   = 1 << 1,
   UIRemoteNotificationTypeAlert   = 1 << 2,
   UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3
 UIRemoteNotificationType;

无需详细说明,您基本上需要摆脱这种了解的是......

如果徽章打开,请添加 1 如果声音打开,请添加 2 如果警报开启,请添加 4 如果报亭内容可用,请添加 8(我不会担心这个人)

假设您想知道徽章/声音/警报是否全部开启。 UIRemoteNotificationType(如果你正在玩,则为状态)应该是 7。

现在,让我们倒退。可以说status == 5。只有一种设置配置可以给我们这个值,那就是如果徽章和警报打开(徽章加 1,警报加 4,总数为 5)并且声音关闭。

如果status == 6 怎么办?同样,只有一种设置配置会返回此数字,即警报和声音都打开,而徽章关闭。

使用 IF 语句,我们可以做类似的事情

If (status == 5)

    NSLog(@"User has sound alerts disabled");
    [self fireThatSpecialMethod];

运行一组代码块,或在声音被禁用但其他一切都打开时触发特定方法。无论如何,希望这个回复对人们有所帮助!

【讨论】:

【参考方案2】:

请注意,从 iOS 8 开始,您正在寻找确定是否注册远程通知的方法如下:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications]

您可以使用以下方法确定用户当前启用了哪些种类通知

[[UIApplication sharedApplication] currentUserNotificationSettings]

这将返回一个 UIUserNotificationSettings 对象,其中包含您需要的所有信息。

文档链接:

isRegisteredForRemoteNotifications

currentUserNotificationSettings

UIUserNotificationSettings

【讨论】:

以上是关于在我的 iPhone 应用程序内的“设置”应用程序中读取通知标志的主要内容,如果未能解决你的问题,请参考以下文章

无法在我的 iPhone 应用程序中为横向设置 SplashScreen

iPhone 应用程序内的谷歌地图集成

同一页面内的 WKWebview 锚标签不起作用

UIPopoverController 内的移动框架

现在 iPhone 上的重置设置不会在 Xcode 中显示以运行应用程序

选择器作为弹出框内的输入视图