当前位置: 首页 > news >正文

【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权限,否则无法监听到加速传感器!

相关文章:

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

【HarmonyOS】鸿蒙应用实现手机摇一摇功能 一、前言 手机摇一摇功能,是通过获取手机设备,加速度传感器接口,获取其中的数值,进行逻辑判断实现的功能。 在鸿蒙中手机设备传感器ohos.sensor (传感器)的系统API监听有以下&#xf…...

Kael‘thas Sunstrider Ashes of Al‘ar

Kaelthas Sunstrider 凯尔萨斯逐日者 <血精灵之王> Kaelthas Sunstrider - NPC - 魔兽世界怀旧服TBC数据库_WOW2.43数据库_70级《燃烧的远征》数据库 Ashes of Alar 奥的灰烬 &#xff08;凤凰 310%速度&#xff09; Ashes of Alar - Item - 魔兽世界怀旧服TBC数据…...

CNCF云原生生态版图

CNCF云原生生态版图 概述什么是云原生生态版图如何使用生态版图 项目和产品&#xff08;Projects and products&#xff09;会员&#xff08;Members&#xff09;认证合作伙伴与提供商&#xff08;Certified partners and providers&#xff09;无服务&#xff08;Serverless&a…...

渐冻症:真的无药可治?

“渐冻症”&#xff0c;这个令人闻之色变的疾病&#xff0c;仿佛是生命的冷酷冰封者。一提到渐冻症&#xff0c;很多人脑海中立刻浮现出绝望的画面&#xff0c;认为它无药可治。但事实真的如此吗&#xff1f; 渐冻症&#xff0c;医学上称为肌萎缩侧索硬化症&#xff0c;是一种渐…...

`pg_wal` 目录

在 PostgreSQL 中&#xff0c;自动清理 pg_wal 目录主要通过配置参数 min_wal_size、max_wal_size 和 wal_keep_size 来实现。以下是如何配置 PostgreSQL 以自动清理 WAL 文件的详细步骤和建议&#xff1a; 配置 min_wal_size 和 max_wal_size&#xff1a; min_wal_size&#x…...

【信息系统项目管理师】论文:论信息系统项目的整合管理

文章目录 正文一、制定项目章程二、指定项目管理计划三、指导与管理项目工作四、管理项目知识五、监控项目工作六、实施整体变更控制七、结束项目或阶段 正文 根据省自然资源厅的总体部署&#xff0c;XX市决定于2023年8月开始全市不动产登记系统建设&#xff0c;要求在2024年8…...

MATLAB深度学习(七)——ResNet残差网络

一、ResNet网络 ResNet是深度残差网络的简称。其核心思想就是在&#xff0c;每两个网络层之间加入一个残差连接&#xff0c;缓解深层网络中的梯度消失问题 二、残差结构 在多层神经网络模型里&#xff0c;设想一个包含诺干层自网络&#xff0c;子网络的函数用H(x)来表示&#x…...

freeswitch(配置event_socket连接)

亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 如果想使用代码进行控制freeswitch添加账号、获取注册信息、强拆等,可以使用ESL控制vim autoload_configs/event_socket.conf.x…...

C++ SQLite轻量化数据库使用总结

官网下载&#xff1a;https://www.sqlite.org/download.html 示例1 #include <iostream> #include <sqlite3.h>int main() {sqlite3* db;char* zErrMsg 0;int rc;// 打开数据库连接&#xff08;如果数据库不存在&#xff0c;则会自动创建&#xff09;rc sqlite…...

docker打包当前使用的某个容器为镜像,导出,导入

容器打包成镜像 要将正在使用的 Docker 容器打包成镜像&#xff0c;你可以使用 docker commit 命令。这个命令会从运行中的容器创建一个新的镜像。以下是详细步骤&#xff1a; 查看正在运行的容器&#xff1a; 使用以下命令查看当前正在运行的容器&#xff1a; docker ps找到目…...

【刷题22】BFS解决最短路问题

目录 一、边权为1的最短路问题二、迷宫中离入口最近的出口三、最小基因变化四、单词接龙五、为高尔夫比赛砍树 一、边权为1的最短路问题 如图&#xff1a;从A到I&#xff0c;怎样走路径最短 一个队列一个哈希表队列&#xff1a;一层一层递进&#xff0c;直到目的地为止哈希表&…...

服务器重启:数字世界的短暂休憩与新生

在互联网的浩瀚海洋中&#xff0c;服务器犹如一座座灯塔&#xff0c;持续稳定地散发着光芒&#xff0c;为无数的网络活动提供着支撑与指引。而服务器重启&#xff0c;便是这数字灯塔周期性进行自我调整与修复的关键环节。 服务器重启是指对服务器进行重新启动的过程&#xff0…...

