使用最新iOS设备中的M7芯片,用户可以通过程序通知用户使用CMMotionActivityManager从静止到跑步,走路等。 Stava和Runkeeper都使用它来自动暂停GPS轮询 (closuresGPS天线),当它检测到用户没有通过M7移动,然后重新启用GPS更新,一旦他们再次移动。 这是应用程序处于后台状态,这是关键。 我在复制此function时遇到的问题是,如果我在后台停止接收活动更新时closures了GPS更新,并且无法再检测用户何时再次通过M7重新打开GPS。 如果我一直离开GPS运行,那么在整个应用程序处于后台时,我将继续从Core Motion获取移动更新。 我假设他们不玩白噪音或其他一些廉价的技巧来保持活跃。 他们是怎么做的呢?
我们已经发布了一个在后台运行的应用程序,并使用CoreBluetooth & CoreLocation自动保存您的停车位置。 在高层次上,我们的应用程序只是寻找一个CoreBluetooth断开事件,并打开GPS,直到我们得到一个定位(精度<= 10米)或3分钟的最大时间(这可能发生在停放在没有GPS覆盖的地下停车场)。 然后,我们使用重要的位置监测来自动重新启动我们的应用程序,以防系统终止我们的应用程序。 在我们的开发过程中,我们从来没有看到自己的电池耗尽问题,但是我们75%的用户表示他们看到了显着的电池消耗。 我们的支持者中有10%对此次调查做出了回应,因此很难确定细分的代表性,但是这个用户的比例很大。 http://www.findmycarsmarter.com/forum/viewtopic.php?f=4&t=30 然后,我们发布了一个更新,允许用户禁用重要的位置监控,60%的人表示通过禁用重要的位置监控漏洞消失。 http://www.findmycarsmarter.com/forum/viewtopic.php?f=4&t=42 最初,我们不能自己重复排水问题,但是我们发现,当我们安装了一个简单的应用程序,只需打开显着的位置监测,结合查找我的汽车更智能,我们间歇性地看到了stream失的重现。 在排水状态下,手机不进入hibernate状态。 即使手机已进入睡眠状态并且显示屏已closures,((设置 – >使用情况 – >自上次完整充电以来的时间))中的使用时间也会持续增加。 有些东西阻止系统进入hibernate状态。 电池在这个阶段每小时消耗大约15%。 这个排水pipe间歇性地出现,似乎在一两个小时后自行清除,随机再来。 我们还没有find一种可靠性重现stream失的方法。 我们认为这个问题是由多个客户端调用CoreLocation引起的。 我们询问了一些遇到问题的用户,以便擦除他们的电话,并只安装“查找我的智能汽车”应用程序。 只是安装了这个应用程序,排水渠没有展示。 我们有其他的报道,当我们的应用程序与谷歌纵横或Facebook等使用,当他们看到stream失发生。 或者,如果他们去杀了其他的应用程序,漏水消失。 我们已经看到通过一个电源周期的漏洞,没有启动应用程序。 这意味着它必须是防止操作系统进入hibernate状态的系统级服务。 尽pipe我们认为这个问题是由多个客户端调用CoreLocation的一些竞争条件引起的,但我们从来没有看到使用CoreLocation的应用程序重现问题。 我们甚至创build了4个或5个不同的应用程序,将同时访问CoreLocation,我们没有看到漏水发生。 然而,当我们使用CoreLocation的应用程序和使用CoreLocation + CoreBluetooth的第二个应用程序时,我们看到了问题。 有很less的应用程序使用CoreLocation + CoreBluetooth组合,所以潜在的这就是为什么更多的开发者没有遇到这个问题。 尽pipe我们无法解释CoreLocation和CoreBluetooth如何相互作用导致这个漏洞,以及CoreLocation的第二个应用程序如何进入等式。 由于漏极是间歇性的,所以只是在我们使用CoreLocation + CoreBluetooth进行testing的时候才会出现问题。 在只有这两个应用程序安装了CTM1和FMC的5.0.1 iPhone 4S上,我们可以间歇性地进入漏极状态。 有趣的是,在我们的普通设备上,擦除设备上的漏水问题似乎不太常见。 不幸的是,我们只看到了几次排水状态,没有能够可靠地重现排水,我们没有一个良好的控制状态工作。 我们已经向苹果公司提交了一个错误报告,并且发布了一个技术支持事件,但是Stackover社区也可以提供一些见解。 我们在5.0.1和5.1 Beta 3中都看到了这个问题。 CTM1 http://www.findmycarsmarter.com/files/CTM1.zip On Going into […]
我们目前正在使用我们的iPhone应用程序遇到以下奇怪的问题。 正如标题所说, NSUserDefaults正在丢失我们的自定义键和值,当电话重新启动,但没有解锁,这是发生在一个非常具体的情况。 语境: 我们在应用程序中使用NSUserDefaults来存储用户数据(例如用户名)。 我们的应用在背景模式下启用了位置。 我们遇到这个问题,只有通过空中分发或通过Testflight。 如果我使用Xcode将.ipa(相同的分布在空中)拖放到手机中,则不会遇到此问题。 情况:用户安装应用程序,login并成功将用户名存储在NSUserDefaults 。 然后,用户将他们的设备closures并将其重新打开,并让手机静置一段时间,然后解锁屏幕。 问题:如果在这段时间内触发了一个重要的位置变化,应用程序就会在后台运行,但NSUserDefaults是空的(只有一些来自苹果的密钥,但没有我们的自定义密钥)。 然后,无论你做什么, NSUserDefaults不会得到这个键的恢复(例如,如果你解锁你的手机并打开应用程序,你将看到键仍然丢失)。 任何帮助或想法将真正赞赏:)
我想在后台跟踪时得到蓝条,但不是在后台。 我的应用程序一直使用位置服务,所以在iOS8中,我使用CLLocationManager上的requestWhenInUseAuthorization 。 通常,应用在closures时会停止跟踪您的位置,但用户可以select让应用在后台跟踪其位置。 因此,我在Info.plist文件中有UIBackgroundModes的location选项。 这很好地工作:当切换到后台,应用程序不断获取位置更新,并出现一个蓝色的条形提醒,该应用程序正在使用位置服务。 全部完美。 但问题是,当用户没有select在后台跟踪时,蓝条也会出现。 在这种情况下,我只需在进入后台时停止AppDelegate的位置更新: – (void) applicationDidEnterBackground:(UIApplication *)application { if (!trackingInBackground) { [theLocationManager stopUpdatingLocation]; } } closures应用程序后,蓝条仅显示一秒钟,但仍然看起来非常恼人。 我知道,使用requestAlwaysAuthorization而不是requestWhenInUseAuthorization将解决问题,但是我根本不会得到任何蓝条,也不是在后台跟踪实际上。 我已经尝试在applicationWillResignActive:方法中已经stopUpdatingLocation ,但这没有什么区别。 有没有人知道如何在后台跟踪时获得蓝条,但是没有时间呢?
我需要获取iOS设备的国家位置。 我一直在尝试与MKReverseGeocoder使用CoreLocation。 但是,这似乎相当频繁地返回erralous。 而我只需要国家,不需要街道等。 这怎么能以更稳定的方式来完成呢?
只是一个关于核心位置的简单问题,我试图计算两点之间的距离,代码如下: -(void)locationChange:(CLLocation *)newLocation:(CLLocation *)oldLocation { // Configure the new event with information from the location. CLLocationCoordinate2D newCoordinate = [newLocation coordinate]; CLLocationCoordinate2D oldCoordinate = [oldLocation coordinate]; CLLocationDistance kilometers = [newCoordinate distanceFromLocation:oldCoordinate] / 1000; // Error ocurring here. CLLocationDistance meters = [newCoordinate distanceFromLocation:oldCoordinate]; // Error ocurring here. } 我在最后两行收到以下错误: 错误:无法转换为指针types 我一直在search谷歌,但我找不到任何东西。
我有一个明确的用户交互的应用程序,利用用户的当前位置。 如果用户拒绝访问位置服务,我仍然希望随后的使用提示用户转到设置并为我的应用重新启用位置服务。 我想要的行为是内置的地图应用程序的行为: 在设置>常规>重置>重置位置警告中重置位置警告。 启动地图应用 点击左下angular的当前位置button。 地图提示“”地图“将使用您当前的位置”| “不允许”| “允许”。 select“不允许”选项。 再次点击左下angular的当前位置button。 地图提示“打开位置服务以允许”地图“确定您的位置”| “设置”| “取消”。 在我自己的应用程序中,相同的基本stream程会导致我的CLLocationManagerDelegate -locationManager:didFailWithError:方法在最后一步被调用kCLErrorDenied错误,并且用户无法打开“设置”应用程序进行更正。 为了响应这个错误,我可以显示自己的警报,但是无法启动“设置”应用程序,例如操作系统可以提供的内置地图应用程序所使用的警报。 CLLocationManager类中有什么我不知道能够给我这种行为吗?
是否有办法手动告诉设备发送重要的位置更改通知,以唤醒为此通知注册的所有应用程序? 这只是为了testing,我意识到这个私人API调用将被提交到应用程序商店被拒绝。
我正在尝试在iOS应用程序中获取用户位置。 我首先在我的项目中包含了corelocation框架。 然后在一个button上单击我调用核心位置API如下。 当我试图在设备中安装时,核心位置永远不会请求用户权限。 当我尝试获取button上的位置点击,我得到kCLAuthorizationStatusNotDetermined作为authorisationStatus。 请帮助我。 我不知道发生了什么事。 – (IBAction)fetchLessAccurateLocation:(id)sender { [self.txtLocation setText:@""]; locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; locationManager.distanceFilter = 1000; if ([self shouldFetchUserLocation]) { [locationManager startUpdatingLocation]; } } 这是我的shouldFetchUserLocation方法: -(BOOL)shouldFetchUserLocation{ BOOL shouldFetchLocation= NO; if ([CLLocationManager locationServicesEnabled]) { switch ([CLLocationManager authorizationStatus]) { case kCLAuthorizationStatusAuthorized: shouldFetchLocation= YES; break; case kCLAuthorizationStatusDenied: { […]
你如何检索用户的当前城市名称?