OpenHarmony应用开发零基础入门 课件 第8章 传感器与位置服务应用开发_第1页
OpenHarmony应用开发零基础入门 课件 第8章 传感器与位置服务应用开发_第2页
OpenHarmony应用开发零基础入门 课件 第8章 传感器与位置服务应用开发_第3页
OpenHarmony应用开发零基础入门 课件 第8章 传感器与位置服务应用开发_第4页
OpenHarmony应用开发零基础入门 课件 第8章 传感器与位置服务应用开发_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

倪红军OpenHarmony应用开发

零基础入门第八章传感器与位置服务应用开发8.1概述

8.2传感器的应用

8.3位置服务的应用倪红军制作8.1概述本节要点1.了解OpenHarmony平台支持的传感器及功能2.了解OpenHarmony平台位置服务的类别及功能倪红军制作8.1.1传感器传感器通常由敏感元件和转换元件组成,它是一种检测装置,能感受到被测量的信息,并能将检测感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求,它在自动检测和自动控制领域有很重要的应用。OpenHarmony平台支持的常用传感器及功能说明如表所示。倪红军制作8.1.1传感器传感器通常由敏感元件和转换元件组成,它是一种检测装置,能感受到被测量的信息,并能将检测感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求,它在自动检测和自动控制领域有很重要的应用。OpenHarmony平台支持的常用传感器及功能说明如表所示。倪红军制作8.1.2位置服务位置服务(LocationBasedServices,LBS)又称定位服务,是指通过GNSS(GlobalNavigationSatelliteSystem,全球导航卫星系统)、基站、WLAN和蓝牙等多种定位技术,获取各种终端设备的位置坐标(经度和纬度),在电子地图平台的支持下为用户提供基于位置导航和查询的一种信息业务。1.坐标OpenHarmony平台以1984年世界大地坐标系统为参考,使用经度、纬度数据描述地球上的一个位置。2.GNSS定位全球导航卫星系统(GNSS)包含GPS、GLONASS、北斗和Galileo等,通过导航卫星、设备芯片提供的定位算法来确定设备准确位置。定位过程具体使用哪些定位系统,取决于用户设备的硬件能力。3.基站定位根据设备当前驻网基站和相邻基站的位置,估算设备当前位置。此定位方式的定位结果精度相对较低,并且需要设备可以访问蜂窝网络。4.WLAN、蓝牙定位根据设备可搜索到的周围WLAN、蓝牙设备位置,估算设备当前位置。此定位方式的定位结果精度依赖设备周围可见的固定WLAN、蓝牙设备的分布,密度较高时,精度也相较于基站定位方式更高,同时也需要设备可以访问网络。倪红军制作8.2传感器的应用本节要点1.掌握传感器接口的使用方法与应用场景2.掌握振动接口的使用方法与应用场景3.掌握指南针的实现方法倪红军制作8.2.1传感器接口1.获取设备上所有传感器sensor.getSensorList(callback:AsyncCallback<Array<Sensor>>):void:获取设备上的所有传感器信息,使用Callback异步方式返回结果。Sensor类型对象的参数及功能说明如表所示。sensor.getSensorList():Promise<Array<Sensor>>:获取设备上的所有传感器信息,使用Promise异步方式返回结果。倪红军制作8.2.1传感器接口【范例8-1】设计一个如图所示的传感器列表显示页面,在页面上显示传感器名称、供应商、类型id及精度。倪红军制作8.2.1传感器接口【范例8-1】设计一个如图所示的传感器列表显示页面,在页面上显示传感器名称、供应商、类型id及精度。(1)自定义getSensorInfos()方法获取传感器列表倪红军制作8.2.1传感器接口【范例8-1】设计一个如图所示的传感器列表显示页面,在页面上显示传感器名称、供应商、类型id及精度。(2)传感器列表显示页面的实现倪红军制作8.2.1传感器接口【范例8-1】设计一个如图所示的传感器列表显示页面,在页面上显示传感器名称、供应商、类型id及精度。(2)传感器列表显示页面的实现倪红军制作8.2.1传感器接口2.订阅传感器数据sensor.on(type:enum<T>,callback:Callback<T>,options?:Options):void:订阅指定类型的传感器数据,使用Callback异步方式返回结果。type参数表示订阅的传感器类型,其值如表所示;倪红军制作8.2.1传感器接口2.订阅传感器数据sensor.on(type:enum<T>,callback:Callback<T>,options?:Options):void:订阅指定类型的传感器数据,使用Callback异步方式返回结果。callback参数表示执行后异步返回传感器数据的回调函数,该回调函数的返回值类型与订阅的传感器类型相关,返回值类型及参数说明如表所示倪红军制作8.2.1传感器接口2.订阅传感器数据sensor.on(type:enum<T>,callback:Callback<T>,options?:Options):void:订阅指定类型的传感器数据,使用Callback异步方式返回结果。options参数用于设置传感器上报频率,其值类型为Options,该类型包含interval属性,interval为number或SensorFrequency类型,默认值为200000000ns,该属性有最小值和最大值的限制,由硬件支持的上报频率决定。倪红军制作8.2.1传感器接口3.取消订阅传感器数据sensor.off(type:enum<T>,callback:Callback<T>):void:取消订阅指定类型的传感器数据,使用Callback异步方式返回结果。type参数表示取消订阅的传感器类型,其值与on()方法参数一样;callback参数表示执行后异步返回取消订阅传感器的回调函数,该回调函数的返回值类型与取消订阅的传感器类型相关,返回值类型参数与on()方法参数一样。倪红军制作8.2.1传感器接口【范例8-2】设计一个如左图所示的摇一摇抽奖页面,点击“开始抽奖”按钮,如果在10秒内摇设备的次数达到5次,则在页面上显示“恭禧您,中奖了!”的信息,否则在页面显示“很遗憾,继续努力!”的信息,如右图所示。点击“停止抽奖”按钮,结束本次抽奖活动。(1)定义变量倪红军制作8.2.1传感器接口【范例8-2】设计一个如左图所示的摇一摇抽奖页面,点击“开始抽奖”按钮,如果在10秒内摇设备的次数达到5次,则在页面上显示“恭禧您,中奖了!”的信息,否则在页面显示“很遗憾,继续努力!”的信息,如右图所示。点击“停止抽奖”按钮,结束本次抽奖活动。(2)“开始抽奖”按钮的功能实现倪红军制作8.2.1传感器接口【范例8-2】设计一个如左图所示的摇一摇抽奖页面,点击“开始抽奖”按钮,如果在10秒内摇设备的次数达到5次,则在页面上显示“恭禧您,中奖了!”的信息,否则在页面显示“很遗憾,继续努力!”的信息,如右图所示。点击“停止抽奖”按钮,结束本次抽奖活动。(3)“停止抽奖”按钮的功能实现倪红军制作8.2.1传感器接口【范例8-2】设计一个如左图所示的摇一摇抽奖页面,点击“开始抽奖”按钮,如果在10秒内摇设备的次数达到5次,则在页面上显示“恭禧您,中奖了!”的信息,否则在页面显示“很遗憾,继续努力!”的信息,如右图所示。点击“停止抽奖”按钮,结束本次抽奖活动。(4)摇一摇抽奖页面的实现倪红军制作8.2.1传感器接口4.获取指定类型传感器sensor.getSingleSensor(type:SensorId,callback:AsyncCallback<Sensor>):void:获取指定传感器类型的属性信息,使用Callback异步方式返回结果。type参数表示指定的传感器类型;callback参数表示异步返回指定传感器属性信息的回调函数。sensor.getSingleSensor(type:SensorId):Promise<Sensor>:获取指定传感器类型的属性信息,使用Promise异步方式返回结果。【范例8-3】设计一个如图所示的环境光强度监测页面,点击“监测”按钮,按界面格式显示当前光线强度值,如果光线强度值达到200,则界面背景色为灰色,否则背景色为白色;点击“取消”按钮,取消光照强度监测。倪红军制作8.2.1传感器接口5.计算旋转矩阵sensor.getRotationMatrix(gravity:Array<number>,geomagnetic:Array<number>,callback:AsyncCallback<RotationMatrixResponse>):void:根据重力矢量和地磁矢量计算旋转矩阵,使用Callback异步方式返回结果。gravity参数表示重力矢量;geomagnetic参数表示地磁矢量;callback参数表示异步返回旋转矩阵的回调函数,其值类型为RotationMatrixResponse,RotationMatrixResponse类型对象的参数及功能说明如表所示。sensor.getRotationMatrix(gravity:Array<number>,geomagnetic:Array<number>):Promise<RotationMatrixResponse>:根据重力矢量和地磁矢量计算旋转矩阵,使用Promise异步方式返回结果。倪红军制作8.2.1传感器接口6.计算设备方向sensor.getOrientation(rotationMatrix:Array<number>,callback:AsyncCallback<Array<number>>):void:根据旋转矩阵计算设备方向,使用Callback异步方式返回结果。rotationMatrix参数表示旋转矩阵;callback参数表示异步返回围绕z、x、y轴方向旋转角度的回调函数。sensor.getOrientation(rotationMatrix:Array<number>):Promise<Array<number>>:根据旋转矩阵计算设备方向,使用Promise异步方式返回结果。倪红军制作8.2.2振动ArkTS开发框架提供的“@ohos.vibrator”模块接口可以提供控制马达振动启、停的能力,应用开发中使用该模块相关功能之前,需要先用如下代码导入“@ohos.vibrator”模块。vibrator.startVibration(effect:VibrateEffect,attribute:VibrateAttribute,callback:AsyncCallback<void>):void:根据指定的振动效果和振动属性触发马达振动,使用callback异步回调。effect参数表示马达振动效果,支持如上表所示的三种振动效果;attribute参数表示马达振动属性,其类型对象的参数及功能说明如下表所示;callback参数表示异步回调函数,当马达振动成功,err为undefined,否则为错误对象。倪红军制作8.2.2振动ArkTS开发框架提供的“@ohos.vibrator”模块接口可以提供控制马达振动启、停的能力,应用开发中使用该模块相关功能之前,需要先用如下代码导入“@ohos.vibrator”模块。vibrator.startVibration(effect:VibrateEffect,attribute:VibrateAttribute):Promise<void>:根据指定的振动效果和振动属性触发马达振动,使用Promise异步回调。vibrator.stopVibration(stopMode:VibratorStopMode,callback:AsyncCallback<void>):void:按照指定模式停止马达振动。使用callback异步回调。stopMode参数表示指定的停止振动模式,包括VIBRATOR_STOP_MODE_TIME(停止固定时长振动)和VIBRATOR_STOP_MODE_PRESET(停止预置振动);callback参数表示异步回调函数,当马达停止振动成功,err为undefined,否则为错误对象。vibrator.stopVibration(stopMode:VibratorStopMode):Promise<void>:按照指定模式停止马达振动。使用promise异步回调。vibrator.stopVibration(callback:AsyncCallback<void>):void:停止所有模式的马达振动。使用callback异步回调。callback参数表示异步回调函数,当马达停止振动成功,err为undefined,否则为错误对象。自API10开始提供。vibrator.stopVibration():Promise<void>:停止所有模式的马达振动。使用promise异步回调。倪红军制作8.2.2振动【范例8-4】设计一个如上图所示的设备摆放位置监测页面,点击“监测”按钮,如果设备不是水平放置,则马达振动;点击“取消”按钮,停止马达振动,并给出如下图所示的提示信息。(1)自定义startMyVibrator()方法开启马达振动倪红军制作8.2.2振动【范例8-4】设计一个如上图所示的设备摆放位置监测页面,点击“监测”按钮,如果设备不是水平放置,则马达振动;点击“取消”按钮,停止马达振动,并给出如下图所示的提示信息。(2)自定义stopMyVibrator()方法停止马达振动倪红军制作8.2.2振动【范例8-4】设计一个如上图所示的设备摆放位置监测页面,点击“监测”按钮,如果设备不是水平放置,则马达振动;点击“取消”按钮,停止马达振动,并给出如下图所示的提示信息。(3)设备摆放位置监测页面的实现倪红军制作8.2.3案例:指南针的设计与实现1.需求描述指南针应用程序启动后,页面上的指针会根据当前设备的方向进行指向,并在页面上显示当前的方向及与正北方向的偏移角度信息,运行效果如图所示。2.设计思路当指南针应用程序启动时,首先判断设备中是否存在加速度传感器和磁场传感器,如果存在,则首先订阅加速度传感器和磁场传感器数据,然后根据施加在设备x、y、z轴的加速度值计算出重力矢量值和x、y、z轴环境磁场强度计算出地磁矢量值,最后根据重力矢量、地磁矢量值调用getRotationMatrix()方法计算出旋转矩阵,并根据旋转矩阵调用getOrientation()方法计算出设备方向。倪红军制作8.2.3案例:指南针的设计与实现3.实现流程(1)创建指南针应用模块打开Chap08项目,右击“Chap08”文件夹,选择“New→Module...”菜单项创建名为“Compass”的模块,默认创建Index.ets页面作为指南针页面。并将compasspng图片文件保存到项目的src/main/resources/base/media文件夹下。(2)定义变量倪红军制作8.2.3案例:指南针的设计与实现3.实现流程(3)自定义showOrientation()方法计算与正北方向的偏移角度正北方向为0度(或360度),以正北方向为0度顺时针旋转90度为正东方向、旋转180度为正南方向、旋转270度为正西方向。根据与正北方向顺时针偏移的弧度值计算出角度(角度范围0~360)如果角度在0~15度或345~360度之间,则表示正北方向范围;如果角度在15~75度之间,则表示东北方向范围;如果角度在75~105度之间,则表示正东方向范围;如果角度在105~165度之间,则表示东南方向范围;如果角度在165~195度之间,则表示正南方向范围;如果角度在195~255度之间,则表示西南方向范围;如果角度在255~285度之间,则表示正西方向范围;如果角度在285~345度之间,则表示西北方向范围。倪红军制作8.2.3案例:指南针的设计与实现3.实现流程(4)自定义listenAccelerometer()方法订阅加速度传感器数据度计算设备方向首先调用sensor.on()方法订阅加速度传感器数据,并根据公式计算出重力矢量,然后调用getRotationMatrix()方法计算出旋转矢量,再根据旋转矢量调用getOrientation()方法计算出与正北方向的偏移弧度值,最后调用自定义的showOrientation()方法计算出角度值及在页面上显示方向信息。倪红军制作8.2.3案例:指南针的设计与实现3.实现流程(5)自定义listenManneticField()方法订阅磁场传感器数据度计算设备方向首先调用sensor.on()方法订阅磁场传感器数据,并根据公式计算出地磁矢量,然后调用getRotationMatrix()方法计算出旋转矢量,再根据旋转矢量调用getOrientation()方法计算出与正北方向的偏移弧度值,最后调用自定义的showOrientation()方法计算出角度值及在页面上显示方向信息。倪红军制作8.2.3案例:指南针的设计与实现3.实现流程(6)实现aboutToAppear()函数倪红军制作8.2.3案例:指南针的设计与实现3.实现流程(7)指南针页面的实现倪红军制作8.3