JavaEE 【知识改变命运】05 多线程(4)

文章目录 单例模式什么是单例模式饿汉模式懒汉模式多线程- 懒汉模式分析多线程问题第一种添加sychronized的方式第二种添加sychronized的方式改进第二种添加sychronized的方式&#xff08;DCL检查锁&#xff09; 阻塞队列什么是阻塞队列什么是消费生产者模型标准库中的阻塞队列…...

【CSS in Depth 2 精译_076】12.4 @font-face 的工作原理

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体12.3 谷歌字体12.4 font-fac…...

SQL Having用法

拿个业务场景说这个案例&#xff0c;比如我们有个表里面可能有批改过的数据&#xff0c;批改过得数据不会随着新批改的数据覆盖&#xff0c;而是逐条插入表中&#xff0c;如果想找出包含最早批改的数据和最新批改数据的话&#xff0c;那么我们就需要用到了havinng 用法,假设最开…...

@JsonNaming实现入参接口参数下划线驼峰自动转换

JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 是用于 Jackson 库中的一个注解&#xff0c;作用是改变 Java 对象的字段命名策略&#xff0c;特别是在序列化和反序列化时。这可以帮助 Java 对象中的字段名从驼峰命名法&#xff08;CamelCase&#xff09;转换为蛇…...

使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南

目标检测技术作为计算机视觉领域的核心组件&#xff0c;在自动驾驶系统、智能监控、零售分析以及增强现实等应用中发挥着关键作用。本文将详细介绍PaliGemma2模型的微调流程&#xff0c;该模型通过整合SigLIP-So400m视觉编码器与Gemma 2系列的高级语言模型&#xff0c;专门针对…...

MinerU:PDF文档提取工具

目录 docker一键启动本地配置下载模型权重文件demo.pyGPU使用情况 wget https://github.com/opendatalab/MinerU/raw/master/Dockerfile docker build -t mineru:latest .docker一键启动 有点问题&#xff0c;晚点更新 本地配置 就是在Python环境中配置依赖和安装包 根据需求…...

spark的共享变量

因为RDD在spark中是分布式存储 1、python中定义的变量仅仅在driver中运行&#xff0c;在excutor中是获取不到值的——广播变量 2、若定义了一个变量进行累加&#xff0c;先分别在driver和excutor中进行累加&#xff0c;但是结果是不会主动返回给driver的——累加器 Broadcas…...

Scrapy与MongoDB

Scrapy可以在非常短的时间里获取大量的数据。这些数据无论是直接保存为纯文本文件还是CSV文件&#xff0c;都是不可取的。爬取一个小时就可以让这些文件大到无法打开。这个时候&#xff0c;就需要使用数据库来保存数据了。 MongoDB由于其出色的性能&#xff0c;已经成为爬虫的首…...

爬虫基础与实践

爬虫技术基础与实践 在当今数字化的时代&#xff0c;数据成为了宝贵的资源。爬虫技术作为获取数据的重要手段&#xff0c;受到了广泛的关注和应用。本文将介绍爬虫的基本概念、工作原理以及一些常用的技术和工具。 一、爬虫的基本概念 爬虫&#xff0c;也称为网络蜘蛛或网络机器…...

快速上手Serverless架构与FastAPI结合实现自动化移动应用后端

快速上手Serverless架构与FastAPI结合实现自动化移动应用后端 引言 随着云计算技术的发展&#xff0c;Serverless架构已经成为构建现代应用的一种流行选择。它允许开发者将更多精力集中在核心业务逻辑上&#xff0c;而无需管理底层基础设施。本文将以AWS Lambda和API Gateway…...

ansible自动化运维(二)playbook模式详解

一.Ansible中的playbook模式 Playbook不同于使用单个模块操作远程服务器&#xff0c;Playbook的功能更加强大。如果说单个模块执行类似于Linux系统中的命令&#xff0c;那么Playbook就类似于shell脚本&#xff0c;将多个模块组合起来实现一组的操作。 Playbook还是会用到ad-h…...

基于Springboot社团管理系统【附源码】

基于Springboot社团管理系统 效果如下&#xff1a; 系统登录页面 用户管理页面 社团信息管理页面 社团活动管理页面 经费信息管理页面 新闻信息管理页面 系统主页面 社团信息页面 研究背景 在当今高校与社区环境中&#xff0c;学生社团蓬勃发展&#xff0c;成为学生课余生活…...

