uniapp 开发鸿蒙next 之权限

最近需要开发一个鸿蒙next的App,需要获取用户的定位权限。

1.配置对应的权限

直接贴代码了,在目录 你的项目/harmony-configs/entry/src/main/module.json5。 应用需要在module.json5配置文件的requestPermissions标签中声明权限。声明权限的文档中心

属性 含义 数据类型 取值范围
name 需要使用的权限名称。 字符串 必填,需为系统已定义的权限,取值范围请参考应用权限列表。
reason 申请权限的原因。 字符串

可选填写,该字段用于应用上架校验,当申请的权限为user_grant权限时必填,并且需要进行多语种适配。

使用string类资源引用。格式为$string: ***。

可参考权限使用理由的文案内容规范。

usedScene

权限使用的场景,该字段用于应用上架校验。包括abilities和when两个子项。

- abilities:使用权限的UIAbility或者ExtensionAbility组件的名称。

- when:调用时机。

对象

usedScene必填

- abilities:可选填写,可以配置为多个UIAbility或者ExtensionAbility名称的字符串数组。

- when:可选填写,但如果配置此字段,只能填入固定值inuse(使用时)、always(始终),不能为空。

当申请的权限为user_grant权限时建议填写。

代码样例

{
  "module" : {
    // ...
    "requestPermissions":[
      {
        "name" : "ohos.permission.PERMISSION1",
        "reason": "$string:reason",
        "usedScene": {
          "abilities": [
            "FormAbility"
          ],
          "when":"inuse"
        }
      },
      {
        "name" : "ohos.permission.PERMISSION2",
        "reason": "$string:reason",
        "usedScene": {
          "abilities": [
            "FormAbility"
          ],
          "when":"always"
        }
      }
    ]
  }
}

2.动态权限

动态权限需要先检测是否获取权限,uni.getAppAuthorizeSetting 需要在HbuilderX4.31以上的才能用,所以必须要用真机调试。贴代码

// #ifdef APP-HARMONY
const authorized = uni.getAppAuthorizeSetting()

if(authorized.locationAuthorized === 'authorized' ){

}
// #endif

3.定位权限配置

  • 鸿蒙系统 不支持系统定位,需要配置三方sdk,比如高德,同时设置坐标系参数为 type: 'gcj02'
  • map组件及定位等api

    新增于HBuilderX 4.26,仅4.31之前的版本使用下面的配置方式,4.31及之后的版本请在manifest.json可视化界面配置。

    map组件、getLocation、openLocation、chooseLocation依赖于地图厂商。目前仅支持腾讯地图,且此界面上显示的地图是通过webview加载的。由于目前页面使用的并非http协议,因此在申请腾讯地图key时需要将域名白名单留空以便地图能正确加载出来。后续在harmonyOS上页面会调整成以http方式加载,到时可以在腾讯地图控制台配置域名白名单。

    在uni-app项目内配置腾讯地图key:

  • 以源码方式打开项目manifest.json
  • 在manifest.json内放入如下内容:

  • {
        // ...
        "app-plus" : {
            // ...
            "distribute" : {
                // ...
                "sdkConfigs" : {
                    // ...
                    "maps" : {
                        "qqmap" : {
                            "key" : "XXX-XXXX-XXXX"
                        }
                    }
                }
            }
        },
        // ...
    }

4.请求定位 

// #ifdef APP-HARMONY
const authorized = uni.getAppAuthorizeSetting()

if(authorized.locationAuthorized === 'authorized' ){
    uni.getLocation({
	type: 'gcj02',
	success: function (res) {
		console.log('当前位置的经度:' + res.longitude);
		console.log('当前位置的纬度:' + res.latitude);
	}
});
}else { 
//打开 手机权限配置
uni.openAppAuthorizeSetting({
				success(e) {
					
				}
			})

}
// #endif

创作不易,请关注点赞收藏,感谢

你可能感兴趣的:(uniapp鸿蒙,uni-app,harmonyos,华为)