2

当 iPhone 应用程序在后台运行时,我正在使用ASIHTTPRequest下载多个文件。我想UILocalNotification在队列结束时展示一个。在应用程序恢复之前不会调用以下委托方法:

- (void)queueFinished:(ASINetworkQueue *)aQueue
{

    NSLog(@"Queue finished");

    if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) {
        UILocalNotification* localNotification = [[UILocalNotification alloc] init];
        localNotification.alertBody = NSLocalizedString(@"All downloads completed");        
        [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
        [localNotification release];
    }
}

那么,我怎样才能让这个通知出现呢?

4

4 回答 4

1

您的委托没有被调用的原因可能是因为您的应用程序在后台暂停。如果您正在执行某种在用户关闭应用程序后继续进行的冗长网络进程,您可以-[UIApplication beginBackgroundTaskWithExpirationHandler:]在启动网络任务时使用,以便您的应用程序继续在后台运行,直到您完成网络任务。但是,它仍然可以过期,因此不能保证您有足够的时间完成。

于 2011-05-06T16:28:36.590 回答
0

您是否将队列 maxConcurrentOperationCount 设置为 1?

方法 setShouldContinueWhenAppEntersBackground:YES 是根据每个请求设置的,并且由于队列中有一堆 ASIHTTPRequest,因此一次只能执行其中一个。这意味着当您暂停应用程序时,队列中的其他项目甚至还没有启动,因此操作系统还不知道要保持该网络请求处于活动状态。

我不确定解决方案,但我认为这就是您所看到的原因。

于 2012-01-04T18:46:13.473 回答
0

当程序处于后台 iOS 4 时,来自之前的 SO 问题通知

您确实意识到,当您的应用程序处于暂停状态时,您将不会收到任何通知——这在文档中是正确的。只有 3 类应用程序可以接收通知:音频应用程序(如 iPod 和类似物)、基于位置的应用程序和 voip 应用程序。如果您的应用程序是这些应用程序之一,则必须正确设置您的 plist。

于 2011-05-06T12:39:11.177 回答
0

用这个:

UILocalNotification *localNot = [[UILocalNotification alloc] init];
localNot.alertBody = @"Your Text";
localNot.alertAction = @"Name on the button";
localNot.fireDate = [NSDate date];
localNot.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] scheduleLocalNotification:localNot];

你在做什么:

  • 创建本地通知
  • 添加 LN 的正文
  • 添加出现在“警报”上的按钮的名称
  • 将 fireDate 设置为实际日期和时间(也许您需要将实际日期增加 1 或 2 秒 - 用于此用途dateByAddingTimeInterval::)
  • 设置声音名称(您也可以使用自定义声音...)
  • 计划/创建 LN
于 2011-05-06T16:17:12.720 回答