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

GeorgeGcs
• 阅读 3

##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 手机摇一摇功能,是通过获取手机设备,加速度传感器接口,获取其中的数值,进行逻辑判断实现的功能。 在鸿蒙中手机设备传感器@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';

@Entry @Component struct SensorTestPage {

private TAG: string = "SenorTestPage"; private SWING_VAL: number = 50;

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

点赞
收藏
评论区
推荐文章
GeorgeGcs GeorgeGcs
9小时前
【HarmonyOS 5】鸿蒙TEE(可信执行环境)详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、TEE是什么?1、TEE的定义:可信执行环境(TrustedExecutionEnvironment),简称TEE,是存在于智能手机、平板或任意移动设备主处理器中的一个安全区域,确保各
GeorgeGcs GeorgeGcs
7小时前
【HarmonyOS 5】鸿蒙星闪NearLink详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言鸿蒙星闪NearLinkKit是HarmonyOS提供的短距离通信服务,支持星闪设备间的连接、数据交互。例如,手机可作为中心设备与外围设备(如鼠标、手写笔、智能家电、车钥匙等)通过
GeorgeGcs GeorgeGcs
7小时前
【HarmonyOS 5】鸿蒙应用代码控制横竖屏切换,自动切换横竖屏,监听横竖屏以及注意事项
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、鸿蒙应用如何进行页面横竖屏调用API手动切换1.首先要在EntryAbility中获取主窗口对象EntryAbility.etsimportAbilityConstant,UIAbil
GeorgeGcs GeorgeGcs
7小时前
【HarmonyOS 5】桌面快捷方式功能实现详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言在移动应用开发中,如何让用户快速触达核心功能,是目前很常见的功能之一。鸿蒙系统提供的桌面快捷方式(Shortcuts)功能,允许开发者为应用内常用功能创建直达入口,用户通过长按应用
GeorgeGcs GeorgeGcs
7小时前
【HarmonyOS 5】鸿蒙分布式协同应用开发详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言为什么需要分布式协同应用?首先是因为当今社会,围绕电子产品生态,人们迫切希望,周边的电子设备可以协同操作。例如手机,手表,电视机,汽车,甚至是各种家电产品。从2015年到如今,手机
GeorgeGcs GeorgeGcs
7小时前
鸿蒙 6.0 引爆 AI 智能体革命:从交互重构到全场景智能觉醒,未来已至
【HarmonyOS5】鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言今天的华为开发者大会(2025HDC),全程看完,我只想说,震撼对于用户来说,一个未来场景的手机操作系统,正在诞生,从文本交互的操作转向自然语言,未来手机用
GeorgeGcs GeorgeGcs
5小时前
【HarmonyOS 5】鸿蒙应用数据安全详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言大家平时用手机、智能手表的时候,最担心什么?肯定是自己的隐私数据会不会泄露!今天就和大家唠唠HarmonyOS是怎么把应用安全这块“盾牌”打造得明明白白的,从里到外保护我们的信息。
GeorgeGcs GeorgeGcs
5小时前
【HarmonyOS 5】鸿蒙应用隐私保护详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言在今天这个手机不离手的时代,我们每天用手机支付、聊天、记录生活,不知不觉中,大量个人信息都存储在了移动设备里。但你有没有想过,如果这些隐私数据泄露了会怎样?从接到诈骗电话,到遭遇身
GeorgeGcs GeorgeGcs
5小时前
【HarmonyOS 5】鸿蒙用户头像编辑功能实践
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言1、应用背景在鸿蒙化开发过程中,我们发现最基本常见的功能用户头像的编辑,实现方式和Android与IOS有极大的不同。在实际开发和调研的过程中,我们发现并总结了鸿蒙隐私处理与业内A
GeorgeGcs GeorgeGcs
5小时前
【HarmonyOS】鸿蒙应用蓝牙功能实现 (三)
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、蓝牙配对业务流程1‌.设备进入可被发现模式‌:首先,设备需要进入可被发现模式,这样周围的蓝牙设备才能识别到它。一方设备(如手机)会主动搜索附近的蓝牙设备,并列出所有可用的配对选项。2‌
GeorgeGcs
GeorgeGcs
Lv1
男 · 金融头部企业 · 鸿蒙应用架构师
HarmonyOS认证创作先锋,华为HDE专家,鸿蒙讲师,作者。目前任职鸿蒙应用架构师。 历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 AAE,Harmony(OpenHarmony\HarmonyOS),MAE(Android\IOS),FE(H5\Vue\RN)。
文章
56
粉丝
1
获赞
2