欢迎到专业群( HBuilderX技术交流群 ) 咨询,群中有相关专业的管理员和群友。
根据你的描述,Android 11 及以上系统调用 plus.android.requestPermissions 请求定位权限后,返回 deniedAlways,并且进入系统设置“应用权限”页面时找不到位置权限选项。这通常意味着打包后的 APK 清单文件中根本没有声明 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION 这两个权限,即便你在代码中动态请求,系统也不会展示授权弹窗并直接标记为永久拒绝。
? 原因分析
plus.android.requestPermissions 请求任何权限的前提是 APK 的 AndroidManifest.xml 中已静态声明该权限。如果没有声明,请求会立即失败并进入 deniedAlways,系统设置里自然也看不到该权限入口。
- 在低版本 HBuilderX 或旧工程中,可能因为配置了定位/地图模块而自动带上了位置权限;但升级 HBuilderX 或调整工程后,如果没有在 manifest.json 中显式勾选,打包时就会漏掉这两个权限声明。
- 你提到“9 版本以下都可以正常获取”,大概率是旧版本的模块自动配置策略发生了变化,现在需要手动确认。
✅ 解决方法
1. 在 manifest.json 中显式勾选位置权限
打开项目的 manifest.json,切换到「App模块权限配置」,找到「Android权限配置」部分,同时勾选以下两项:
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
(即使你只用粗略位置,Android 11+ 也建议两个都勾选,保证兼容性)
2. 重新打包
- 如果是标准基座调试,请制作自定义调试基座(菜单「运行」->「制作自定义调试基座」)后再真机运行,标准基座可能不包含你手动添加的权限。
- 如果是正式发版,直接进行云打包(发行 -> 原生App-云打包),确保打包后的 APK 包含了上述权限声明。
3. 清理并重新安装应用
部分系统可能缓存了旧权限状态,卸载 App 后重新安装新的 APK,再进入系统设置即可看到位置权限选项。
? 补充说明
- 如果你的应用同时需要后台定位(Android 10+ 的后台位置权限),还需额外勾选
android.permission.ACCESS_BACKGROUND_LOCATION,并且不能只用“仅在使用中允许”,需要引导用户选择“始终允许”。
- 如果你使用了高德或百度地图模块,它们通常会自动带上位置权限。如果之前用了地图模块、后来移除了,则位置权限也会丢失,需要手动补上。
官方权限配置文档参考:App模块(三方SDK)的权限列表 以及 引导用户授权定位权限
如果确认 manifest 已勾选且打包后问题依旧,请检查是否使用了离线打包,需要在离线打包的 AndroidManifest.xml 中手动添加:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
完成以上步骤后,plus.android.requestPermissions 就能正常弹出系统授权框了。
1 个回复
Ask小助手 - Ask社区AI助手
根据你的描述,Android 11 及以上系统调用
plus.android.requestPermissions请求定位权限后,返回deniedAlways,并且进入系统设置“应用权限”页面时找不到位置权限选项。这通常意味着打包后的 APK 清单文件中根本没有声明ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION这两个权限,即便你在代码中动态请求,系统也不会展示授权弹窗并直接标记为永久拒绝。? 原因分析
plus.android.requestPermissions请求任何权限的前提是 APK 的AndroidManifest.xml中已静态声明该权限。如果没有声明,请求会立即失败并进入deniedAlways,系统设置里自然也看不到该权限入口。✅ 解决方法
1. 在 manifest.json 中显式勾选位置权限
打开项目的
manifest.json,切换到「App模块权限配置」,找到「Android权限配置」部分,同时勾选以下两项:android.permission.ACCESS_FINE_LOCATIONandroid.permission.ACCESS_COARSE_LOCATION(即使你只用粗略位置,Android 11+ 也建议两个都勾选,保证兼容性)
2. 重新打包
3. 清理并重新安装应用
部分系统可能缓存了旧权限状态,卸载 App 后重新安装新的 APK,再进入系统设置即可看到位置权限选项。
? 补充说明
android.permission.ACCESS_BACKGROUND_LOCATION,并且不能只用“仅在使用中允许”,需要引导用户选择“始终允许”。官方权限配置文档参考:App模块(三方SDK)的权限列表 以及 引导用户授权定位权限
如果确认 manifest 已勾选且打包后问题依旧,请检查是否使用了离线打包,需要在离线打包的
AndroidManifest.xml中手动添加:完成以上步骤后,
plus.android.requestPermissions就能正常弹出系统授权框了。要回复问题请先登录或注册
公告
更多>相关问题