MTK GNSS 可见性控制指南

非框架类 GNSS 服务设计

  • 普通应用

    • 可见性由 AppOps(应用操作权限)与通知栏提供
    • 控制权由设置与权限管理提供
  • 使用 GNSS 定位的非框架服务该如何处理?

    • 运营商定位服务:CP(核心网)、SUPL(安全用户面定位)、IMS(IP 多媒体子系统)
    • 厂商 / 芯片级服务
    • Linux 守护进程、低功耗芯片
    • 任何不属于 Android 框架的服务

如通过通过attribution APK,让非框架类服务对用户可见且可控制

Android GMS Requirements

  • 系统应遵循用户的定位设置与应用权限状态。

  • 当定位数据被访问时,系统应在设备屏幕上显示通知。

  • 上述要求必须适用于设备内的所有软件、硬件模块,包括应用、框架、原生守护进程、硬件或子微控制器系统。

  • 仅在紧急呼叫场景下,可绕过用户的定位设置与权限状态。

联发科 GNSS 可见性控制解决方案

  • 引入一款归因应用 "MTK Non-Framework LBS",用于承载联发科原生 GNSS 位置服务(LBS)守护进程。
    • 代码仓库路径:alps/vendor/mediatek/proprietary/packages/apps/GnssVisibilityControl
    • 包名:com.mediatek.gnss.nonframeworklbs
    • 客户可根据自身需求自定义该应用。
    • 若重命名联发科的此应用包,需同步更新 GPS 驱动代理包列表;否则,LBS 原生模块将无法访问 GNSS 定位信息。

联发科 GNSS 可见性控制框架

AOSP GNSS 可见性控制代理应用校验

联发科在 MTK 运营商配置插件中设置 NonFrameworkLBS 包名:

  • vendor/mediatek/proprietary/frameworks/opt/telephony-base/java/mediatek/telephony/MtkCarrierConfigManager.java中,配置运营商配置项KEY_NFW_PROXY_APPS_STRING

    复制代码
    // M: 设置GNSS可见性控制代理应用列表
    sdefaults.putString(CarrierConfigManager.Gps.KEY_NFW_PROXY_APPS_STRING,
                        "com.mediatek.gnss.nonframeworklbs");
  • AOSP 定位框架读取应用的定位权限,并同步至 GNSS 驱动:

    • 涉及代码文件:
      • frameworks/base/services/core/java/com/android/server/location/GnssConfiguration.java

      • frameworks/base/services/core/java/com/android/server/location/GnssVisibilityControl.java

        复制代码
        /**
         * 从配置参数NFW_PROXY的取值中返回代理应用列表
         * 若未提供取值,则返回{@Collections.EMPTY_LIST}
         */
        List<String> getProxyApps() {
            // 以空格分隔的Android代理应用包名列表
            String proxyAppsStr = mProperties.getProperty(CONFIG_NFW_PR...);
            if (TextUtils.isEmpty(proxyAppsStr)) {
                return Collections.EMPTY_LIST;
            }
        
            String[] proxyAppsArray = proxyAppsStr.trim().split("\\s+");
            if (proxyAppsArray.length == 0) {
                return Collections.EMPTY_LIST;
            }
            // ...(后续逻辑)
        }
        
        private String[] getLocationPermissionEnabledProxyApps() {
            // 统计已开启定位权限的代理应用数量,用于创建数组
            int countLocationPermissionEnabledProxyApps = 0;
            for (ProxyAppState proxyAppState : mProxyAppsState.values()) {
                if (proxyAppState.hasLocationPermission) {
                    ++countLocationPermissionEnabledProxyApps;
                }
            }
            // ...(后续逻辑)
        }

GCF OMA SUPL 隐私覆盖

  • OMA SUPL 的隐私覆盖要求与 GMS 定位隐私政策存在冲突

    • 该要求希望在不通知终端用户的情况下提供 NI 定位服务。
  • 联发科 BSP(板级支持包)遵循 GMS 定位隐私政策

  • 联发科提供了一个 AGPS 配置项,以支持 OMA SUPL 的隐私覆盖要求:

    • 配置文件路径:device/mediatek/vendor/common/agps/agps_profiles_conf2.xml
    • 配置项:privacy_override_mode(隐私覆盖模式)
      • 值 0:默认值。隐私覆盖功能无法绕过 GNSS 可见性控制策略。
      • 值 7 :当隐私覆盖的 NI 定位请求发起时,隐藏定位图标并绕过定位设置;同时支持非紧急呼叫场景下的紧急 SUPL INIT(SUPL 初始化)。
        • 位 1:隐藏定位图标
        • 位 2:针对隐私覆盖的 NI 请求,绕过定位设置
        • 位 3:针对紧急 SUPL INIT,绕过定位设置
  • 在 LocationEM2 测试工具中,提供了 "Privacy Override Enable(启用隐私覆盖)" 选项

    • 实验室测试时,勾选该复选框,即可在 AGPS 配置中设置值为 7。

