CH9-HarmonyOS传感器和媒体管理

2023-10-27

前言

  • 智能手机与传统手机相比,最大的区别不仅在于它能够快速联网,还可以在户外活动时用它来进行GPS定位,指示南北方向;
  • 跑步时,可以用来计步;爬山时可以显示海拔;更可以用摄像头来照相等等。
  • 这些都归功于手机内置的丰富传感器。充分利用传感器可以发挥手机更强大的功能,促进手机App适配更多的应用领域。

目标

  • 通过本章的学习,您能够了解到:
  • HarmonyOS中的传感器分类,各种传感器的基本作用
  • 掌握基本传感器如方向或运动传感器的使用方法;
  • 掌握相机组件来拍摄图片的方法;
  • 掌握GPS传感器获取位置信息的方法。

传感器概述

  • HarmonyOS传感器是应用访问底层硬件传感器的一种设备抽象概念。开发者根据传感器提供的Sensor API,可以查询设备上的传感器订阅传感器的数据,并根据传感器数据定制相应的算法,开发各类应用,比如指南针、运动健康、游戏等。
  • 根据传感器的用途,可以将传感器分为六大类:运动类传感器、环境类传感器、方向类传感器、光线类传感器、健康类传感器、其他类传感器(如霍尔传感器),每一大类传感器包含不同类型的传感器,某种类型的传感器可能是单一的物理传感器,也可能是由多个物理传感器复合而成

运动类传感器

  • 加速度传感器:主要用来检测手机运动状态,测量三个物理轴(x、y 和 z)上,施加在设备上的加速度(包括重力加速度),单位 : m/s2。
  • 重力传感器:主要用来测量重力大小,测量三个物理轴(x、y 和 z)上,施加在设备上的重力加速度,单位 : m/s2。
  • 陀螺仪传感器:主要用来测量手机旋转的角速度,测量三个物理轴(x、y 和 z)上,设备的旋转角速度,单位 : rad/s。
  • 计步传感器:用于提供用户行走的步数数据,可以统计用户行走步数。

运动类传感器工作原理

20220125185203

主流传感器表示

  • 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、频率进行策略选择;以及对不同设备的适配。

核心模块

QQ截图20220125185631

接口说明

  • HarmonyOS传感器提供的功能有:查询传感器的列表订阅/取消订阅传感器数据、查询传感器的最小采样时间间隔执行控制命令

    • 订阅方向类别的传感器数据为例:
    • sensor.subscribeCompass(OBJECT):订阅罗盘数据变化。针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效。

    20220125185702

开发步骤

  • 权限配置:如果设备上使用了传感器权限列表中的传感器,需要请求相应的权限,开发者才能获取到传感器数据。

20220125185942

  • 开发者需要在config.json里面配置权限

    "reqPermissions": [
        {
            "name": "ohos.permission.GYROSCOPE",
            "reason": "",
            "usedScene": {
                "ability": [
                    ".MainAbility"
                ],
                "when": "inuse"
            }
        }
    ]
    

使用传感器

  • 以使用方向类别的传感器为例,运动类、环境类、健康类等类别的传感器使用方法类似。
    步骤如下:
  • 获取待订阅数据的传感器;
  • 创建传感器回调
  • 订阅传感器数据;
  • 接收并处理传感器数据;
  • 取消订阅传感器数据。

方向传感器调用示例

  1. 引入方向类传感器对象
import sensor from '@system.sensor';
  1. 罗经数据订阅
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);
        },
    });
},
  1. 罗经数据取消
onDestroy() {
    sensor.unsubscribeCompass();
    console.log('cancel data direction collection');
}

相机调用

  • 相机:HarmonyOS相机模块支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问操作新功能开发最常见的操作如:预览、拍照、连拍和录像等。

基本概念

  • 相机静态能力:用于描述相机的固有能力的一系列参数,比如朝向、支持的分辨率等信息。
  • 物理相机:物理相机就是独立的实体摄像头设备。物理相机ID是用于标志每个物理摄像头的唯一字串
  • 逻辑相机:逻辑相机是多个物理相机组合出来的抽象设备,逻辑相机通过同时控制多个物理相机设备来完成相机某些功能,如大光圈、变焦等功能。逻辑摄像机ID是一个唯一的字符串,标识多个物理摄像机的抽象能力。
  • 帧捕获:相机启动后对帧的捕获动作统称为帧捕获。主要包含单帧捕获、多帧捕获、循环帧捕获。

