今天在flutter鸿蒙适配过程中遇到一个问题,获取不到定位权限。 权限插件是在pubspec.ymal文件中通过dependency_overrides集成的
dependency_overrides:
permission_handler:
git:
url: https://gitcode.com/CPF-Flutter/flutter_permission_handler.git
path: permission_handler
申请权限代码如下
requestPermissions() async {
Map<Permission, PermissionStatus> statuses = await [ Permission.location, Permission.storage, ].request();
debugPrint(' 测试测试 :${statuses[Permission.location].toString()}');
}
但是打印内容如下
相同的代码我又测了iOS端显示如下
后来让AI分析一遍路径才发现是鸿蒙端权限没声明。 怪我鸿蒙原生不够熟😂😂😂,当然按理说这种配置问题应该报错才对啊。。
具体怎么申明也查了AI具体如下
在鸿蒙项目对应模块(如 entry)的 src/main/module.json5 文件中,将 requestPermissions 部分修改为如下格式:
json5
"requestPermissions": [
// 其他权限声明...
{
"name": "ohos.permission.APPROXIMATELY_LOCATION",
"reason": "$string:app_locate_reason", // 重点:引用一个字符串资源
"usedScene": {
// 填写你的 Ability 名称,通常是 "EntryAbility"
"abilities": ["EntryAbility"],
// "inuse" 表示仅在前台使用时授权,"always" 表示始终允许
"when": "inuse"
}
}
]
1. reason 字段:声明权限原因
reason 字段用于向用户解释为什么你的应用需要这个权限。它的值必须是引用 $string:xxx 的形式,不可以直接写字符串。
-
配置步骤:
2. usedScene 字段:描述使用场景
usedScene 对象用于声明权限的使用场景,其中 when 字段的取值如下:
"inuse": 表示仅在前台使用时授权,对应 iOS 的 "While Using"。"always": 表示始终允许,对应 iOS 的 "Always"。如果选择always,通常需要额外配合后台定位权限ohos.permission.LOCATION_IN_BACKGROUND。