You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Fused Api检查位置设置时vivo V7出现ApiException 10错误

解决vivo V7上Google Fused Location API checkLocationSettings抛出ApiException 10的问题

这个问题我之前碰到过类似的场景,核心原因大多是vivo的定制ROM(Funtouch OS)对Google Play Services(GMS)做了裁剪或兼容性修改,导致checkLocationSettings这个API在该设备上没有被正确实现——错误码10对应的就是API_NOT_IMPLEMENTED,直白来说就是当前设备平台不支持这个接口。

可能的原因拆解

  • vivo V7的系统可能没有预装完整的GMS组件,或者对GMS的位置相关模块做了限制,使得SettingsClient.checkLocationSettings无法正常调用。
  • 虽然你用原生位置提供器测试功能正常,但Fused API的位置设置检查逻辑依赖GMS的特定服务,这部分在vivo设备上被阻断了,和核心位置获取能力是分离的。
  • 设备上的Google Play Services版本过低的可能性相对小,毕竟你在其他设备上运行正常。

可行的解决方案

1. 针对异常做降级处理

直接捕获ApiException并判断错误码为10的情况,跳过位置设置检查,直接请求位置更新(既然你已经验证过位置提供器可以正常工作,说明核心位置服务没问题,只是设置检查这一步不支持)。示例代码如下:

mSettingsClient?.checkLocationSettings(mLocationSettingsRequest)
    ?.addOnSuccessListener {
        // 位置设置符合要求,正常启动位置更新
        startLocationUpdates()
    }
    ?.addOnFailureListener { exception ->
        if (exception is ApiException) {
            when (exception.statusCode) {
                LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> {
                    // 常规场景:引导用户修改位置设置
                }
                10 -> {
                    // 适配vivo V7:跳过检查直接启动位置更新
                    startLocationUpdates()
                }
                else -> {
                    // 其他错误场景处理
                }
            }
        }
    }

2. 回退到原生位置状态检查

如果不想依赖Fused API的checkLocationSettings,可以用原生LocationManager手动检查位置服务状态,替代GMS的检查逻辑:

val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
val isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
val isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)

if (isGpsEnabled || isNetworkEnabled) {
    // 位置服务已开启,启动位置更新
    startLocationUpdates()
} else {
    // 引导用户跳转到位置设置页面开启服务
    val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
    startActivity(intent)
}

3. 辅助检查GMS完整性

可以引导用户检查设备上的Google Play Services是否为最新版本,或者是否安装了完整的GMS套件。不过vivo部分机型默认没有预装GMS,需要用户手动安装GMS框架,这一步开发者无法强制控制,只能作为辅助提示。

4. 适配vivo系统的特殊设置

有些vivo设备的隐私保护或后台管理规则会阻止GMS访问位置设置信息,可以提示用户检查:

  • 应用的位置权限是否完全开启(虽然你测试正常,但再确认下)
  • 是否在「i管家」中限制了应用或GMS的后台运行权限
  • 是否开启了「隐私空间」等功能,导致位置服务被隔离

内容的提问来源于stack exchange,提问作者darthvish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:21:58