Android 位置服务(LBS)客户支持指南

架构概述

1.1 架构

MTK LBS 架构

二 介绍

GPS 系统的组成部分

全球定位系统(GPS)是由 24 颗卫星及其控制站组成的全球无线电导航系统。GPS 以这些 "人造卫星" 为参考点,可计算出精度达米级的位置。从某种意义上说,它相当于给地球上的每平方米都分配了一个唯一的地址。

全球共有 5 个控制站,分别位于夏威夷、阿森松岛、迪戈加西亚岛、夸贾林环礁和科罗拉多斯普林斯。这些控制站监测 GPS 卫星,检查其运行状态与太空精确位置。主地面站会将卫星星历常数和时钟偏移的修正信息传回卫星,卫星再将这些更新整合到发送给 GPS 接收机的信号中。

A-GPS 拓扑模型

A-GPS(辅助 GPS)利用 GPS 卫星确定用户设备(UE)的位置。它被称为 "辅助 GPS",是因为其方法与原始 GPS 不同:用户设备会使用蜂窝网络基站处的参考 GPS 接收机提供的卫星信息。

  • 辅助计算位置,但无法单独完成定位
  • 可接收透明的移动 / 通信网络信号,即使在室内或无开阔天空的环境中
  • 通过基站获取 / 计算来自卫星的辅助数据、星历、历书等信息
  • 最初是为移动通信的紧急救援而设计的

A-GPS 数据路径

  1. 控制面:该方式通过标准定义的信令控制信道(因此称为 "控制面")传输 A-GPS 数据,这是网络运营商移动呼叫分发系统的固有部分。控制面的目标是向紧急服务提供商提供高精度、高可用性的位置响应。定位功能需处理随时、随地发起的位置请求,且无法预判前置事件。

  2. 用户面:用户面通常基于 TCP/IP,用于支持位置服务。它旨在为用户提供非紧急用途的位置信息增强处理能力(如速度、精度、易用性)。这种方案被称为 "用户面",因其相关信令对无线网络而言仅表现为用户数据。通常,所有流量都通过 IP 承载传输。

我们目前支持 2G/3G/4G AGP 以及 SUPL V1.0/V2.0。

EPO 客户端架构

EPO 是联发科创新的专有离线服务器型 A-GPS 解决方案之一。它可为客户和用户提供长达 30 天的卫星轨道预测,通过提升首次定位时间(TTFF)大幅优化 GPS 用户体验。

位置服务调试应用(LBS Debug App)

4.1 定位事件管理器(LocationEM)

4.1.1 全球定位系统(GPS)

(1)GPS开启或关闭 GPS。

(2)清除 / GPS 模式向 GPS 芯片发送清除辅助数据的指令以进行性能测试。发送给 GPS 芯片的辅助数据类型,取决于在 GPS 模式中选择的重置类型(热启动、温启动、冷启动、全启动等)。

(3)参考位置设置一个参考位置,用于计算 GPS 定位结果与参考位置之间的距离,单位为米;当定位结果可用时,会显示该距离。

(4)压力测试启动或停止 GPS 压力测试,执行流程由压力测试设置控制。

(5)计时器当 GPS 启用时,计时器开始计时,单位为秒。

(6)定位结果当 GPS 芯片生成定位结果后,可查看各类位置信息,例如纬度、经度、UTC 时间、高度、精度、方位、速度、距离、首次定位时间(TTFF)、初始纬度、初始经度、初始距离。

(7)卫星信息显示 GPS 芯片搜索到的当前卫星信息,包括 PRN(伪随机噪声码)、SNR(信噪比)、AZI(方位角)、ELE(高度角)。

(8)NMEA 日志显示 GPS 驱动上报的 NMEA 字符串。

(9)压力测试设置测试人员可通过这些配置控制压力测试的流程。

4.1.2 视图

(1)GPS 视图

在该页面,用户可以查看每颗卫星的位置,支持以不同颜色显示多颗卫星。

表 4-1:卫星系统的颜色编码

卫星系统 颜色
GPS(GP) 青色(0xff00ffff)
格洛纳斯(GL) 黄色(0xffffff00)
北斗(BD) 蓝色(0xff0000ff)