主要接口

  • 一个页面仅支持一个camera组件,提供预览、拍照功能。

20220125190758

<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位置相关接口,获取设备实时位置,或者最近的历史位置。
  • 对于位置敏感的应用业务,建议获取设备实时位置信息。如果不需要设备实时位置信息,并且希望尽可能的节省耗电,开发者可以考虑获取最近的历史位置。

接口说明

  • 支持类型

    20220125191740

geolocation.getLocation(OBJECT)

  • 参数说明
    20220125191907

开发步骤

  1. 应用在使用系统能力前,需要检查是否已经获取用户授权访问设备位置信息。如未获得授权,可以向用户申请需要的位置权限。
  • 系统提供的定位权限有:

    • 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"
            }, {
            ...
        }
                          ]
    }
    
  1. 为了使用位置传感器,需要引入头文件system.geolocation’,获取位置管理对象geolocation’。
import geolocation from '@system.geolocation';
  1. 在页面初始化回调函数或自定义函数中调用该对象的方法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设备上丰富的传感器设备,
* 掌握基本的传感器工作原理
* 能够调用常用传感器完成特定场景应用开发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CH9-HarmonyOS传感器和媒体管理 的相关文章

  • hashmap底层以及红黑树 终于懂了!!!

    目录 0 引言 1 红黑树 0 引言 jdk 1 7里面 HashMap中的数据结构是数组 单链表的组合 以键值对 key value 的形式存储元素的 通过put 和get 方法储存和获取对象 在JDK1 6 JDK1 7中 HashMa
  • openwrt--uci指令的使用

    UCI简介 UCI是集中式配置信息管理接口 Unified Configuration Interface 的缩写 他是OpenWrt引进的一套配置参数管理系统 UCI管理了OpenWrt下最主要的系统配置参数并且提供了简单 容易 标准化的
  • JAVA零基础学习课程个人笔记(全手打)

    目录 chapter01 Chapter02 目录 Chapter02 Day05 07 方法 Method 课堂笔记 chapter02 控制循环中断继续语句 chapter03 0 面向对象 chapter03 1 封装 chapter
  • 再见前端!纯Java撸个管理系统,这框架用起来贼爽!

    摘要 一个管理系统 往往需要后端 前端一起实现 单表CRUD操作往往都差不多 我们可以使用代码生成器来实现 有时候我们的管理系统只需要一些简单的CRUD页面 有没有什么框架能做到不写前端代码 纯Java撸个管理系统呢 这里推荐一个全栈类框架

