UIUserNotificationSettings警报导致应用程序重新启动活动

时间:2015-11-30 22:11:29

标签: ios objective-c notifications avaudioplayer appdelegate

我目前有一个需要本地通知的应用程序,所以当然我必须询问用户他或她是否愿意“允许通知”。我是这样做的:

AppDelegate.m

// Local Notifications
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]];
    }

在初次加载应用时,我开始播放AVAudioPlayer。我进行了设置,以便当用户离开应用程序(应用程序进入后台)时,音乐会淡出并暂停。

问题是在第一次启动应用时,当弹出通知要求用户允许通知时,该应用似乎是被欺骗认为它即将辞职活动。我似乎无法弄清楚如何避免 JUST 通知警报触发此事件,或者最坏的情况是“将应用程序恢复”,并在警报被其中一个解除时变为活动状态通知选项。

以下是我在ViewController中调用的内容,以便在应用更改状态时通知应用:

ViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];

    ...

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pauseAudio)
                                                 name:UIApplicationWillResignActiveNotification object:nil];
    ...
}

如果有人可以告诉我如何忽略通知提醒,以便它不会认为它将会退出活动,如何在“辞职”后恢复应用程序。我目前有这些其他通知句柄试图将其恢复,但在警告“混乱一切”之后不会调用它们:

ViewController内的同一viewDidLoad

...
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(animateLoginScreen)
                                                 name:UIApplicationWillEnterForegroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resumeAudio)
                                                 name:UIApplicationDidBecomeActiveNotification object:nil];

我很感激这方面的任何帮助。谢谢!

1 个答案:

答案 0 :(得分:5)

每当显示"系统对话框"(例如通知权限对话框)时,您的应用程序 重新启动,因为它是iOS,而不是您的应用程序,负责处理权限请求。

你的应用程序没有被愚弄,它确实在显示对话框的那段时间内处于活动状态。我怀疑你应该暂停你的应用程序进入后台的音频,而不仅仅是在它停止活动时。如果您获得了willResignActive,则应发布UIApplicationDidBecomeActiveNotification。你接到相应的AppDelegate方法的电话吗?