【发布时间】:2013-02-20 15:25:25
【问题描述】:
在我的应用程序中有一个位置(区域)可以观看。当设备从该位置移开(距离可能小至 5 到 10 米)时,会弹出一个 AlertView 并播放声音。当应用程序在后台时,会生成本地通知。点击或滑动通知会将应用程序带到最前面。这工作正常。但是,在后台运行时,位置更新会在 15-16 分钟左右后停止。箭头从状态栏中移除。将应用程序置于最前面会弹出 AlertView 并播放声音。据我所知,定位服务对当前位置进行了新的修复,并且显示了 AlertView,因为初始距离大于要观察的区域。由于要观看的区域很小,我认为我不能使用“重大更改”或“didExitRegion”。这是真的吗?
我在“必需的后台模式”中将 info.plist 中的标签设置为“应用程序注册位置更新”。
有没有人对正在发生的事情有所了解? 我是否必须在 - (void)applicationDidEnterBackground:(UIApplication *)application {} 中添加一些代码,如果是的话....应该是什么?
提前致谢,
问候,
阿德里
【问题讨论】:
-
对于精度,您需要显着的LocationChange 是不够的。在您的应用程序中:didFinishLaunchingWithOptions: 方法中您是否正在检查 UIApplicationLaunchOptionsLocationKey 键?
-
@onnoweb 不,这是我在 appDelegate.m 中的方法。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 应用程序启动后自定义的覆盖点。 self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible];返回是; } 请指教。
-
您应该检查该方法的选项参数是否包含 UIApplicationLaunchOptionsLocationKey。当您在 Info.plist 文件中注册位置通知时,iOS 会使用该方法在后台调用您的应用程序,并在选项字典中使用该键。
-
@onnoweb 我想你的意思是这个? if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey] ) { [locationManager startUpdatingLocation]; }
标签: ios objective-c mkmapview cllocationmanager appdelegate