这个问题一直让我发疯。我正在尝试做的是在用户进入区域时触发通知。但是,我想要的是,如果用户正在使用该应用程序,则会显示警报消息,并且如果应用程序在后台显示本地通知。
这是我的代码:
- (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
触发时立即发出通知。但是现在我可以让它工作了。
我错过了什么吗?
我认为您在错误的位置检查活动状态。我做了一些非常相似的事情,但是当通知触发时,我会在AppDelegate中检查活动状态。您应该在 -didReceiveLocalNotification
中截获本地通知。如果状态处于活动状态,请将您的 UIAlertView 推送到此处。如果从后台从 -didEnterRegion 或 -didExitRegion 触发警报,则永远不会看到它。