(2)信号强度在该页面,用户可以查看每颗卫星的信号强度。

(3)用于定位的卫星当卫星被 GPS 模块用于定位时,会标记为绿色;否则标记为红色。

4.1.3 AGPS

  • 最近 A-GPS 分析信息显示 A-GPS 操作的最新时间戳,并展示调制解调器 GPS 与 A-GPS 之间的消息传输情况。

  • 启用 A-GPS切换 A-GPS 功能的开启或关闭状态。

  • **CP 与 UP 切换(仅 SI)**选择你希望使用的 A-GPS 信令方式,默认设置为 UP 模式。

  • CDMA 设置当 CDMA 和 WCDMA 网络均可用时,你偏好哪种 AGPS 协议?

  • SUPL 设置配置 SUPL 协议的设置项。

  • **UP 预方法(仅 SI)**选择 A-GPS 的一种操作模式:MSA、MSB 或无偏好。这些选项会在 "用户面" 被选中时显示。

  • UP 定位技术启用设备使用 MSA 或 MSB 的 UP 定位方法。这些选项会在 "用户面" 被选中时显示。

  • SUPL 版本选择使用 SUPL1.0 或 2.0 协议的用户面(UP)会话。

  • TLS 版本选择 TLS 连接版本:1.0、1.1 或 1.2。

  • 证书验证启用或禁用证书验证,默认值为禁用。

  • UDP 启用启用 UDP 端口监听,以监控来自网络的 NI 请求。

  • 修改 SUPL UT2 时间自定义 SUPL UT2 计时器。

  • 修改 SUPL UT3 时间自定义 SUPL UT3 计时器。

  • SUPL 版本次要号若满足上述 MCC/MNC 条件,自动配置 SUPL 的次要版本。

  • SUPL 版本服务标识若满足上述 MCC/MNC 条件,自动配置 SUPL 的服务标识。

  • SLP 模板快速从以下选项中选择 "SLP 地址" 和 "SLP 端口" 的 SLP 模板设置:[Google]、[Google noTLS]、[Googl IP]、[Sprint]、[Rns]、[CMSS Lab]、[Andrew]、[Ericsson]、[Ericsson FQDN]、[ORANGE]、[CMCC]、[Telstra]、[Chunghwa]、[T-Mobile]、[Vodafone]。

  • SLP 地址显示当前的 SLP 地址。

  • SLP 端口显示当前的 SLP 端口。

  • TLS 启用启用与 TLS 的连接。

  • 周期性设置周期性相关操作项。

  • 周期性启动启动一个周期性触发的会话。

  • 中止中止触发式会话以停止正在进行的触发会话(若存在)。

  • 区域设置配置 SI 区域事件参数;启动区域触发式会话,或中止触发式会话以停止正在进行的触发会话(若存在)。

  • 进入区域当设备首次检测到自身处于预定义区域内时,向 SLP 发送报告;若启用重复报告,设备离开后再次进入预定义区域时会再次报告。

  • 处于区域内当设备处于预定义区域内时,向 SLP 发送报告。

  • 离开区域当设备首次检测到自身处于预定义区域外时,向 SLP 发送报告;若启用重复报告,设备进入后再次离开预定义区域时会再次报告。

  • 显示 SI QoP 编辑器显示 SI 定位质量配置编辑器。

  • 精度单位显示水平精度和垂直精度的不同单位。

  • 水平精度水平精度是 SUPL QoP(定位质量)的参数之一。

  • 垂直精度垂直精度是 SUPL QoP(定位质量)的参数之一。

  • 位置时效位置时效是 SUPL QoP(定位质量)的参数之一。

  • 延迟延迟是 SUPL QoP(定位质量)的参数之一。

  • 控制面设置可在此处修改控制面设置。

  • MOLR 定位方法选择一种 MOLR 定位方法,如 "位置估算" 或 "辅助数据",默认值为 "位置估算"。

  • 外部地址启用或禁用外部地址转发。

  • MLC 编号启用或禁用移动定位中心(MLC)服务转发。

  • EPC MOLR PDU 启用仅在执行 MOLR 的 LPP CP 期间启用此项;AGPS 会从配置文件中注入负载,以告知服务器设备的能力。

  • 功能启用器所有功能选项均可在此处修改。

  • 允许网络发起的请求启用或禁用对 SUPL NI 或 CP MTIR 的处理;若禁用此项,收到 SUPL NI 或 CP MTIR 请求时会话会被拒绝。

  • 允许漫游启用或禁用设备漫游时的 A-GPS 功能;若禁用此项,漫游状态下 A-GPS 将无法运行。

  • CP 自动重置启用或禁用 CP 自动重置;此功能仅用于联发科内部,默认请勿启用。

  • 将 SUPL 记录到文件为满足 CMCC 要求,可将特定 SUPL 消息输出到文件;默认路径为 "/data/agps_supl/log/",若存在 SD 卡,路径会改为 "/sdcard/"。

  • 记录敏感数据启用或禁用包含敏感信息(如当前位置)的 AGPS 守护进程日志。

  • 允许从 SD 卡进行 AGPS 认证启用此项可允许 agpsd 从设备存储的 "/sdcard/agps/cacerts" 路径加载证书。

  • 允许基于当前 PLMN 自动配置 SUPL 配置文件启用 SUPL 专用 APN。

  • SUPL 专用 APN 流可启用或禁用 SUPL 专用 APN 流。

  • 将 AGPS 设置同步到 SLPD运行时将 AGPS 设置(如 SUPL 配置文件、SUPL 版本、TLS 版本)从 AGPSD 同步到 SLPD。

  • 允许 SUPL 消息中包含有效的 IMSI启用或禁用 SUPL 消息中包含有效的 IMSI。

  • 网络发起会话期间显示 GPS 图标启用或禁用 E911 定位服务期间 GPS 图标的显示。

  • LPPe 禁用众包定位启用或禁用 LPPe 的众包定位(如网络定位)。

  • LPPe CP 启用启用或禁用 CP LPPe 功能。

  • LPPe UP 启用启用或禁用 UP LPPe 功能。

  • AOSP 分析启用启用或禁用通过 "native_set_agps_server" 从 GnssLocationProvider 进行 SUPL 配置文件配置;启用此项后,"自动配置 SUPL 配置文件" 会被忽略,因为 AOSP 定位框架会针对不同 MCC/MNC 从框架资源中加载 SUPL_HOST 和 SUPL_PORT。

  • 将 NLP 设置用于 SUPL启用或禁用将 NLP 设置绑定到 SUPL SI 流程。

  • LBS 日志启用启用或禁用向调试端口输出 LBS 日志。

  • SIB8/SIB16 启用启用或禁用 SIB8/SIB16。

  • A - 格洛纳斯启用若硬件支持 A - 格洛纳斯,启用或禁用格洛纳斯辅助功能。

  • A - 北斗启用若硬件支持 A - 北斗,启用或禁用北斗辅助功能。

  • A - 伽利略启用若硬件支持 A - 伽利略,启用或禁用伽利略辅助功能。

  • 重置为默认值此按钮可将所有 A-GPS 设置重置为默认值。

