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

时间:2011-03-22 23:29:09

标签: iphone cocoa-touch ios4 push-notification

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

请指导。

2 个答案:

答案 0 :(得分:11)

尝试唤起此方法[[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];
}

运行设置的代码块,或者在禁用声音时触发特定方法,但其他所有内容都已启用。无论如何,希望这种回应对人们有所帮助!

答案 1 :(得分:0)

请注意,从 iOS 8 开始,您要查找的方法是确定是否已注册远程通知:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications]

您可以使用以下方法确定用户当前启用的通知的

[[UIApplication sharedApplication] currentUserNotificationSettings]

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

文档链接:

isRegisteredForRemoteNotifications

currentUserNotificationSettings

UIUserNotificationSettings