美文网首页
iOS定位机制说明

iOS定位机制说明

作者: Cyyyyyyyy | 来源:发表于2016-12-20 17:56 被阅读242次

最近看了一下iOS系统提供的定位机制。我们现在产品里用的是高德的定位SDK,我们不必接触Core Location的细节,但是高德的SDK毕竟是对Core Location的封装,它势必继承了Core Location的特点和局限,多一些对Core Location机制的了解,能让我们在后续理解处理定位相关功能的时候多一些把握。

Core Location framework提供了两种定位机制,它们各有利弊,我们要根据实际的业务场景,考虑电量消耗和精度等情况,选择合适的实现方案。

下面是对两种机制的简要说明和代码示例:

Standard Location Service

Standard Location Service是苹果提供的最常用的定位获取和位置变化追踪的机制。大部分情况下,我们要获取用户的位置信息都是基于此。它的特点如下:

  • 应用能及时的得到位置的更新,定位精度可以控制,特别适合对定位强依赖的应用,比如运动类和导航类功能。
  • 可以根据不同的业务场景设置activityType属性,系统会以此判断在合适的情况下暂停位置更新。
  • 耗电!!!无论参数是怎么配置的,只要Standard Location Service开启,系统就会让定位模块保持供电获取新数据,这会导致应用一直处在高功耗的情况下。
  • 可以通过设置pausesLocationUpdatesAutomatically标记让应用在后台获取位置,如果应用被杀或者被系统terminated就再也不能获得位置了。
  • 提供了一种叫做Deferring Location Updates的延迟处理位置信息的机制,可是被吐槽的比较多,要使用的话得再研究一下。

代码示例

使用Standard Location Service需要创建一个CLLocationManager对象,根据需要初始化参数desiredAccuracydistanceFilter,同时把要接收位置变化的对象设置为CLLocationManagerdelegate

以下是一段开启定位的代码示例:

- (void)startStandardUpdates {
    // Create the location manager if this object does not
    // already have one.
    if (nil == locationManager)
        locationManager = [[CLLocationManager alloc] init];
 
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
 
    // Set a movement threshold for new events.
    locationManager.distanceFilter = 500; // meters
 
    [locationManager startUpdatingLocation];
}

Significant-Change Location Service

Significant-Change Location Service是苹果提供的在位置发生较大变化(500m或者更多)的时候通知应用的机制。该机制的特点如下:

  • Significant-Change Location Service会持续运行,至少每隔15分钟会发送一次位置更新的数据,就算用户位置没有发生变化。
  • 在应用被终止后,Significant-Change Location Service仍然会在位置变化的时候后台唤起应用通知位置变化。应用在被唤起时只会被分配到10秒钟时间。
  • 精度无法选择,可能达不到GPS的精度。
  • Background App Refresh关闭时无论在前台还是后台都收不到更新通知。

- (void)startSignificantChangeUpdates {
    // Create the location manager if this object does not
    // already have one.
    if (nil == locationManager)
        locationManager = [[CLLocationManager alloc] init];
 
    locationManager.delegate = self;
    [locationManager startMonitoringSignificantLocationChanges];
}

参考文档

Location and Maps Programming Guide
后台定位上传的代码实践
iOS后台持续定位并定时上传

相关文章

  • iOS定位机制说明

    最近看了一下iOS系统提供的定位机制。我们现在产品里用的是高德的定位SDK,我们不必接触Core Location...

  • iOS 定位说明

    一、精度模式 二、左上角蓝条 必要条件:1.app 开启 allowsBackgroundLocationUpda...

  • 简单介绍CSS定位position属性

    定位 position 属性规定元素的定位类型说明这个属性定义建立元素布局所用的定位机制。任何元素都可以定位,不过...

  • position三种定位方式

    position 属性规定元素的定位类型。 说明:这个属性定义建立元素布局所用的定位机制。任何元素都可以定位,不过...

  • CSS定位锚点

    第一节 元素的定位设置 position属性 position属性:定义建立元素布局所用的定位机制说明: stat...

  • CSS position 属性

    1、定义和用法 position 属性规定元素的定位类型。 2、说明 这个属性定义建立元素布局所用的定位机制。任何...

  • app自动化测试

    一、说明安卓和ios系统有什么区别? 1、两者运行机制不同,ios采用的是沙盒运行机制,安卓是虚拟机运行机制。 2...

  • iOS触摸事件处理

    iOS触摸事件处理 主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景.一、处理机制界面响应...

  • 帮世界迷雾补路线的密技

    不管是 iOS 还是 Android 系统,定位的机制完全都是由系统在控制的,APP 能做的就是跟系统说我需要定位...

  • ios签名机制概要

    首先说明这篇文章没有什么特别的东西,只是尽量用最简单的逻辑来说明一下自己对ios签名机制的理解. 签名机制的意义 ...

网友评论

      本文标题:iOS定位机制说明

      本文链接:https://www.haomeiwen.com/subject/rflfvttx.html