4.1.4 FLOW

4.1.5 View

(1)清空屏幕清除当前屏幕上显示的日志。

(2)日志显示展示 AGPS 进程日志,以标识当前进度。

4.1.6 MISC

(1)跳转功能这些是用于跳转到特定功能界面的快捷按钮:

  • GPS → 位置服务
  • YGPS → YGPS 功能
  • TIME → 日期和时间服务
  • DSD → 数据服务诊断
  • WIFI → Wi-Fi 设置

(2)当前蜂窝单元信息显示当前蜂窝单元信息与 IP 地址。

(3)服务器地址输入你想要测试的服务器地址。

(4)服务器端口输入你想要测试的服务器端口。

(5)连接启动或停止连接测试。

(6)连接结果显示服务器连接结果,包括时间戳、DNS 查询、成功结果,或连接失败的原因。

4.1.7 Raw Data

(1)导航启动或停止查询 GPS 导航相关的原始数据消息。

(2)测量启动或停止查询 GPS 测量相关的原始数据消息。

4.1.8 NLP

(1)**网络定位(NLP)**向定位框架发起或终止网络位置更新请求。

(2)清空屏幕清除已上报的网络位置消息。

五 定制指南

5.1 如何集成网络定位提供方

除 GPS 外,移动设备平台还可通过基于网络的信息提供定位服务。移动系统会收集设备的网络状态参数(如 Wi-Fi MAC 地址或移动蜂窝单元信息),并将这些数据发送至网络定位服务服务器;服务器随后查询其数据库,并将定位结果回传给设备。