CSS:html中,.png的动态图,怎么只让它显示部分,比如只显示右上部分的,或右边中间部分

目录 背景 方法 1: 使用 background-image 和 background-position 示例代码 解释 方法 2: 使用 clip-path 裁剪图像 示例代码 解释 方法 3: 使用 object-fit 和 overflow 示例代码 解释 示例 总结 背景 在HTML中,如果你有一个 .png 的动态图(例如一个 GIF 动画或…...

解读CVPR2024-论文分享|RepViT: Revisiting Mobile CNN From ViT Perspective

论文标题 RepViT: Revisiting Mobile CNN From ViT Perspective 论文链接&#xff1a; https://arxiv.org/abs/2307.09283 论文作者 Ao Wang, Hui Chen, Zijia Lin, Jungong Han, Guiguang Ding 内容简介 这篇论文探讨了在资源受限的移动设备上&#xff0c;轻量级视觉变…...

linux部署安装wordpress

一、环境准备 首先我们先介绍下环境和实验中所需要的包 环境&#xff1a; 我使用的是centos7.6的系统 建议关掉selinux和影响到80端口的防火墙策略 selinux永久有效 修改 /etc/selinux/config 文件中的 SELINUX"" 为 disabled &#xff0c;然后重启。 selinux即…...

[Java] 配置Powershell 的 Maven 环境变量

目录 前言单独为 Powershell 设置 Maven 环境变量 前言 安装使用 maven 的时候发现&#xff0c;明明已经配置好了环境变量。但是在 powershell 中还是无法识别 mvn 命令。原来这货需要另外配置。 单独为 Powershell 设置 Maven 环境变量 要在 PowerShell 中永久配置 Maven 环…...

Android -- [SelfView] 自定义弹窗式颜色选择器

Android – [SelfView] 自定义弹窗式颜色选择器 PS: 1. 弹框式显示&#xff1b; 2. 支持透明度设置&#xff1b; 3. 支持拖动控件选择颜色&#xff1b; 4. 支持 ARGB | HEX 数值填写预览颜色并返回&#xff1b; 5. 输出支持Hex 和 Int 两种格式&#xff1b;效果 使用方法&…...

vue-echarts高度缩小时autoresize失效

背景 项目中采用动态给x-vue-echarts style赋值width&#xff0c;height的方式实现echarts图表尺寸的改变 <v-chart...autoresize></v-chart>给v-chart添加autoresize后&#xff0c;在图表宽度变化&#xff0c;高度增加时无异常&#xff0c;高度减小时图表并未缩…...

做装修公司网站/一台电脑赚钱的门路

目录.NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中前言笔者最近在开发和维护一个.NET Core项目&#xff0c;其中使用几个非常有意思的.NET Core相关的扩展&#xff0c;在此总结整理一下。EF Core性能调优如果你的项目中使用了EF Core, 且正在处于性能调优阶段…...

企业定制网站价格表/seo竞价推广

2020-1024996 996是福报。 真的是命中注定&#xff1f; 真的能蹭到一个徽章&#xff1f;...

网站群如何做网站/站长推荐入口自动跳转

传送门&#xff1a;hdu4185 Oil Skimming 题意&#xff1a;n*n的方格里有字符*和#&#xff0c;只能在字符#上放1*2的板子且不能相交&#xff0c;求最多能放多少个。 分析&#xff1a;直接给#字符编号&#xff0c;然后相邻的可以匹配&#xff0c;建边后无向图跑匈牙利算法&#…...

淮安网站优化/东莞做网站哪个公司好

redis-cli - Command-line client to redis-server 2.1. Pub/Sub 订阅与发布 redis 提供基本的MQ 功能&#xff0c;下面我们做一个演示 开启第一个终端窗口&#xff0c;订阅first second $ redis-cli redis 127.0.0.1:6379> SUBSCRIBE first second Reading messages... (pr…...

有哪些做网站的公司/运营网站

大致题意&#xff1a;有N个木桩&#xff0c;和M个木桩对之间的高度差(从x跳到y需要往上跳的高度)。从x跳跃到y的路径消耗的体力值是路径中的一个最大高度差。求一条消耗体力最小的路径。 思路&#xff1a;-和POJ 1797类似&#xff0c;只是这道题的没有固定起点和终点&#xff0…...

wordpress网站自动伪原创/品牌推广方式有哪些

KMP算法是一种改进的字符串匹配算法&#xff0c;由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt同时发现&#xff0c;因此人们称它为克努特——莫里斯——普拉特操作&#xff08;简称KMP算法&#xff09;。KMP算法的关键是利用匹配失败后的信息&#xff0c;尽量减少模式串与主串…...