解读鸿蒙开发中手机硬件传感器开发问题的关键
温馨提示:本文最后更新于2024年10月18日 07:54,若内容或图片失效,请在下方留言或联系博主。
系统传感器是应用访问底层硬件传感器的一种设备抽象概念。开发者根据传感器提供的Sensor接口,可以查询设备上的传感器,订阅传感器数据,并根据传感器数据定制相应的算法开发各类应用,比如指南针、运动健康、游戏等。
1. 添加传感器权限(module.json5):
{
”name“:”ohos.permission.ACCELEROMETER“
}
2. 启动/关闭传感器-加速度:
// 启动 持续监听传感器数据变化(on 持续监听 once 监听一次)
startSensor() {
// sensor.on 打开传感器检测 ACCELEROMETER 加速度传感器(模拟器支持(摇一摇))
sensor.on(sensor.SensorId.ACCELEROMETER, (response) => {
this.sensorResponse = response // 保存传感器数据
})
}
// 关闭 持久监听传感器数据变化
stopSensor() {
// sensor.off 关闭传感器检测
sensor.off(sensor.SensorId.ACCELEROMETER)
}
3. 启动/关闭传感器-磁场:
// 启动 磁场传感器监测
startSensor() {
// 由于模拟器不支持 会报错闪退(使用请求拦截器不会闪退)
try {
// sensor.on 打开传感器检测 MAGNETIC_FIELD 磁场传感器(模拟器不支持)
sensor.on(sensor.SensorId.MAGNETIC_FIELD, (response) => {
// 保存传感器返回数据
this.sensorResponse = response
// 触发频率 interval:'game' > 'ui' > 'normal'
}, { interval: 'ui' })
} catch (err) {
AlertDialog.show({ message: JSON.stringify('硬件设备暂不支持', null, 2) })
}
}
// 关闭 磁场传感器数据变化
stopSensor() {
try {
// sensor.off 关闭传感器检测
sensor.off(sensor.SensorId.MAGNETIC_FIELD)
} catch (err) {
}
}
4. 启动/关闭传感器-马达震动:
应用场景:
- 通知和提醒:当有新消息、提醒或通知时,通过震动提醒用户。例如,微信、短信、社交媒体通知等。
- 错误或警告:当用户进行的操作出现错误或需要特别注意时,使用震动来提示用户。例如,输入错误密码、操作失败等。
- 交互反馈:在用户与应用互动时提供即时反馈。例如,按钮点击、滑动操作、长按、下拉刷新等。
- 游戏和娱乐:在游戏中,通过震动来模拟游戏内的事件或动作,例如碰撞、爆炸等,增强游戏体验。
- 闹钟和计时器:当闹钟或计时器到点时,通过震动提醒用户。
// 申请马达震动权限
{ // 马达震动
"name": "ohos.permission.VIBRATE"
},
// 开启 震动马达传感器
startVibrate() {
// duration 持续的时长
vibrator.startVibration({ type: 'time', duration: 500 }, { id: 1, usage: 'alarm' })
}
// 关闭 震动马达传感器
stopVibrate() {
vibrator.stopVibration(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_TIME)
}
5. 开启/关闭手电筒:
Button('开闪光灯--手电筒模式')
.onClick(() => {
//获取相机管理器 // 初始化 CameraManager
const cameraManager = camera.getCameraManager(getContext())
try {
// 开启手电筒模式
cameraManager.setTorchMode(camera.TorchMode.ON)
} catch (err) {
AlertDialog.show({ message: JSON.stringify('模拟器暂无权限', null, 2) })
}
})
Button('关闪光灯--手电筒模式')
.onClick(() => {
//获取相机管理器 // 初始化 CameraManager
const cameraManager = camera.getCameraManager(getContext())
// .isTorchSupported() 判断某个功能是否支持
if (cameraManager.isTorchSupported()) {
// 关闭手电筒模式
cameraManager.setTorchMode(camera.TorchMode.OFF)
}
})
Button('切换闪光灯效果')
.onClick(() => {
//获取相机管理器 // 初始化 CameraManager
const cameraManager = camera.getCameraManager(getContext())
if (cameraManager.getTorchMode() == camera.TorchMode.ON) {
promptAction.showToast({ message: '闪光灯开启中' })
} else {
promptAction.showToast({ message: '闪光灯关闭中' })
}
})
封装好的一系列代码:
import { camera } from '@kit.CameraKit';
class TorchManager {
private cameraManager: camera.CameraManager | null = null
async getCameraManagerInstance() {
// 如果已存在直接返回
if (this.cameraManager) {
return this.cameraManager
}
// 初始化 CameraManager
const cameraManager = camera.getCameraManager(getContext())
// 检查是否支持
if (cameraManager.isTorchSupported() === false) {
return Promise.reject('当前设备不支持闪光灯')
}
// 保存并返回
this.cameraManager = cameraManager
return this.cameraManager
}
// 开启闪光灯
async openTorch() {
const cameraManager = await this.getCameraManagerInstance()
cameraManager.setTorchMode(camera.TorchMode.ON)
}
// 关闭闪光灯
async closeTorch() {
const cameraManager = await this.getCameraManagerInstance()
cameraManager.setTorchMode(camera.TorchMode.OFF)
}
// 切换闪光灯
async toggleTorch() {
const cameraManager = await this.getCameraManagerInstance()
if (cameraManager.getTorchMode() === camera.TorchMode.OFF) {
this.openTorch()
} else {
this.closeTorch()
}
}
}
export const torchManager = new TorchManager()