被称为 "网络定位提供方" 的客户端应用,是移动设备上的一项服务:它负责收集设备信息,并处理与远程网络定位服务器的通信。目前,Android 设备可通过安装 Google GMS 包或第三方网络定位提供方来支持网络定位;Google 网络定位提供方是 GMS 包中包含的一项服务。

在联发科的系统包中,早期 Android 版本默认预装了百度网络定位提供方。百度 NLP 包的路径如下:

  • alps/vendor/mediatek/proprietary/binary/3rd-party/free/Baidu_Location(Android L)
  • alps/vendor/mediatek/proprietary/packages/3rd-party/Baidu_Location(Android M)
  • alps/vendor/mediatek/proprietary/packages/3rd-party/LBS/Baidu_NLP(Android N、O、P)
  • (Android Q 及之后版本)不包含第三方 NLP 包

OEM 客户可选择使用第三方网络定位提供方(如高德)替代默认的百度 NLP。要配置其他厂商的 NLP,需遵循以下步骤:

  1. 将第三方 NLP 包放入代码库,可参考百度 NLP 的路径:a. alps/vendor/mediatek/proprietary/packages/3rd-party/LBS/Baidu_NLP(Android N 及之后版本)
  2. 更新alps/device/mediatek/common/device.mk以编译 NLP 包。
  3. com.Baidu.Location包名改为其他第三方 NLP 的包名。
  4. 更新系统配置:a. alps/vendor/mediatek/proprietary/frameworks/base/res/values/config.xmlb. 将百度 NLP 的 Java 包名 "com.baidu.map.location" 替换为第三方 NLP 的 Java 包名。
  5. 重新编译系统包。

5.2 如何开启 / 关闭 A-GPS 功能

为动态启用或禁用 A-GPS,Android 构建系统提供了可选配置标签(MTK_GPS_SUPPORTMTK_AGPS_APP),支持自定义这些功能。"关闭" 意味着 A-GPS 的 MMI 菜单不会出现在用户应用中,且不显示任何菜单列表;相应地,mtk_agps.lilibagpsupl.solibssadp.so等相关模块不会被包含在系统镜像中。若这些模块已存在,只需使用remake命令重新构建项目即可。

由于 A-GPS 无法脱离 GPS 运行,我们在 AGPS 与 GPS 之间建立了依赖关系,以便在两者间切换:

  • 若设置MTK_GPS_SUPPORT = noMTK_AGPS_APP也必须设为 "no";否则项目构建会报错(提示 "无 GPS 支持时 A-GPS 无法切换"),仅将MTK_AGPS_APP设为 "no" 才能无错构建。
  • 若设置MTK_GPS_SUPPORT = yesMTK_AGPS_APP可设为 "yes" 或 "no"。

以上所有依赖功能均已集成到 Android 构建系统中。以下是开启 / 关闭 A-GPS 的步骤:

  • 开启 A-GPS:在device.mk中设置MTK_GPS_SUPPORT = yesMTK_AGPS_APP = yes
  • 关闭 A-GPS:在device.mk中设置MTK_AGPS_APP = no

5.3 A-GPS 配置文件

A-GPS 配置文件的作用是允许客户自定义 A-GPS 的行为。以下是 A-GPS 配置文件的路径信息:

表 5-1:代码库中的路径