位置服务的应用本节要点1.掌握位置服务接口的使用方法与应用场景2.掌握高德地图在鸿蒙中的应用开发方法倪红军制作8.3.1位置服务接口从APIversion9开始,ArkTS开发框架提供的“@ohos.geoLocationManager”模块接口可以实现GNSS定位、网络定位、地理编码、逆地理编码、国家码和地理围栏等位置服务能力,应用开发中使用该模块相关功能之前,需要先用如下代码导入“@ohos.geoLocationManager”模块,并按照表所示申请权限及获得用户授权。如果应用在后台运行时也需要访问设备位置,除需要将应用声明为允许后台运行外,还必须申请ohos.permission.LOCATION_IN_BACKGROUND权限,这样应用在切入后台之后,系统可以继续上报位置信息。倪红军制作8.3.1位置服务接口1.开启和关闭位置变化订阅geoLocationManager.on(type:‘locationChange’,request:LocationRequest,callback:Callback<Location>):void:开启位置变化订阅,并发起定位请求,使用Callback异步方式返回结果。type参数值为“locationChange”,表示当位置发生变化时触发回调;request参数表示位置请求参数,LocationRequest类型对象的参数及功能说明如下表所示;callback参数表示执行后异步返回位置信息的回调函数,Location类型对象的参数及功能说明如下页表所示。倪红军制作8.3.1位置服务接口1.开启和关闭位置变化订阅geoLocationManager.on(type:‘locationChange’,request:LocationRequest,callback:Callback<Location>):void:开启位置变化订阅,并发起定位请求,使用Callback异步方式返回结果。Location类型对象的参数及功能说明如下表所示。geoLocationManager.off(type:‘locationChange’,callback?:Callback<Location>):void:关闭位置变化订阅,并删除对应的定位请求,使用Callback异步方式返回结果。type参数值为“locationChange”,表示当位置发生变化时触发回调;callback参数表示需要取消订阅的回调函数,若无此参数,则取消当前类型的所有订阅。倪红军制作8.3.1位置服务接口【范例8-5】设计一个如图所示的设备位置信息显示页面,点击“开启定位”按钮,在页面上显示当前设备的经纬度、高度、精度、速度和航向等信息;点击“关闭定位”按钮,取消位置变化订阅。倪红军制作8.3.1位置服务接口【范例8-5】设计一个如图所示的设备位置信息显示页面,点击“开启定位”按钮,在页面上显示当前设备的经纬度、高度、精度、速度和航向等信息;点击“关闭定位”按钮,取消位置变化订阅。倪红军制作8.3.1位置服务接口1.开启和关闭位置变化订阅由于获取当前设备的位置服务必须获得用户授权,所以需要按照“设置→应用和服务→应用管理→应用程序”步骤打开如左图所示的应用信息窗口,点击该窗口的“权限”项,弹出如右图所示的位置信息权限窗口,选择相应的位置访问信息权限。倪红军制作8.3.1位置服务接口2.逆地理编码解析服务geoLocationManager.getAddressesFromLocation(request:ReverseGeoCodeRequest,callback:AsyncCallback<Array<GeoAddress>>):void:调用逆地理编码解析服务,将坐标转换为地理位置信息描述,使用Callback异步方式返回结果。request参数表示逆地理编码请求的相关参数,ReverseGeoCodeRequest类型对象的参数及功能说明如下表所示;callback参数表示执行后异步返回逆地理编码结果的回调函数,GeoAddress类型对象的参数及功能说明如下一页表所示。geoLocationManager.getAddressesFromLocation(request:ReverseGeoCodeRequest):Promise<Array<GeoAddress>>:调用逆地理编码解析服务,将坐标转换为地理描述,使用Promise异步方式返回结果。倪红军制作8.3.1位置服务接口2.逆地理编码解析服务geoLocationManager.getAddressesFromLocation(request:ReverseGeoCodeRequest,callback:AsyncCallback<Array<GeoAddress>>):void:调用逆地理编码解析服务,将坐标转换为地理位置信息描述,使用Callback异步方式返回结果。GeoAddress类型对象的参数及功能说明如表所示。倪红军制作8.3.1位置服务接口【范例8-6】在范例8-5的基础上,点击“开启定位”按钮,在页面上显示如图8所示页面效果,可以按如下步骤实现。(1)自定义myLocationDetail()方法在页面上显示设备的具体位置信息倪红军制作8.3.1位置服务接口【范例8-6】在范例8-5的基础上,点击“开启定位”按钮,在页面上显示如图8所示页面效果,可以按如下步骤实现。(2)定义位置发生变化时触发的回调方法倪红军制作8.3.1位置服务接口3.获取当前位置geoLocationManager.getCurrentLocation(request:CurrentLocationRequest,callback:AsyncCallback<Location>):void:获取当前位置,使用callback回调异步返回结果。request参数表示设置当前位置信息请求参数,CurrentLocationRequest类型对象及功能说明如表所示;callback参数表示返回当前位置信息的监听回调方法,回调方法的返回值为Location类型。geoLocationManager.getCurrentLocation(callback:AsyncCallback<Location>):void:获取当前位置,使用callback回调异步返回结果。geoLocationManager.getCurrentLocation(request?:CurrentLocationRequest):Promise<Location>:获取当前位置,使用Promise方式异步返回结果。request参数表示位置请求参数,返回值类型为Promise<Location>。倪红军制作8.3.1位置服务接口4.地理编码解析服务

geoLocationManager.getAddressesFromLocationName(request:GeoCodeRequest,callback:AsyncCallback<Array<GeoAddress>>):void:调用地理编码服务,将地理描述信息转换为具体的经纬度坐标,使用callb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论