0

我使用此代码创建本地通知:

        UILocalNotification *notification=[[UILocalNotification alloc]init];
        notification.soundName = @"new_friend_request.mp3";
        notification.repeatInterval = 0;
        notification.alertAction = @"Go to";
        notification.userInfo = [NSDictionary dictionaryWithObject:@"actionNotification" forKey:@"actionNotification"];
        notification.alertBody = @"Body";
        [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
        [notification release];

但是按下主页按钮后,我在 iPhone 的主屏幕上看不到通知警报正文。

一开始我以为通知没有被调用,但后来我使用调试发现,通知被正确调用。

所以,我不知道,为什么它不起作用。

4

4 回答 4

3

presentLocalNotification在我看来,问题是当应用程序在后台时你是如何打电话的。我发现如果我使用NSTimerordispatch_after调用调用的方法,presentLocalNotification实际上不会在应用程序处于后台时触发,而是延迟到应用程序返回到前台之后。我想知道您认为正在执行的代码是否在您认为presentLocalNotification的实际运行时正在运行。

例如,在我的测试中,当我将NSTimer基于 - 的代码调用替换为以下使用 时scheduleLocalNotification,如果应用程序恰好在后台运行,我确实会收到您的通知。因此,将您的行替换presentLocalNotification为:

// put all of your code configuring the UILocalNotification here
// but omit the presentLocalNotification, replacing it with the following code

// just for a test, fire the notification in 5 seconds

notification.fireDate = [[NSDate date] dateByAddingTimeInterval:5.0];
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
于 2012-11-29T14:42:02.493 回答
1

这是正常行为,因为您在应用程序运行时直接触发通知,通知会发送到旅游应用程序委托。

通知中心不会处理通知,因为您的应用程序已经在运行。

于 2012-11-29T11:30:04.577 回答
1

您正在使用该presentLocalNotificationNow方法。这将在您的应用程序运行的当前时刻发布通知。如果应用程序正在运行,本地通知将不会收到警报或声音,因为它是由您的应用程序直接接收的。

如果您按主页按钮,那么您将不会收到任何警报或声音。

现在本地通知:

立即显示本地通知。

- (void)presentLocalNotificationNow:(UILocalNotification *)notification

参数

notification

A local notification that the operating system presents for the application immediately, regardless of the value of the notification’s fireDate property.

当有传入的聊天、消息或更新时,在后台运行的应用程序可以立即呈现本地通知。因为操作系统会复制通知,所以您可以在安排好通知后将其发布。

有关更多信息,请参阅UIApplication 类参考

于 2012-11-29T11:32:54.360 回答
0

问题是我的应用程序在 iphone 设置中关闭了本地通知。现在我仍然使用 presentLocalNotification 并且一切正常。

我的应用程序总是在后台运行,因为我的应用程序使用套接字。

但是无论如何,很抱歉浪费了试图帮助我的人们的时间,因为问题是由于我造成的。

于 2012-11-30T04:51:21.543 回答