监控区域边界跨越时,从后台模式显示iPhone警报

时间:2011-10-10 08:47:26

标签: iphone objective-c location uialertview background-process

由于位置区域事件,我在后台模式下运行时有一个关于显示UIAlertView的问题。我在这里做了大量类似的问题,并下载了Apple Breadcrumb示例,但它没有尝试显示警报。

我的应用程序在使用此行进入后台模式之前切换到区域监控:

[self.locMan startMonitoringForRegion:targetRegion desiredAccuracy:100];
然后我按照以下方式监控区域进入和退出:

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
NSLog(@"Exited region");

UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Region Boundary Crossed!" 
                                                    message:@"Exited region"
                                                   delegate:self 
                                          cancelButtonTitle:@"Cancel" 
                                          otherButtonTitles:@"Show",nil ]; 

[alertView show];
[alertView release];
}


-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 
{
NSLog(@"Entered region"); 

UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Region Boundary Crossed!" 
                                                    message:@"Entered region"
                                                   delegate:self 
                                          cancelButtonTitle:@"Cancel" 
                                          otherButtonTitles:@"Show",nil ]; 
[alertView show];
[alertView release];
}

我使用模拟器运行此操作以确认它是否正确切换到区域监视。但是,在iPhone上我无法在后台模式下运行时看到警报,但在重新激活应用程序时会显示所需的警报,看似排队等待。

在我的info.plist文件中,我已将“所需背景模式 - 项目0”设置为“应用寄存器以进行位置更新”和“所需设备功能 - 项目0”到“位置服务”和“项目1”到' GPS”。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

当您的应用程序背景时,

UIAlertView将无效。 当应用在后台运行时,您应该使用UILocalNotifications

另外请注意,如果达到所需的精确度,您将非常快速地耗尽iPhone电池。 在后台运行时,CCLocationManager有一个特殊设置,只有在重大更改时才会调用,这可能不会为您带来足够的响应。