【HarmonyOS】鸿蒙应用实现手机摇一摇功能

【HarmonyOS】鸿蒙应用实现手机摇一摇功能

一、前言

手机摇一摇功能,是通过获取手机设备,加速度传感器接口,获取其中的数值,进行逻辑判断实现的功能。

鸿蒙中手机设备传感器@ohos.sensor (传感器)的系统API监听有以下:
@ohos.sensor (传感器)官网API

  1. 加速度传感器
  2. 环境光传感器
  3. 气压计传感器
  4. 重力传感器
  5. 陀螺仪传感器
  6. 霍尔传感器
  7. 心率传感器
  8. 湿度传感器
  9. 线性加速度传感器
  10. 地磁传感器
  11. 方向传感器
  12. 计步器传感器
  13. 接近光传感器
  14. 旋转矢量传感器
  15. 大幅动作检测传感器
  16. 佩戴检测传感器

其中摇一摇用到的,加速度传感器是多个维度测算的,是指x、y、z三个方向上的加速度值。
主要测算一些瞬时加速或减速的动作。比如测量手机的运动速度和方向。
在这里插入图片描述

当用户拿着手机运动时,会出现上下摆动的情况,这样可以检测出加速度在某个方向上来回改变,通过检测这个来回改变的次数,可以计算出步数。

在游戏里能通过加速度传感器触发特殊指令。日常应用中的一些甩动切歌、翻转静音等也都用到了这枚传感器。

注意:
至于为什么不用线性加速传感器,是因为线性加速度传感器和加速度传感器在定义、工作原理以及应用场景上存在显著的区别。线性主要是来检测物体在直线方向上的位移。

二、功能开发思路:

1.根据通过@ohos.sensor接口,获取加速度传感器的数值,添加权限:ohos.permission.ACCELEROMETER

 {"name": "ohos.permission.ACCELEROMETER","reason": "$string:reason","usedScene": {"abilities": ["EntryAbility"],"when": "always"}}
 sensor.on(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => {}, { interval: 100000000 }); // 设置间隔为100000000 ns  = 0.1 s

2.将x,y,z三个方向的数值进行绝对值处理,获取运动数值

 sensor.on(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => {console.info(this.TAG, 'Succeeded in invoking on. X-coordinate component: ' + data.x);console.info(this.TAG,'Succeeded in invoking on. Y-coordinate component: ' + data.y);console.info(this.TAG,'Succeeded in invoking on. Z-coordinate component: ' + data.z);}, { interval: 100000000 }); // 设置间隔为100000000 ns  = 0.1 s

3.根据运动数值进行判断,是否符合摇一摇的运动区间

        let x = Math.abs(data.x);let y = Math.abs(data.y);let z  = Math.abs(data.z);this.message = "x : " + x + "  y: " +  y + " z: " + z;if(x > this.SWING_VAL || y > this.SWING_VAL || z > this.SWING_VAL){promptAction.showToast({message: "手机正在摇一摇!"})}

最后一步,当然就是使用手机设备进行代码功能效果的验证。
若没有真机设备,使用模拟器,点击该按钮可实现摇一摇手机的触发。
在这里插入图片描述
注意:
不使用加速传感器时,一定要移除监听。否则会白白损耗性能。

三、源码示例:

在这里插入图片描述

import { sensor } from '@kit.SensorServiceKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';

