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

Android多product flavors场景下定位权限添加后未生效问题求助

问题解决方案

按照以下步骤依次排查即可解决报错:

  • 步骤1:补全对应flavor的Manifest权限声明
    你当前贴出的带地图功能的flavor的Manifest中仅声明了网络权限,并未添加定位权限,请在该Manifest的<manifest>根节点下、<application>节点外添加以下配置:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 若存在Manifest合并冲突,权限被其他配置覆盖,可添加tools:node属性强制保留 -->
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="replace" /> -->

如果使用了tools命名空间,需要在Manifest根节点添加命名空间声明:xmlns:tools="http://schemas.android.com/tools"

  • 步骤2:确认Manifest存放路径正确
    多product flavor的专属Manifest必须放到对应flavor的资源目录下才能被正确合并,比如你的地图flavor名为amb,则Manifest路径必须为src/amb/AndroidManifest.xml,路径错误会导致配置不生效。
  • 步骤3:验证Manifest合并结果
    构建一次对应flavor的安装包后,打开路径app/build/intermediates/merged_manifest/[对应flavor构建变体]/out/AndroidManifest.xml,查看合并后的文件中是否存在你添加的定位权限,确认没有被其他配置移除。
  • 步骤4:添加运行时权限校验逻辑
    Android 6.0及以上版本中,定位属于危险权限,仅在Manifest声明不生效,必须在调用map.isMyLocationEnabled = true之前做运行时权限校验,示例代码如下:
// 调用定位相关接口前先校验权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
    || ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    // 已获得权限,可正常调用接口
    map.isMyLocationEnabled = true
} else {
    // 未获得权限,发起动态权限申请
    ActivityCompat.requestPermissions(this, 
        arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION), 
        1001
    )
}

// 重写权限申请结果回调,用户同意权限后再调用相关接口
override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (requestCode == 1001 && grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
        map.isMyLocationEnabled = true
    }
}

如果已经做了完整的权限校验但Android Studio依然报错,属于lint静态检查误报,可以在调用相关接口的方法上添加@SuppressLint("MissingPermission")注解屏蔽报错。

  • 步骤5:确认当前选择的构建变体正确
    Android Studio顶部的构建变体选择栏要切换到带地图功能的flavor对应的变体,否则你给对应flavor添加的配置不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:04