文章目录
前言
- 与传统手机相比,智能手机最大的区别不仅在于它能快速连接网络,还在户外活动中使用GPS定位,指南北方向;
- 跑步时,可以用来计步;爬山时可以显示海拔;你可以用相机拍照等等。
- 所有这些都归功于
手机内置丰富的传感器
。充分利用传感器可以发挥手机更强大的功能,促进手机App适应更多的应用领域。
目标
- 通过本章的学习,你可以理解:
- HarmonyOS中的
传感器分类
,各种传感器基本作用
; - 掌握
基本传感器
如使用方向或运动传感器; - 掌握
相机组件
拍照的方法; - 掌握
GPS传感器
获取位置信息的方法。
传感器概述
- HarmonyOS传感器是
应用程序访问底层硬件传感器
的一种设备抽象概念。开发者根据传感器提供的Sensor API
,可以查询设备上的传感器
,订阅传感器数据
,并根据传感器数据定制相应的算法
,开发指南针、运动健康、游戏等各种应用。 - 根据传感器的用途,传感器可以分为
六大类
:运动传感器、环境传感器、方向传感器、光传感器、健康传感器等传感器(如霍尔传感器)),每种类型的传感器都包含不同类型的传感器。某种类型的传感器可能是单一的物理传感器或由多个物理传感器组成
。
运动传感器
加速传感器
:主要用来检测手机的运动状态
,测量三个物理轴(x、y 和 z)单位施加在设备上的加速度(包括重力加速度) : m/s2。重
力传感器
:主要用来测量重力
,测量三个物理轴(x、y 和 z)设备上施加的重力加速度,单位 : m/s2。陀螺仪传感器
:主要用来测量手机旋转的角速度
,测量三个物理轴(x、y 和 z)上,设备的旋转角速度,单位 : rad/s。计步传感器
:用于提供用户行走步数据
,用户行走步数可以统计。
运动传感器工作原理
主流传感器表示
- SENSOR_TYPE_ACCELEROMETER:加速传感器;
- SENSOR_TYPE_GRAVITY:重力传感器;
- SENSOR_TYPE_GYROSCOPE:陀螺仪传感器;
- SENSOR_TYPE_PEDOMETER:计步器传感器;
- SENSOR_TYPE_AMBIENT_TEMPERATURE:环境温度传感器;
- SENSOR_TYPE_MAGNETIC_FIELD:磁场传感器。
运作机制
HarmonyOSOpenHarmony传感器
包括以下四个模块:Sensor API、Sensor Framework、 Sensor Service、HD_IDL层。Sensor API
:提供传感器的基础API,主要包括查询传感器列表、订阅/取消传感器数量 简化应用开发,执行控制命令等。Sensor Framework
:主要实现传感器的订阅管理、数据通道的创建、销毁、订阅和取消 订阅,实现与SensorService的通信。Sensor Service
:主要实现HD_IDL层数据接收、分析、分发、前后台战略控制 设备Sensor的管理;Sensor权限控制等。HD_IDL层
:对不同的FIFO、策略选择频率;适应不同的设备。
核心模块
接口说明
-
HarmonyOS传感器提供的功能包括:
查询传感器列表
、订阅/取消订阅传感器数据
、查询传感器最小采样时间间隔
、执行控制命令
。- 以
订阅方向类别
以传感器数据为例: - sensor.subscribeCompass(OBJECT):订阅罗盘数据变化。同一应用程序,
多次点击调用时,会覆盖前面的调用效果
,即最后一次调用生效。
- 以
开发步骤
- 如果传感器权限列表中的传感器在设备上使用,
要求相应的权限
,只有开发者才能获得传感器数据。
-
需要开发人员config.json里面
配置权限
:"reqPermissions": [ { "name": "ohos.permission.GYROSCOPE", "reason": "", "usedScene": { "ability": [ ".MainAbility" ], "when": "inuse" } } ]
使用传感器
- 以使用
方向类别的传感器
为例,运动类、环境类、健康类等类别的传感器使用方法类似。 步骤如下: 获取
待订阅数据的传感器;创建传感器回调
;订阅
传感器数据;接收并处理
传感器数据;取消订阅
传感器数据。
方向传感器调用示例
- 引入方向类传感器对象
import sensor from '@system.sensor';
- 罗经数据订阅
onInit() {
sensor.subscribeCompass({
success: function(ret) {
console.log('get data direction:' + ret.direction);
},
fail: function(data, code) {
console.error('subscribe compass fail, code: ' + code + ', data: ' + data);
},
});
},
- 罗经数据取消
onDestroy() {
sensor.unsubscribeCompass();
console.log('cancel data direction collection');
}
相机调用
- 相机:
HarmonyOS相机模块
支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问
、操作
和新功能开发
,最常见的操作如:预览、拍照、连拍和录像等。
基本概念
相机静态能力
:用于描述相机的固有能力的一系列参数
,比如朝向、支持的分辨率等信息。物理相机
:物理相机就是独立的实体摄像头设备
。物理相机ID
是用于标志每个物理摄像头的唯一字串
。逻辑相机
:逻辑相机是多个物理相机组合出来的抽象设备
,逻辑相机通过同时控制多个物理相机设备来完成相机某些功能,如大光圈、变焦等功能。逻辑摄像机ID是一个唯一的字符串,标识多个物理摄像机的抽象能力。帧捕获
:相机启动后对帧的捕获动作
统称为帧捕获。主要包含单帧捕获、多帧捕获、循环帧捕获。
主要接口
- 一个页面仅支持一个camera组件,提供预览、拍照功能。
<div class="container">
<camera flash="off" deviceposition="back" @error="cameraError" id="take">
</camera>
<button onclick="takephotos">拍照</button>
</div>
takephotos()
{
var params={
};
params.quality='high';
params.success=null;
params.fail=null;
params.complete=null;
this.$element('take').takePhoto(params)
},
camera{
width: 300px;
height: 300px;
}
位置传感器-位置能力
移动终端设备
已经深入人们日常生活的方方面面,如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的活动,都离不开定位用户终端设备的位置
。- 当用户处于这些丰富的使用场景中时,
系统的位置能力
可以提供实时准确的位置数据
。对于开发者,设计基于位置体验的服务,也可以使应用的使用体验更贴近每个用户。 - 当应用在实现
基于设备位置的功能
时,如:驾车导航,记录运动轨迹等,可以调用该模块的API接口
,完成位置信息的获取。
基本概念
位置能力
用于确定用户设备在哪里
,系统使用位置坐标标示设备的位置,并用多种定位技术提供服务,如GNSS定位
、基站定位
、WLAN/蓝牙定位
(基站定位、WLAN/蓝牙定位后续统称“网络定位技术”)。通过这些定位技术,无论用户设备在室内或是户外,都可以准确地确定设备位置。坐标
:系统以1984年世界大地坐标系统
为参考,使用经度、纬度数据描述地球上的一个位置;GNSS定位
:基于全球导航卫星系统
,包含:GPS、GLONASS、北斗、Galileo等,通过导航卫 星,设备芯片提供的定位算法,来确定设备准确位置,定位精度高;基站定位
:根据设备当前驻网基站和相邻基站的位置
,估算设备当前位置。此定位方式的定位 结果精度相对较低,并且需要设备可以访问蜂窝网络;WLAN、蓝牙定位
:根据设备可搜索到的周围WLAN、蓝牙设备位置,估算设备当前位置。
运作机制
位置能力
作为系统为应用提供的一种基础服务,需要应用在所使用的业务场景,向系统主动发起请求
,并在业务场景结束时,主动结束此请求
,在此过程中系统会将实时的定位结果上报给应用。使用设备的位置能力
,需要用户进行确认并主动开启位置
开关
。如果位置开关没有开启,系统不会向任何应用提供位置服务。设备位置信息属于用户敏感数据
,所以即使用户已经开启位置开关,应用在获取设备位置前仍需向用户申请位置访问权限。在用户确认允许后,系统才会向应用提供位置服务。
获取设备的位置信息
- 开发者可以
调用HarmonyOS位置相关接口
,获取设备实时位置,或者最近的历史位置。 - 对于位置敏感的应用业务,
建议获取设备实时位置信息
。如果不需要设备实时位置信息,并且希望尽可能的节省耗电,开发者可以考虑获取最近的历史位置。
接口说明
-
支持类型
- 参数说明
开发步骤
- 应用在使用系统能力前,需要
检查是否已经获取用户授权访问设备位置信息
。如未获得授权,可以向用户申请需要的位置权限。
-
系统提供的定位权限有:
- ohos.permission.LOCATION
- ohos.permission.LOCATION_IN_BACKGROUND
-
访问设备的位置信息,必须申请ohos.permission.LOCATION权限,并且获得用户授权。
-
如果应用在后台运行时也需要访问设备位置,除需要将应用声明为允许后台运行外,还必须申请ohos.permission.LOCATION_IN_BACKGROUND权限,这样应用在切入后台之后,系统可以继续上报位置信息。
-
开发者可以在应用config.json文件中
声明所需要的权限
,示例代码如下:{ "reqPermissions": [{ "name": "ohos.permission.LOCATION", "reason": "$string:reason_description", "usedScene": { "ability": ["com.myapplication.LocationAbility"], "when": "inuse" }, { ... } ] }
- 为了使用位置传感器,需要引入头文件system.geolocation’,获取位置管理对象geolocation’。
import geolocation from '@system.geolocation';
- 在页面初始化回调函数或自定义函数中调用该对象的方法getLocation来获取位置信息
onInit(){
geolocation.getLocation({
success: function (data) {
console.log('success get location data. latitude:' +data.latitude);},
fail: function (data, code) {
console.log('fail to get location. code:' + code + ', data:' + data);
},
}) }
本章总结
- 了解HarmonyOS设备上丰富的传感器设备,
- 掌握基本的传感器工作原理
- 能够调用常用传感器完成特定场景应用开发。
data. latitude:’ +data.latitude);}, fail: function (data, code) { console.log(‘fail to get location. code:’ + code + ‘, data:’ + data); }, }) }
# 本章总结
* 了解HarmonyOS设备上丰富的传感器设备,
* 掌握基本的传感器工作原理
* 能够调用常用传感器完成特定场景应用开发。