- 作者:老汪软件技巧
- 发表时间:2024-08-24 21:07
- 浏览量:
1 前言
“我的位置”功能在表象上或许给人以简单之感,但从专业角度深入剖析,其蕴含着极为可观的信息量与巨大潜力。此功能绝非仅仅局限于作为一个单纯显示用户当前所处地点的标识,而确切地说是连接用户与周边世界、实现个性化服务的关键纽带。无论是在日常出行导航领域,还是社交互动方面;无论是便捷的生活服务范畴,还是丰富的旅游体验场景,“我的位置”在各个领域的应用程序中均发挥着至关重要的专业作用。其背后所涉及的技术原理、丰富的应用场景以及对用户生活产生的深远影响,均值得专业人士进行深入探讨与研究。
2 不同类型应用中的使用场景2.1 导航类应用2.2 社交类应用2.3 生活服务类应用2.4 旅游类应用
当然,“我的位置” 这项功能的应用绝不仅仅局限于上文所提及的那些场景。实际上,它在更多的领域中同样能够发挥出至关重要的作用。比如在救援行动中,当人们遭遇紧急情况时,准确的 “我的位置” 信息可以迅速传递给救援人员,使得救援行动能够更加高效地展开。无论是在山区的迷路救援、海上的遇险救助,还是城市中的突发事件应对,“我的位置” 都能成为连接受困者与救援力量的关键纽带,为生命的救援争取宝贵的时间。它如同黑暗中的一盏明灯,为处于困境中的人们指引着希望的方向,让救援行动更加精准、及时、有效。
3 前期准备3.1 配置Client ID
实际应用开发中,当你打算使用地图服务(Map Kit)时,首先需要在AppGallery Connect平台上创建相应的应用。在创建完成后,要准确地获取“项目设置 > 常规 > 应用”的Client ID,这里需要特别注意的是,一定不能获取项目的Client ID,两者有着明确的区分。获取正确的Client ID之后,接下来要在工程entry模块的module.json5文件中进行特定的操作。具体而言,就是要在这个文件中新增metadata,将其配置为name属性设置为client_id,value属性为获取到的Client ID值。
{
"module": {
...
"metadata": [
{
"name": "client_id",
"value": "xxxxxx"
}
]
}
}
3.2 开通地图服务
当完成Client ID的配置工作后,接下来还需要在AppGallery Connect平台该应用的“项目设置 > API管理”板块中打开地图服务开关。
3.3 添加公钥指纹
除了满足以上两个条件,还需要为应用添加公钥指纹,才能够确保地图服务(Map Kit)在应用中正常使用和发挥其强大的功能。
4 开发步骤
目前有两种方式可用于在地图上显示我的位置。推荐采用安全控件LocationButton方式,此方式能够临时获取精准定位权限,无需进行权限弹框授权确认。另一种方式则是申请授权方式,该方式需要动态向用申请设备位置信息ohos.permission.LOCATION和设备模糊位置信息ohos.permission.APPROXIMATELY_LOCATION两个权限。
4.1 使用安全控件方式
安全控件是一种可融入应用页面,实现用户点击自动授权,而无需弹窗授权。相较于动态申请权限方式,安全控件可基于场景化授权,简化开发者和用户的操作,优点如下:
位置控件(LocationButton)是目前系统提供的安全控件之一,该控件对应精准定位特权。应用集成位置控件后,用户点击该控件,无论应用是否申请过或者被授予精准定位权限,都会在本次前台期间获得精准定位的授权,可以调用位置服务获取精准定位。
使用LocationButton可使用默认创建带有图标、文本、背景的位置按钮,也可以通过创建指定LicationButtonOptions元素的位置按钮。
// 默认创建带有图标、文本、背景的位置按钮
LocationButton()
// 创建包含指定元素的位置按钮
LocationButton(option: LocationButtonOptions)
/**
* 指定元素的位置按钮
*/
declare interface LocationButtonOptions {
/**
* 设置位置按钮的图标风格。
* 不传入该参数表示没有图标,icon和text至少存在一个。
* LocationIconStyle.FULL_FILLED 填充样式图标
* LocationIconStyle.LINES 线条样式图标
*/
icon?: LocationIconStyle;
/**
* 设置位置按钮的文本描述。
* 不传入该参数表示没有文字描述,icon和text至少存在一个。
* LocationDescription.CURRENT_LOCATION 当前位置
* LocationDescription.ADD_LOCATION 添加位置
* LocationDescription.SELECT_LOCATION 选择位置
* LocationDescription.SHARE_LOCATION 共享位置
* LocationDescription.SEND_LOCATION 发送位置
* LocationDescription.LOCATING 定位
* LocationDescription.LOCATION 位置
* LocationDescription.SEND_CURRENT_LOCATION 发送实时位置
* LocationDescription.RELOCATION 重定位
* LocationDescription.PUNCH_IN 大卡定位
* LocationDescription.CURRENT_POSITION 所在位置
*/
text?: LocationDescription;
/**
* 设置位置按钮的背景样式。
* 不传入该参数,系统默认提供Capsule类型按钮。
* ButtonType.Capsule 胶囊型按钮
* ButtonType.Circle 圆形按钮
* ButtonType.Normal 普通按钮
*/
buttonType?: ButtonType;
}
LocationButton组件不支持通用属性,仅支持安全控件通用属性,如设置安全控件上图标尺寸iconSize();设置安全控件上图标和文字分布的方向layoutDirection();设置绝对定位,设置安全控件的左上角相对于父容器左上角的便宜位置position();设置安全控件相对于自身布局位置的坐标偏移offset()等,具体可参见安全控件通用属性。
LocationButton组件不支持通用事件,仅支持onClick(event: (event: ClickEvent, result: LocationButtonOnClickResult) => void)事件。
/**
* 位置权限的授权结果
*/
declare enum LocationButtonOnClickResult {
/**
* 位置按钮点击后授权成功。
*/
SUCCESS = 0,
/**
* 位置按钮点击后位置权限授权失败。
*/
TEMPORARY_AUTHORIZATION_FAILED = 1
}
使用安全控件LocationButton可以在点击安全控件后,开启“我的位置”功能。
LocationButton()
.onClick((event: ClickEvent, result: LocationButtonOnClickResult) => {
console.log(`[LearningMapKit]位置权限的授权结果:${result}`);
this.myLocationBtnStatus = true;
// 启用我的位置图层
this.mapController?.setMyLocationEnabled(true);
// 启用我的位置按钮
this.mapController?.setMyLocationControlsEnabled(true);
})
4.2 使用用户授权方式
使用用户授权方式,需要先申请ohos.permission.LOCATION和ohos.permission.APPROXIMATELY_LOCATION
权限。