当App处于后台模式时,UILocalNotification可以触发自定义方法吗?

时间:2011-10-26 13:12:31

标签: iphone objective-c notifications

标题是自我解释的。我想创建一个App,可以在App处于后台模式时管理已编程的本地通知。通知工作顺利,但我想在触发警报时触发自定义方法。

有可能吗? 谢谢。

3 个答案:

答案 0 :(得分:6)

是的,可以做到。你可以这样做:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [NSTimer scheduledTimerWithTimeInterval:17.0 target:self selector:@selector(makeNotificationRequest:) userInfo:nil repeats:YES];
}

-(void)makeNotificationRequest:(NSTimer *)timer
{
    CLLocation *location = [[AppHelper appDelegate] mLatestLocation];
    NSMutableDictionary *paramDic = [[NSMutableDictionary alloc] init];

#ifdef _DEBUG
    [paramDic setValue:[NSString stringWithFormat:@"77.586"] forKey:@"Lat"];
    [paramDic setValue:[NSString stringWithFormat:@"12.994"] forKey:@"long"];
#else
    [paramDic setValue:[NSString stringWithFormat:@"%f",location.coordinate.latitude] forKey:@"Lat"];
    [paramDic setValue:[NSString stringWithFormat:@"%f",location.coordinate.longitude] forKey:@"long"];
#endif

    WNetwork *mNetwork = [[WNetwork alloc] init];
    [mNetwork makeRequsetWithURL:URL_Showbeeps type:JBJsonParser paramDictionary:paramDic delegate:self];
    [mNetwork autorelease];
    NSLog(@"URL HIT%@",paramDic);
    [paramDic autorelease];
}

要根据提醒自定义您的操作,您可以使用此功能:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateActive) {
        ;
    }
}

答案 1 :(得分:1)

如果应用程序位于前台,那么您需要- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification UIApplicationDelegate方法,但文档建议在应用程序处于后台时不会调用此方法。

您可以通过调用scheduledLocalNotifications实例上的UIApplication来获取本地通知列表 - 然后您可以轮询这些通知的时间,并安排在后台模式下调用此功能的功能。虽然本地通知会触发,但这并不一定与100%匹配,但我认为它与App Store指南一样接近。

通过调用presentLocalNotificationNow:方法,您还可以在后台模式下显示自己的本地通知:

https://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/presentLocalNotificationNow

因此,您可以通过仅显示自己的通知而不是为操作系统安排它们来解决此问题。

如果您尝试从其他应用程序访问本地通知,那么我认为不允许这样做。

答案 2 :(得分:1)

否..在应用程序在后台运行时未定义自定义方法。一旦通知被触发,我们可以;也可以更改警报消息。但是当我们显示警报消息然后通过单击警报的“是”按钮带您进入名为app的一个方法是在AppDelegate.m文件中的背景中运行时很好