Может ли UILocalNotification запускать пользовательский метод, когда приложение находится в фоновом режиме? - PullRequest
9 голосов
/ 26 октября 2011

Ну, название самообъяснимо. Я хочу создать приложение, которое может управлять запрограммированными локальными уведомлениями, когда приложение находится в фоновом режиме. Уведомления работают без сбоев, но я хочу использовать пользовательский метод при срабатывании предупреждения.

Возможно ли это? Спасибо.

Ответы [ 3 ]

6 голосов
/ 03 ноября 2011

Да, это может быть сделано. Вы можете сделать что-то вроде этого:

- (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 голос
/ 31 июля 2012

Нет .. никакие пользовательские методы не определены, пока приложение работает в фоновом режиме. Как только уведомление сработало, мы не можем изменить предупреждение. Но приятно, когда мы показываем предупреждающее сообщение, затем, нажимая кнопку «Да», вы переходите к методу, называемому app, «Запуск в фоновом режиме» в файле AppDelegate.m

.
1 голос
/ 26 октября 2011

Если бы приложение находилось на переднем плане, то вы бы хотели, чтобы метод - (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:

чтобы вы могли обойти это, просто представив свои собственные уведомления и не планируя их доставку ОС.

Если вы пытаетесь получить доступ к локальным уведомлениям из других приложений, тогда я не думаю, что это разрешено.

...