Iphone 当应用程序处于后台模式时,UILocalNotification能否触发自定义方法?

Iphone 当应用程序处于后台模式时,UILocalNotification能否触发自定义方法?,iphone,objective-c,notifications,Iphone,Objective C,Notifications,标题是自我解释的。我想创建一个应用程序,当应用程序处于后台模式时,它可以管理编程的本地通知。通知工作顺利,但我想在触发警报时触发一个自定义方法 可能吗? 谢谢。如果应用程序位于前台,那么您需要-(void)应用程序:(UIApplication*)应用程序收到本地通知:(UILocalNotification*)通知uiapplicationelegate的方法,然而,文档表明,当应用程序处于后台时,不会调用此函数 通过在ui应用程序实例上调用scheduledLocalNotification

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

可能吗?
谢谢。

如果应用程序位于前台,那么您需要
-(void)应用程序:(UIApplication*)应用程序收到本地通知:(UILocalNotification*)通知
uiapplicationelegate
的方法,然而,文档表明,当应用程序处于后台时,不会调用此函数

通过在
ui应用程序
实例上调用
scheduledLocalNotifications
,您可以获取本地通知的列表-然后可以轮询这些通知的时间,并在后台模式下安排在该时间调用的函数。不过,当本地通知触发时,这不一定100%匹配,但我认为这与应用商店指南所允许的最接近

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

:

因此,您可以通过只显示自己的通知,而不安排操作系统发送通知来解决这个问题


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

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

- (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) {
        ;
    }
}

否..应用程序在后台运行时未定义自定义方法..一旦触发通知,我们可以;t不要同时更改警报消息。但是,当我们显示警报消息时,通过单击警报的“是”按钮,您将看到一个名为app的方法正在后台运行,它位于AppDelegate.m文件中

该方法
-(void)application:(UIApplication*)application direceivelocalnotification:(UILocalNotification*)通知
在用户触摸通知时触发,而不是在应用程序处于后台模式时触发,如Apple文档中所述。但是谢谢你抽出时间:)事实上,那不是真的。如果应用程序在前台,它会在应该显示通知时触发,这样应用程序本身就可以选择在需要时显示它。我已经修改了我的答案,现在你想要的更清楚了。我希望它能帮上忙:)谢谢你的时间,本杰,但我没有解释清楚。必须安排通知。所以我不能使用
presentLocalNotificationNow:
。对我来说没用。问题是:我安排了许多
UILocalNotification
对象。他们将根据自己的
fireDate
属性开火。我想在触发每个
UILocalNotification
时触发一个自定义方法。我现在正在使用
addObserver
进行调查。目前没有结果:(如果你在后台运行循环中设置它,它就会出现。下面是一些关于你的应用程序可以具有的后台模式的文档:有文档记录,当应用程序进入后台时,计时器会停止滴答声。如果你的方法太大,就像你在其中执行的许多操作一样,那么如果你优化该方法,只执行重要的任务,它将取消方法btff它会起作用…好的,我会尽快尝试这段代码,并让你注意到。谢谢你,这段代码实际上不符合我的意图。我想在应用程序后台和本地通知被激发时运行自定义方法。我的方法不是太大…现在它只包含一个NSLog行。当本地通知被激发时,它不会被激发我知道。