- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要知道我是否靠近我的应用程序中保存的地理位置
,范围从10 米
到500 米
在后台。我使用了 startMonitoringForSignificantLocationChange
但我没有得到准确的结果。相反,使用 startupdatinglocation
给出的结果与 7 米
一样准确。我计划添加一个 NSTimer
以每 1 分钟
调用一次 startupdatinglocation
。
还有其他解决办法吗?
最佳答案
首先,请不要每分钟都调用 startUpdatingLocation。您将杀死用户设备上的电池生命周期。位置服务使用大量电池电量来运行。此外,一旦您调用 startUpdatingLocation
,它将一直运行,直到您调用 stopUpdatingLocation
。
您可以在 CLLocationManager
上设置一些属性,以根据您的需要对其进行配置。喜欢...
@property(assign, nonatomic) CLLocationDistance distanceFilter
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy
distanceFilter
描述:在生成更新事件之前设备必须水平移动的最小距离(以米为单位)。
desiredAccuracy
可以是以下之一:
kCLLocationAccuracyBestForNavigation
kCLLocationAccuracyBest;
kCLLocationAccuracyNearestTenMeters;
kCLLocationAccuracyHundredMeters;
kCLLocationAccuracyKilometer;
kCLLocationAccuracyThreeKilometers;
根据您的 CLLocationManager
对象的配置,设备将使用特定的地理位置硬件与其他硬件。有时简单地使用手机信号塔三角测量就足够了,并且是获得半准确位置的最快方法。其他时候它可能需要使用 GPS,这会很快耗尽电池生命周期并且需要更长的时间才能到达某个位置,但在大多数情况下更准确。
我建议启动一个 NSTimer,但将其用于与您计划相反的用途。如果 CLLocationManager
无法获得足够准确的位置,请在一段合理的时间后将其用于 stopUpdatingLocation
。您不想让位置服务永远运行。将此计时器设置为大约 30 秒将确保它在超时后关闭。
此外,您还需要实现 CLLocationManagerDelegate 方法:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
在此方法中,您需要检查位置的时间戳
以确保它是最近的。您还需要检查位置的 horizontalAccuracy
以确保它在所需的精度范围内。这是如何执行此操作的示例...
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
// Ensure we get a recent and accurate location
NSDate * locationTimestamp = [newLocation timestamp];
NSTimeInterval timeDifference = [locationTimestamp timeIntervalSinceNow];
double thirtyMins = (30 * 60 * -1);
BOOL locationTimestampIsCurrent = (timeDifference > thirtyMins);
BOOL isAccurateLocation = (newLocation.horizontalAccuracy <= 3000.00);
if (locationTimestampIsCurrent && isAccurateLocation) {
NSLog(@"Shutting down location services, we have a good locaton.");
[self stopListeningForLocation];
} else {
// Do nothing, let this method be called again with a new "newLocation" to check its validity.
}
}
从 iOS 6 开始,上述方法已被弃用,而是使用以下委托(delegate)方法:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
要获取最新的位置,只需像这样获取位置数组的最后一个对象:
CLLocation *location = [locations lastObject];
关于ios - 我可以在后台使用 startupdatinglocation 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16650462/
我的问题很简单: 这些可以吗: manager.delegate = self; [manager startUpdatingLocation]; return self; 作为 -init 方法的最
我创建了一个方法来检查授权是否正确,但是除此之外,即使授权正确,也不意味着它可以检索位置。我试图在 didFailWithError 中检查它,但它似乎被调用了两次,这使得很难发出任何类型的错误消息这
我一直在尝试获取位置坐标。在我调用 [locationManager startUpdatingLocation]; 之后没有任何反应。 它从不调用 - (void)locationManager:(
我有关于显着变化位置服务的问题。 Apple 文档说“无论您使用标准定位服务还是重大更改定位服务来获取定位事件,您接收这些事件的方式都是相同的。” 但是在“显着变化的位置服务”的情况下,我无法获得任何
对于为什么应该使用startUpdatingLocation来定位信标,我没有令人信服的答案。在后台监视/定位信标或在用户已经在区域中并开始监视信标时获取通知是否需要?出现在帖子中,说这实际上会增加电
我有一个需要在后台连续更新GPS的应用程序。我已将其命名为startUpdatingLocation,并设置了“用于位置更新的应用程序注册”,并且得到了大约15分钟的修复,然后该应用程序停止获取更新。
我注意到,在我的应用程序中,当我调用 startUpdatingLocation 时,我的 UI 会短暂锁定,同时我假设设备正在收集位置数据。这是典型的吗?有什么方法可以限制这种情况吗?这就是我的代码
我有一个特定的用例,我希望能够在应用程序已在后台时启动位置更新。具体来说,我希望能够按下我的 Pebble watch 应用程序上的一个按钮,这会导致我的配套 iOS 应用程序开始位置更新。 仅当 i
我正在尝试使用 CLLocation。每次我尝试调用 startUpdatingLocation() 方法时,当前纬度和经度的值始终为零。我在 viewDidLoad() 函数中包含了 locatio
我需要知道我是否靠近我的应用程序中保存的地理位置,范围从10 米 到500 米 在后台。我使用了 startMonitoringForSignificantLocationChange 但我没有得到准
{ ... locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; l
所以现在我至少得到了以下代码的回调...... - (void)viewDidLoad { [super viewDidLoad]; mapView=[[MKMapView alloc] initWi
我正在尝试更改 MapView 的初始缩放位置。如果 myLocation == false,我希望初始位置为 (35,35),如果为 true,则获取当前位置。但是 startUpdatingLoc
我创建了一个应用程序 (Swift 4.0),当它接近 iBeacon 时,它会通过 startUpdatingLocation() 启动本地化。一切都很完美,无论是在前台、后台还是被杀死的应用程序。
这个问题在这里已经有了答案: StartUpdateLocations in Background, didUpdatingToLocation only called 10-20 times (
我正在尝试编写一个简单的地理定位应用程序来查找用户在 iOS 中的位置。当用户按下按钮时,会找到并显示用户的位置,并且应该在触发 startUpdatingLocation 时更改。但是 startU
我正在尝试使用 CLLocationManager 获取用户的当前位置。一切正常,但是在应用程序查找位置时有一点延迟,我需要等待它完成才能允许用户发送它。 [locationManager start
我正在创建需要在特定时间在后台唤醒的应用。 我试过了: UILocalNotification:但我不想使用 UILocalNotification,因为它需要用户交互才能点击通知,而且只有应用程序会
我一直在关注这个教程http://www.devfright.com/ios-6-core-location-tutorial/将位置服务添加到我的 ios 应用程序。我在我的 TestFileVie
override func awakeWithContext(context: AnyObject?) { super.awakeWithContext(context) // Con
我是一名优秀的程序员,十分优秀!