struct SensorTestPage {private TAG: string = "SenorTestPage";private SWING_VAL: number = 50; message: string = '';aboutToAppear(): void {try {// 订阅加速度传感器返回的数据sensor.on(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => {console.info(this.TAG, 'Succeeded in invoking on. X-coordinate component: ' + data.x);console.info(this.TAG,'Succeeded in invoking on. Y-coordinate component: ' + data.y);console.info(this.TAG,'Succeeded in invoking on. Z-coordinate component: ' + data.z);let x = Math.abs(data.x);let y = Math.abs(data.y);let z  = Math.abs(data.z);this.message = "x : " + x + "  y: " +  y + " z: " + z;if(x > this.SWING_VAL || y > this.SWING_VAL || z > this.SWING_VAL){promptAction.showToast({message: "手机正在摇一摇!"})}}, { interval: 100000000 }); // 设置间隔为100000000 ns  = 0.1 s} catch (error) {let e: BusinessError = error as BusinessError;console.error(this.TAG, `Failed to invoke on. Code: ${e.code}, message: ${e.message}`);}}aboutToDisappear(): void {sensor.off(sensor.SensorId.ACCELEROMETER);}build() {RelativeContainer() {Text(this.message).id('SenorTestPageHelloWorld').fontSize(50).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }})}.height('100%').width('100%')}
}

注意:
记得添加ohos.permission.ACCELEROMETER权限,否则无法监听到加速传感器!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微积分复习笔记 Calculus Volume 2 - 3.7 Improper Integrals

3.7 Improper Integrals - Calculus Volume 2 | OpenStax

ViewModel

ViewMode是MVVM架构模式中VM层对应的类,它的作用是存储界面数据,并和界面发生数据交互。ViewModel能感知生命周期,并且在界面由于配置问题发生重建时候,可以保持当前的数据不变。生命周期如下: ViewMode由ViewModePr…

智慧城市道路分割数据集labelme格式2648张1类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):2648 标注数量(json文件个数):2648 标注类别数:1 标注类别名称:["road"] 每个类别标注的框数&#x…

leetcode-73.矩阵置零-day5

class Solution {public void setZeroes(int[][] mat) {int m mat.length, n mat[0].length;// 1. 扫描「首行」和「首列」记录「首行」和「首列」是否该被置零boolean r0 false, c0 false;for (int i 0; i < m; i) {if (mat[i][0] 0) {r0 true;break;}}for (int j …

uni-app H5端使用注意事项 【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

DCDC降压模块

一、项目介绍 在B站看到工科男孙老师发的DCDC模块视频&#xff0c;后面有提到这款芯片&#xff0c;于是就使用这款芯片自己设计了这款降压模块。 芯片的封装为TSOT23-8&#xff0c;对空间利用率高。 输入电压的范围为3-18V。 输出电压的范围为0-8V。 输出电流最…

康耐视智能相机(Insight)通过ModbusTCP发送字符串到倍福(BECKHOFF)PLC中

文章目录 1.背景2.分析3.实现3.1.PLC的ModbusTCP_Server3.1.1.安装TF6250-Modbus-TCP3.1.2.PLC设置 3.2.智能相机的ModbusTCP_Client3.2.1.了解ModbusTCP的协议3.2.2.根据协议写代码3.2.2.1.纯函数代码3.2.2.2.脚本代码 3.2.3.非脚本处理时的代码逻辑图3.2.4.关于代码的问题及解…

基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究|文献速递-生成式模型与transformer在医学影像中的应用速递

Title 题目 Mammography classification with multi-view deep learning techniques:Investigating graph and transformer-based architectures 基于多视角深度学习技术的乳腺X线分类&#xff1a;图神经网络与Transformer架构的研究 01 文献速递介绍 乳腺X线检查是乳腺癌…

恢复删除的文件:6个免费Windows电脑数据恢复软件

数据恢复软件可帮助您从众多存储设备中恢复损坏或删除的数据。您可以使用这些文件恢复软件来检索文件、文档、视频、图片等。这些应用程序支持多种标准文件格式&#xff0c;如 PNG、RTF、PDF、HTML、JPG、MP3 等。 经过超过 75 小时的研究&#xff0c;我分析了 25 最佳免费数据…

探索 Python 编程调试案例:程序平均值的修复过程

&#x1f49d;&#x1f49d;&#x1f49d;Python 作为一门广泛应用的编程语言&#xff0c;其编程过程并非总是一帆风顺。即使是经验丰富的程序员&#xff0c;也会在代码中遇到各种错误。而调试Python代码过程&#xff0c;也是学习中不可避免的步骤。 今天来看一个简单的案例。…

简单了解一下 Go 语言构建约束?

​构建约束是一种在 Go 语言中控制源文件编译条件的方法&#xff0c;它可以让您指定某些文件只在特定的操作系统、架构、编译器或 Go 版本下编译&#xff0c;而在其他环境中自动忽略。这样可以方便您针对不同的平台或场景编写不同的代码&#xff0c;实现条件编译的功能。 构建…

人工智能大语言模型起源篇(二),从通用语言微调到驾驭LLM

上一篇&#xff1a;《人工智能大语言模型起源篇&#xff08;一&#xff09;&#xff0c;从哪里开始》 &#xff08;5&#xff09;Howard 和 Ruder 于2018年发表的《Universal Language Model Fine-tuning for Text Classification》&#xff0c;https://arxiv.org/abs/1801.06…

基于MATLAB的电力系统潮流计算

为了进行潮流计算&#xff0c;通常可以使用像MATPOWER这样的电力系统分析工具包&#xff0c; 在MATLAB中的MATPOWER工具包中&#xff0c;多个不同的系统模型被定义为测试案例&#xff08;case&#xff09;。这些测试案例用于模拟和分析电力系统中的潮流计算、最优潮流问题、稳…

Unity屏幕截图、区域截图、读取图片、WebGL长截屏并下载到本地jpg

Unity屏幕截图、区域截图、读取图片、WebGL长截屏并下载到本地jpg 一、全屏截图并保存到StreamingAssets路径下 Texture2D screenShot;//保存截取的纹理public Image image; //显示截屏的Imagepublic void Jietu(){StartCoroutine(ScrrenCapture(new Rect(0, 0, Screen.width…

Moretl无人值守日志采集工具

永久免费: 至Gitee下载 使用教程: Moretl使用说明 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架构 技术架…

The Rise and Potential of Large Language ModelBased Agents:A Survey---摘要、背景、引言

题目 基于大语言模型的Agent的兴起与发展前景 论文地址&#xff1a;https://arxiv.org/pdf/2309.07864.pdf 项目地址&#xff1a;https:/github.com/WooooDyy./LLM-Agent–Paper-List 摘要 长期以来&#xff0c;人类一直在追求等同于或超越人类水平的人工智能(A)&#xff0c;…

lc46全排列——回溯

46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 法1&#xff1a;暴力枚举 总共n!种全排列&#xff0c;一一列举出来放入list就行&#xff0c;关键是怎么去枚举呢&#xff1f;那就每次随机取一个&#xff0c;然后删去这个&#xff0c;再从剩下的数组中继续去随机选一个&a…

Spring Boot教程之二十五: 使用 Tomcat 部署项目

Spring Boot – 使用 Tomcat 部署项目 Spring Boot 是一个基于微服务的框架&#xff0c;在其中创建可用于生产的应用程序只需很少的时间。Spring Boot 建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。如今&#xff0c;它正成为开发人员的最爱&#xff0c;因为它是一个…

【C语言篇】C 语言总复习(下):点亮编程思维,穿越代码的浩瀚星河

我的个人主页 我的专栏&#xff1a;C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 在C语言的世界里&#xff0c;结构体和联合体以及文件操作都是非常重要且实用的知识板块&#xff0c;掌握它们能帮助我们更高效地组织数据以及与外部文…

CNCF云原生生态版图-项目和产品综合分析

CNCF云原生生态版图-项目和产品综合分析 CNCF云原生生态版图-项目和产品综合分析整体统计分析中国研发人员贡献项目和产品其中&#xff0c;纳入 CNCF 管理的开源项目 链接 CNCF云原生生态版图-项目和产品综合分析 整体统计分析 在对云原生技术选型时&#xff0c;优先选择经过 …