随机推荐

  • golang通过代理访问url

    直接上实例 命令测试 curl proxy 10 0 55 22 8080 v http www baidu com package main import fmt io ioutil net http net url net time f
  • Parcel是如何存储数据

    Parcel学习 Parcel是如何存储数据的 第一步 第二步 第三步 如何读取呢 Parcel和serializable Parcel是如何存储数据的 疑问 平时java使用它进行序列化要关注的点就是读写顺序 为什么要注意读写顺序呢 在这
  • python基础十一:异常处理以及文件操作

    1 异常 1 1异常简介 程序在运行过程中可能会出现一些错误 比如 使用了不存在的索引 两个不同类型的数据相加 这些错误我们称之为异常 处理异常 程序运行时出现异常 目的并不是让我们的程序直接终止 Python是希望在出现异常时 我们可以编
  • 前端js计算导致的精度问题解决方案

    前言 js计算会导致很多奇奇怪怪的问题 这是由于js使用二进制 有一些浮点数用二进制表示时是无穷的 而为节省存储空间只存储64位 精度丢失从而导致计算出现问题 一 写个方法 自己写一个方法来解决 二 使用插件 使用 number preci
  • (二)ChatGLM-6B模型部署以及ptuning微调详细教程

    文章目录 介绍什么是ChatGLM 6B Torch 安装ChatGLM 6B模型 安装过程 Ptuning微调 安装过程 初始化环境 训练 准备自己的数据集 推理 验证 问题和思考 泛化学习 simbert 不属于必学 介绍什么是Chat
  • CSS Modules

    CSS Modules CSS模块 对CSS进行模块化处理 目的 解决在 React 开发时 组件之间类名重复导致的样式冲突问题 使用后 会自动生成类名 类名格式 filename classname hash filename 文件名 c
  • 华为防火墙IPsec点对点配置解析

    一 完成基本互联 主机直连的接口为trust区域 防火墙之间互联的接口为untrust区域 二 左边的防火墙IPsec的配置 1 Ike Proposal 的创建 ike proposal xx 首先创建ike proposal xx 这一
  • 在PHP脚本中的转义字符 \

    在编写PHP脚本的过程中 经常在遇到写路径或者某些特殊字符时 要用到转义字符 反斜线 比如 在使用fopen 函数的时候 我们要写参数 即要打开的路径 fp fopen DOCUMENT ROOT orders orders txt w 在
  • Triangle Tessellation with OpenGL 4.0

    FROM http prideout net blog p 48 This is the first of a two part article on tessellation shaders with OpenGL 4 0 This en
  • AVPlayer 视频播放

    1 AVPlayer AVPlayer 是一个用来播放基于时间的视听媒体的控制器对象 一个队播放和资源时间相隔信息进行管理的对象 而非一个视图或窗口控制器 AVPlayer支持播放从本地 分步下载或通过HTTP Live Streaming
  • 2023版golang面试题100道(map)

    面试题合集目录 map查找 假设当前 B 4 即桶数量为2 B 16个 要从map中获取k4对应的value 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 k4的查找步骤 计算k4的hash值 通过低B位来确定在哪号桶
  • 静态代码和动态代码的区别_静态和动态代码分析之间有什么区别,您如何知道使用哪个?...

    让我们从一个运动类比开始 以帮助说明这两种方法之间的差异 静态代码分析类似于练习网和投球机练习棒球挥杆 最小的惊喜 经过几次挥杆后 您每次都知道球的确切位置 这有助于处理基础知识并确保您拥有良好的形式 虽然这有助于改善你的游戏 但它只能让你
  • 订单管理系统

    本专栏介绍了使用Qt开发的一些小型桌面软件 其中包括软件功能介绍 软件截图 主要代码等内容 此外 本专栏还提供完整的软件源码和安装包供有需要的同学下载 我的目标是开发一些简洁美观且实用的客户端小软件 如果能够为大家提供有用的软件或对学习有益
  • Hypertable 快速安装,仅需上载一个RPM包,零编译

    Hypertable 快速安装 仅需上载一个RPM包 零编译 Hypertable 快速安装 仅需下载一个RPM包 零编译 本文采用 单机安装 1 Hypertable 安装 Hypertable 的几种安装方式 单机 安装于单机 采用本地
  • Arduino core for the ESP32 安装失败问题处理方法

    文章目录 目的 离线开发板数据包 鱼 安装最新开发板数据包 渔 总结 目的 理论上Arduino IDE安装开发板数据包是非常方便的 不过在国内的网络环境下有时候就会很纠结 另外Arduino IDE对于下载数据这块也存在问题 经常下着下着
  • SQL语句连接筛选条件放在on和where后的区别(一篇足矣)

    sql查询这个东西 要说它简单 可以很简单 通常情况下只需使用增删查改配合编程语言的逻辑表达能力 就能实现所有功能 但是增删查改并不能代表sql语句的所有 完整的sql功能会另人望而生畏 就拿比普通增删查改稍微复杂一个层次的连接查询来说 盲
  • 【BP时序预测】基于BP神经网络的时间序列预测附matlab完整代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统 信号
  • PY32F003F18之RS485通讯

    PY32F003F18将USART2连接到RS485芯片 和其它RS485设备实现串口接收后再转发的功能 一 测试电路 二 测试程序 include USART2 h include stdio h getchar putchar scan
  • 单链表中什么时候使用二级指针

    在使用单链表时 一直有一个疑惑 初始化单链表时为什么要用二级指针 代码如下 typedef int ElemType ElemType类型根据实际情况而定 这里假设为int typedef struct Node ElemType data
  • CH9-HarmonyOS传感器和媒体管理

    文章目录 前言 目标 传感器概述 运动类传感器 运动类传感器工作原理 主流传感器表示 运作机制 核心模块 接口说明 开发步骤 使用传感器 方向传感器调用示例 相机调用 基本概念 主要接口 位置传感器 位置能力 基本概念 运作机制 获取设备的