Android 版本 路径
4.4.2(KK2) alps/mediatek/frameworks/base/agps/etc/agps_profiles_conf.xml
5.0(L)~ 6.0(M) alps/vendor/mediatek/proprietary/frameworks/base/agps/etc/agps_profiles_conf2.xml
6.0(M)~ 10.0(Q) alps/device/mediatek/common/agps/agps_profiles_conf2.xml
10.0(Q)(拆分构建启用,如 Q.mp1) alps/device/mediatek/vendor/common/agps/agps_profiles_conf2.xml
11.0(R) alps/device/mediatek/vendor/common/agps/agps_profiles_conf2.xmlalps/device/mediatek/vendor/common/agps/carrier/agps_profiles_conf2_carrier_*.xml

表 5-2:设备中的路径(ODM 默认值)

Android 版本 路径
4.4.2(KK2)~ 6.0(M) /etc/agps_profiles_conf2.xml
7.0(N)~ 10.0(Q) /vendor/etc/agps_profiles_conf2.xml/vendor/etc/agps_profiles_conf2.xml- 包含运营商映射的定义- 也被称为原始 xml
11.0(R) /vendor/etc/gnss/carrier/agps_profiles_conf2_carrier_*.xml- 为运营商提供特殊值- 缺失项会使用原始 xml 中的值- 被称为 carrier.xml

表 5-3:设备中的路径(经 LocationEM、自动配置或 ODM 工具编辑后)

Android 版本 路径
4.4.2(KK2)~ 6.0(M) /data/agps_supl/agps_profiles_conf2.xml
7.0(N)~ 10.0(Q) /data/vendor/agps_supl/agps_profiles_conf2.xml/data/current.xml被称为 current.xml
11.0(R) /data/vendor/agps_supl/agps_profiles_conf2_prv.xml- 备份原始 xml 中的通用值,为运营商提供特殊值- 当 IMSI 的(MCC, MNC)不在 carrier_mapping 中时,会加载此文件- 被称为 prv.xml

A-GPS 配置 XML 文件的结构如下表所示:

表 5-4:XML 中的布局

标签 说明
<mtk_agps_profiles> XML 文件的根元素
<cur_supl_profile /> 当前激活的 SUPL 配置文件
<supl_profile /> 未激活的 supl_profile 列表,用于在 LocationEM 中定义 SLP 模板(适用于 3GPP2 A-GPS 行为)
<cdma_profile /> 仅用于内部测试,不面向真实网络
<agps_setting /> 为联发科 A-GPS 守护进程提供选项
<gnss_setting /> 为 GNSS 模块提供选项
<cp_setting /> 为 3GPP 控制面 A-GPS 行为提供选项,发送至联发科 A-GPS 守护进程的 MNL(调制解调器网络层守护进程)
<up_setting /> 为用户面 A-GPS 行为提供选项,发送至 LBS 模块
<carrier_mapping> 为 SUPL 任务提供选项,发送至联发科 A-GPS 守护进程
<carrier_mapping> 每个 carrier_mapping 定义了一组 mcc_mnc 编码到运营商名称的映射- 仅 Android 11.0 支持- 仅原始 xml 支持 carrier_mapping

详细配置如下:

属性 示例 描述
maj_ver "2" XML 文件的主版本号
min_ver "1" XML 文件的次版本号
carrier_xml_enable "false" "false":禁用运营商 xml(默认)"true":启用运营商 xml- 仅 Android 11.0(R)支持- 仅原始 xml 支持此选项

详细配置如下:

例如:

mtk_agps_profiles maj_ver="1" min_ver="2" carrier_xml_enable="true">

例如:

复制代码
<!-- CMCC--> 
 <supl_profile name="CMCC" 
 addr="221.176.0.55" 
 port="7275" 
 tls="true" 
 
 
 app_id="ap0004" 
 provider_id="221.176.0.55" 
 default_apn="CMCC WAP" 
 optional_apn="CMNET" 
 optional_apn_2="" 
 address_type="IPv4address:port" 
 />

例如:

复制代码
<agps_setting 
 agps_enable="true" 
 agps_protocol="0" 
 
 gpevt="false" 
 
 e911_gps_icon_enable="false" 
 e911_open_gps="false" 
 tc10_ignore_fw_config="false" 
 lppe_network_location_disable="false" 
 agps_nvram_enable="true" 
 
 lbs_log_enable="false" 
 lppe_crowd_source_confident="90" 
 ignore_si_for_e911="false" 
 /> 

