locationManager:didEnterRegion:在没有位置更改的情况下触发
Posted
技术标签:
【中文标题】locationManager:didEnterRegion:在没有位置更改的情况下触发【英文标题】:locationManager: didEnterRegion: triggered without location change 【发布时间】:2016-04-07 10:17:18 【问题描述】:我有一个应用程序可以监控某些区域(地理围栏),每个区域都代表一个商店,该应用程序会在用户接近商店时通知用户。
由于某种原因,当用户已经在该区域的圈子内时,应用每 20 分钟左右发送一次通知。
一切正常,但是当用户在一个区域内长时间时,应用程序会不断通知他,直到他退出该区域。
知道为什么会这样吗?谢谢!
【问题讨论】:
在获得 didExitRegion 之前停止更新怎么样? 如果您可以为此添加代码会更好 @Pyro 如果我停止监视商店 'didExitRegiin' 不会被调用 @Shreyank 我会在几分钟内添加 【参考方案1】:当您创建 locationManager 并调用 startUpdatingLocation 时,它会开始不断地为您提供模拟器或设备的坐标,坐标值的差异非常小。您需要调用 stopUpdatingLocation。
For your case you need to stopUpdatingLocation when user exist the region or you can record the last location like this:
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
CLLocation *newLocation = [locations lastObject];
[locationManager stopUpdatingLocation];
【讨论】:
我正在使用重大位置更改【参考方案2】:我们也发生了同样的事情。我们只是跟踪区域坐标,当新坐标进入时,我们有一种方法来确定新坐标是否与我们所在的区域“显着不同”。如果不是,那么我们忽略它。如果是,那么我们将采取下一个适当的行动。希望对您有所帮助!
* 更新 *
以下是我们如何确定有足够的变化来采取行动:
- (BOOL) radiiAreSignificantlyDifferent:(CLLocationDistance) newRadius oldRadius:(CLLocationDistance)oldRadius
// radii are in kilometers
return (newRadius > oldRadius + 1.5 || newRadius < oldRadius - 1.5) ? YES : NO;
- (BOOL) locationsAreSignificantlyDifferent:(CLLocation*) newLocation oldLocation:(CLLocation*)oldLocation
BOOL different = NO;
if (oldLocation == nil)
different = YES;
else
// have we moved at least a quarter mile?
different = ([newLocation distanceFromLocation:oldLocation] > 400.0)? YES : NO;
return different;
【讨论】:
嗨,布赖恩,谢谢您的回答。您如何检查它是否有显着差异?你可以发布这个方法吗?这将非常有帮助!谢谢! 请?我真的需要它 是的 - 我会在上面添加它作为更新。这是非常简陋的。希望对您有所帮助,抱歉耽搁了!以上是关于locationManager:didEnterRegion:在没有位置更改的情况下触发的主要内容,如果未能解决你的问题,请参考以下文章
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 使用 Wi-Fi 总是返回 false
我应该在 locationManager:didFailWithError: 中发送 [locationManager stopUpdatingLocation] 吗?
locationManager.getLastKnownLocation() 返回 null
为啥 LocationManager 没有 lastKnown 位置?
不适用于 Android Studio-locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this)