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)

locationManager.getBestProvider 返回 null