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开启地图服务
开通地图服务
- 登录AppGallery Connect网站,选择“我的项目”。
- 在项目列表中找到您的项目,在项目下的应用列表中选择需要打开地图服务的应用。
- 选择API管理,找到地图服务开关,打开开关。
配置应用包和证书
修改项目的 module.json5 中的包名
开启地图
MapComponent是地图组件,用于在您的页面中放置地图。
MapComponentController是地图组件的主要功能入口类,用来操作地图
接口说明
接口 | 接口描述 |
---|---|
地图组件。 | |
地图初始化参数。 | |
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%')
}
}
运行效果图:
注意:该效果需要在真机上运行才能显示,同时需要注意权限、地图服务及签名配置是否成功