鸿蒙OS之用户定位及地图服务

Location Kit 定位服务

位置子系统使用多种定位技术提供服务,如GNSS定位、基站定位、WLAN/蓝牙定位(基站定位、WLAN/蓝牙定位后续统称“网络定位技术”);通过这些定位技术,无论用户设备在室内或是户外,都可以准确地确定设备位置。

运作机制

位置能力作为系统为应用提供的一种基础服务,需要应用在所使用的业务场景,向系统主动发起请求,并在业务场景结束时,主动结束此请求,在此过程中系统会将实时的定位结果上报给应用

开发步骤

1:配置权限

// 位置信息
{
  "name": "ohos.permission.APPROXIMATELY_LOCATION",
  "reason": '$string:permission_reason_location',
  "usedScene": {}
},
{
  "name": "ohos.permission.LOCATION",
  "reason": '$string:permission_reason_location',
  "usedScene": {}
},

2:用户手动授权

//需要申请的权限名
private permissions: Permissions[] =  ['ohos.permission.APPROXIMATELY_LOCATION','ohos.permission.LOCATION'];
//调用用户授权方法,同时利用try-catch捕获异常
try {
  await PermissionManager.requestPermissions(this.permissions)
  promptAction.showToast({ message: '权限获取成功' })
} catch (e) {
  promptAction.showToast({ message: '权限获取失败' })
}
//封装获取权限的方法
async requestPermissions(permissions: Permissions[]) {
  // 程序控制访问对象
  const atManager = abilityAccessCtrl.createAtManager()
  //   核心Api,拉起弹框,向用户申请权限,返回值是authResults: Array<number>和permissions: Array<string>;
  const requestResult = await atManager.requestPermissionsFromUser(getContext(), permissions)

  const isAuth = requestResult.authResults.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
  // const isAuth = Promise.all(requestResult.authResults)
  // 利用promise.resolve和promise.reject来返回结果
  return isAuth === true ? Promise.resolve(permissions + "已经授权") : Promise.reject(permissions + "未授权")
}

3、获取用户定位信息

//导入geoLocationManager模块,所有与基础定位能力相关的功能API,都是通过该模块提供的。
import { geoLocationManager } from '@kit.LocationKit';
// 获取经纬度
const location = await geoLocationManager.getCurrentLocation()
//经度
let latitude = location.latitude
//纬度
let longitude = location.longitude

// 逆地理编码服务,将坐标转换为地理描述,变成获取地理位置的详细信息
// 注意:window模拟器不支持,需要用真机进行测试
const geoAddress = await geoLocationManager.getAddressesFromLocation({
    locale: 'zh', //
    latitude: location.latitude,
    longitude: location.longitude,
    maxItems: 1
  })
  return geoAddress//geoAddress
}

开启地图服务Map Kit

Map Kit(地图服务)是HarmonyOS生态下的一个地图服务,为开发者提供强大而便捷的地图能力,助力全球开发者实现个性化地图呈现、地图搜索和路线规划等功能,轻松完成地图构建工作。您可以轻松地在HarmonyOS应用/元服务中集成地图相关的功能,全方位提升用户体验。

开启前准备

开启地图服务需要配置AppGallery Connect,并手动进行签名

  • p12 文件
  • csr 文件
  • cer 文件-调试证书
  • p7b 文件-调试证书

首先.p12文件

菜单栏->build->Generate Key and CSR->

AGC开启地图服务

开通地图服务

  1. 登录AppGallery Connect网站,选择“我的项目”。

  2. 在项目列表中找到您的项目,在项目下的应用列表中选择需要打开地图服务的应用。

  3. 选择API管理,找到地图服务开关,打开开关。

配置应用包和证书

修改项目的 module.json5 中的包名

开启地图

MapComponent是地图组件,用于在您的页面中放置地图。

MapComponentController是地图组件的主要功能入口类,用来操作地图

接口说明

接口

接口描述

MapComponent

地图组件。

mapCommon.MapOptions

地图初始化参数。

AsyncCallback<map.MapComponentController>

地图初始化的回调。

开发步骤

//导入相关模块
import { MapComponent, mapCommon, map } from '@kit.MapKit';
import { AsyncCallback } from '@kit.BasicServicesKit';

代码实现:

@Entry
@Component
struct HuaweiMapDemo {
  private TAG = "HuaweiMapDemo";
  private mapOption?: mapCommon.MapOptions;
  private callback?: AsyncCallback<map.MapComponentController>;
  private mapController?: map.MapComponentController;

  aboutToAppear(): void {
    // 地图初始化参数,设置地图中心点坐标及层级
    this.mapOption = {
      position: {
        target: {         
          latitude: 39.9,
          longitude: 116.4
        },
        zoom: 10
      }
    };

    // 地图初始化的回调
    this.callback = async (err, mapController) => {
      if (!err) {
        // 获取地图的控制器类,用来操作地图
        this.mapController = mapController;
        this.mapController.on("mapLoad", () => {
          console.info(this.TAG, `on-mapLoad`);
        });
      }
    };
  }

  build() {
    Stack() {
        // 调用MapComponent组件初始化地图
        MapComponent({ mapOptions: this.mapOption, mapCallback: this.callback }).width('100%').height('100%');
    }.height('100%')
  }
}

 ​​​​​​​运行效果图:

注意:该效果需要在真机上运行才能显示,同时需要注意权限、地图服务及签名配置是否成功 

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值