例如:

复制代码
 <gnss_setting 
 sib8_16_enable="true" 
 a_glonass_satellite_enable="true"  
 a_beidou_satellite_enable="true" 
 a_galileo_satellite_enable="true"  /> 

六 调试

6.1 调试消息

有两种日志消息,可通过不同方式记录。

6.1.1 如何记录调试消息

你可以使用 Android 日志系统工具 "logcat",在命令行中记录 A-GPS 调试消息:示例:将主日志记录到 mainlog.txtadb logcat -v time >/mainlog.txt

6.1.2 将 SUPL 日志记录到文件

在 A-GPS 的工程师模式菜单中,我们提供了 "Log SUPL to File" 选项,可在 SUPL 处理过程中,将关键日志语句记录到文件(路径:/data/agps_supl/log/),此功能仅适用于用户面。通过该日志文件,我们可以查看 SUPL 会话的主要流程。若需要获取详细日志信息,请选择 logcat 工具。

七 如何使用 A-GPS

7.1 前提条件

  1. 确保可用的 SIM 卡已插入被测设备(DUT)。
  2. 确保数据连接可用。
  3. 没有防火墙阻止 A-GPS 会话与服务器的连接。
  4. 通过 "设置→位置访问→GPS 卫星" 启用 GPS 功能。

7.2 如何触发 A-GPS 会话

本节是启动 A-GPS 定位的指南,请按照步骤(1)、(2)、(3)完成定位请求。

八 参考资料

8.1 参考文档

A-GPS 相关信息对应的规范文档:

  • 3GPP_34.171
  • 3GPP_34.123
  • 3GPP_25.331
  • 3GPP_51.010
  • 3GPP_44.031
  • OMA_AD_SUPL_V1.0
  • OMA_TS_ULP_V1.0
  • OMA_RD_SUPL_V1.0
  • OMA_ETS_SUPL_V1.0
  • OMA_AD_SUPL_V2.0
  • OMA_TS_ULP_V2.0
  • OMA_RD_SUPL_V2.0
  • OMA_ETS_SUPL_V2.0

LPP 相关信息对应的规范文档:

  • 3GPP_24.171
  • 3GPP_23.271
  • 3GPP_36.305
  • 3GPP_36.355
  • 3GPP_37.571

3GPP 下载链接:https://www.3gpp.org/

OMA SUPL 下载链接:http://openmobilealliance.org/Technical/current_releases.aspx

8.2 源代码信息

  • LocationEM 应用:vendor/mediatek/proprietary/packages/apps/LocationEM2
  • Agpsinterface:vendor/mediatek/proprietary/packages/apps/agpsinterface
  • MTK LBS 服务:
    • Android 13 及之前版本:vendor/mediatek/proprietary/hardware/connectivity/gps_lbs_hidl_service
    • Android 14 及之后版本:vendor/mediatek/proprietary/hardware/lbs/mtk_lbs_service
相关推荐
cws2004011 小时前
微软系统中AD域用户信息及状态报表命令介绍
开发语言·microsoft·php
熬了夜的程序员1 小时前
【RUSTFS】rustfs的go语言sdk
开发语言·后端·golang
Hello.Reader1 小时前
Rocket 0.5 快速上手3 分钟跑起第一个 Rust Web 服务
开发语言·前端·rust
hefaxiang1 小时前
分支和循环(中)
c语言·开发语言
爱装代码的小瓶子1 小时前
【c++知识铺子】最后一块拼图-多态
java·开发语言·c++
认真敲代码的小火龙1 小时前
【JAVA项目】基于JAVA的超市订单管理系统
java·开发语言·课程设计
CryptoRzz1 小时前
对接墨西哥股票市场 k线图表数据klinechart 数据源API
开发语言·javascript·web3·ecmascript
yue0081 小时前
C# 实现电脑锁屏功能
开发语言·c#·电脑·电脑锁屏
chilavert3181 小时前
技术演进中的开发沉思-230 Ajax:Prototype.js 重构原生 DOM
开发语言·前端·javascript