UILocalNotification присутствует NotificationNow выпуск

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

Вот мой код:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
    UIApplication *app = [UIApplication sharedApplication];

    if (app.applicationState == UIApplicationStateActive)
    {
        NSURL *musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Alarm" ofType:@"caf"]];
        AVAudioPlayer *audioFile = [[AVAudioPlayer alloc] init];
        audioFile = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:NULL];
        [audioFile play];

        UIAlertView *arrivingDestinationAlert = [[UIAlertView alloc] initWithTitle: @"Arriving" message:[NSString stringWithFormat:@"Alert"]  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [arrivingDestinationAlert show];
    }else if(app.applicationState == UIApplicationStateBackground || app.applicationState == UIApplicationStateInactive)
    {
        UILocalNotification *notification = [[UILocalNotification alloc] init];
        notification.alertBody = [NSString stringWithFormat:@"%d to reach your destination", self.distToRemind];
        notification.alertAction = @"Destination Approaching";
        notification.hasAction = YES;
        notification.soundName = UILocalNotificationDefaultSoundName;
        [app presentLocalNotificationNow:notification];
    }

    [manager stopMonitoringForRegion:region];
}

То, что я делал раньше, работало. Это было локальное уведомление, не спрашивая, было ли приложение фоновым или активным. Я просто обедал уведомление, как только didEnterRegion был триггер Однако теперь я могу заставить его работать.

Я что-то пропустил?

1 ответ

Я думаю, что вы проверяете активное состояние в неправильном месте. Я делаю что-то очень похожее, но проверяю активное состояние в AppDelegate при срабатывании уведомления. Вы должны перехватить местное уведомление в -didReceiveLocalNotification, Если состояние активно, вставьте туда свой UIAlertView. Если вы запускаете предупреждение из -didEnterRegion или -didExitRegion из фона, оно никогда не будет отображаться.

Другие вопросы по тегам