常见问题(FAQ)

  1. 哪些联发科模块 / 功能会受此政策影响?
  • 联发科 AGPS、IMS、调制解调器(MODEM)及 GPS 日志功能均需遵循此政策。
  1. 若没有联发科 BSP 代码库,厂商客户如何集成联发科的可见性控制功能?

  2. 集成 GNSS 归因应用代码仓库:alps/vendor/mediatek/proprietary/packages/apps/GnssVisibilityControl

  3. 在项目的device.mk中添加归因应用的包名

  4. frameworks/base/telephony/java/android/telephony/CarrierConfigManager.java中,更新 AOSP 运营商配置文件的KEY_NFW_PROXY_APPS_STRING项:

    复制代码
    defaults.putString(KEY_NFW_PROXY_APPS_STRING, "com.mediatek.gnss.nonframeworklbs");
  5. 如何引导终端用户授予代理应用定位权限?

  • 厂商客户需开发设置向导或弹出对话框,引导终端用户为此应用包授予权限。
  1. 是否有功能选项可禁用 GNSS 可见性控制功能?
  • 此功能无对应的功能开关选项。
  1. 若移除 NonFrameworkLBS 代理应用会怎样?
  • AGPS、IMS 功能将无法正常工作。
  1. 如何实现默认启用(与 Android P 的行为一致)?
  • 对于非 GMS 项目,厂商客户可在设置向导或系统启动后,默认授予联发科代理应用定位权限。
  • 可通过 PackageManager 的grantRuntimePermission() API 授予定位权限。
  1. 如何在启动器(Launcher)中隐藏代理应用图标?
  • 修改vendor/mediatek/proprietary/packages/apps/GnssVisibilityControl/NonFrameworkLbs/AndroidManifest.xml
  • 移除其中的<category android:name="android.intent.category.LAUNCHER" />配置项。
  1. 若代理应用包名变更,GPS 驱动中需要更新哪些内容?
  • 请更新以下两处代码,将联发科包名替换为新名称:

    • 文件路径:vendor/mediatek/proprietary/hardware/connectivity/gps/mtk_mnld/mnld_entity/src/mnld.c

      const char nfw_app_name_list[MNLD_NFW_USER_NUM][MNLD_NFW_USER_NAME_LEN] = {"com.mediatek.gnss.nonframeworklbs"};

  • 以及代码中的:.proxyAppPackageName = "com.mediatek.gnss.nonframeworklbs",

相关推荐
码界奇点1 小时前
基于Django与Ansible的智能运维管理系统设计与实现
运维·python·django·毕业设计·ansible·源代码管理
源码技术栈1 小时前
基于微服务springcloud云智慧工地物联网SaaS平台源码(监管大屏+移动APP)
物联网·spring cloud·微服务·app·源码·智慧工地·数据大屏
gihigo19981 小时前
基于MATLAB实现图像缺陷检测、清晰度评估及自动对焦功能
开发语言·matlab
克喵的水银蛇1 小时前
Flutter 通用网络图片封装实战:带占位 / 错误 / 缓存的 CachedImageWidget
开发语言·前端·javascript
卿雪1 小时前
MySQL【索引】:索引的概念与分类
java·数据库·python·mysql·adb·golang
资深web全栈开发1 小时前
从零构建即时通讯系统:Go + Vue3 实战指南
开发语言·后端·golang·im 通许
艾莉丝努力练剑1 小时前
【Python基础:语法第三课】Python 函数详解:定义、参数、返回值与作用域
服务器·人工智能·windows·python·pycharm
小杍随笔1 小时前
【Zed 编辑器配置全攻略:自动保存、Prettier、终端字体与格式化设置一步到位】
开发语言·rust·编辑器
团圆吧1 小时前
md2pdf.py:高效 Markdown 转 PDF 全能工具
python·pdf·tensorflow