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
相关产品推荐
相关产品推荐

