开发 HarmonyOS NEXT 定位SDK 开发指南 配置工程

配置工程 最后更新时间: 2024年09月04日

使用定位 SDK 之前,需要在 config.json 文件中进行相关权限设置,确保定位功能可以正常使用。

第一步,配置 module.json5

首先,声明权限

...
"requestPermissions": [
      {
        "name": "ohos.permission.APPROXIMATELY_LOCATION",
        "reason": "$string:Harmony_location_permission_reason",
        "usedScene": {
          "abilities": [
            "Harmony_location_demoAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.LOCATION",
        "reason": "$string:Harmony_location_permission_reason",
        "usedScene": {
          "abilities": [
            "Harmony_location_demoAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.LOCATION_IN_BACKGROUND",
          "reason": "$string:Harmony_location_permission_reason",
        "usedScene": {
          "abilities": [
            "Harmony_location_demoAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.INTERNET",
        "reason": "$string:Harmony_location_permission_reason",
        "usedScene": {
          "abilities": [
            "Harmony_location_demoAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.KEEP_BACKGROUND_RUNNING",
        "reason": "$string:Harmony_location_permission_reason",
        "usedScene": {
          "abilities": [
            "Harmony_location_demoAbility"
          ],
          "when": "always"
        }
      }
    ]
...

第二步,在工程的oh-package.json5文件中添加定位开发包

从 ohpm 仓库获取定位包,依次添加依赖

"dependencies": {
    "@amap/amap_lbs_common": ">=1.0.4",
    "@amap/amap_lbs_location": ">=1.0.3"
}

第三步,初始化定位

1

导入所需模块

import { AMapLocationManagerImpl } from '@amap/amap_lbs_location';
import { AMapPrivacyAgreeStatus, AMapPrivacyInfoStatus, AMapPrivacyShowStatus } from '@amap/amap_lbs_common';
import { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
import abilityAccessCtrl, { PermissionRequestResult } from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';
2

设置 Key(获取Key),并初始化隐私政策,创建 AMapLocationManagerImpl

locationManger?: AMapLocationManagerImpl; 
private context = getContext(this);

onPageShow() {
  //设置Key
  AMapLocationManagerImpl.setApiKey("您的key");
  
  //初始化隐私政策
  AMapLocationManagerImpl.updatePrivacyShow(AMapPrivacyShowStatus.DidShow, AMapPrivacyInfoStatus.DidContain, getContext(this))
  AMapLocationManagerImpl.updatePrivacyAgree(AMapPrivacyAgreeStatus.DidAgree, getContext(this))
  
  //创建AMapLocationManagerImpl
  this.locationManger = new AMapLocationManagerImpl(this.context);
}
3

动态申请相关权限

  reqPermissionsFromUser(permissions: Array<Permissions>): void {
    let context: Context = getContext(this) as common.UIAbilityContext;
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
    atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      for (let i = 0; i < length; i++) {
        if (grantStatus[i] === 0) {
          // 用户授权,可以继续访问目标操作
        } else {
          // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
          return;
        }
      }
      // 授权成功
    }).catch((err: BusinessError) => {
      console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
    })
  }
提示

onPageShow生命周期函数中调用该方法

this.reqPermissionsFromUser([
  'ohos.permission.APPROXIMATELY_LOCATION',
  'ohos.permission.LOCATION',
]);

下面就可以开始请求相关定位信息,如:连续定位

4

完整代码示例

import { AMapLocationManagerImpl } from '@amap/amap_lbs_location';
import { AMapPrivacyAgreeStatus, AMapPrivacyInfoStatus, AMapPrivacyShowStatus } from '@amap/amap_lbs_common';
import { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
import abilityAccessCtrl, { PermissionRequestResult } from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';

@Entry
@Component
struct Index {
  locationManger?: AMapLocationManagerImpl;
  private context = getContext(this);

  onPageShow() {
    //设置Key
    AMapLocationManagerImpl.setApiKey("您的key");

    //初始化隐私政策
    AMapLocationManagerImpl.updatePrivacyShow(AMapPrivacyShowStatus.DidShow, AMapPrivacyInfoStatus.DidContain, getContext(this))
    AMapLocationManagerImpl.updatePrivacyAgree(AMapPrivacyAgreeStatus.DidAgree, getContext(this))

    //创建AMapLocationManagerImpl
    this.locationManger = new AMapLocationManagerImpl(this.context);
    //获取权限
    this.reqPermissionsFromUser([
      'ohos.permission.APPROXIMATELY_LOCATION',
      'ohos.permission.LOCATION',
    ]);
  }

  reqPermissionsFromUser(permissions: Array<Permissions>): void {
    let context: Context = getContext(this) as common.UIAbilityContext;
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
    atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      for (let i = 0; i < length; i++) {
        if (grantStatus[i] === 0) {
          // 用户授权,可以继续访问目标操作
        } else {
          // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
          return;
        }
      }
      // 授权成功
    }).catch((err: BusinessError) => {
      console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
    })
  }

  build() {
  }
}

返回顶部 示例中心 常见问题 智能客服 公众号
二维码