[鸿蒙]各种硬件传感器相关

2 阅读1分钟

加速度传感器:

//加速度传感器授权
{
  "name": "ohos.permission.ACCELEROMETER"
},
//开启
sensor.on(sensor.SensorId.ACCELEROMETER,...)

// 注销监听
sensor.off(sensor.SensorId.ACCELEROMETER)

磁场传感器:

// 开启 磁场传感器 
sensor.on(sensor.SensorId.MAGNETIC_FIELD,

//关闭
sensor.off(sensor.SensorId.MAGNETIC_FIELD)

马达振动:

// 马达振动权限
{
  "name": "ohos.permission.VIBRATE"
},
//开启马达振动
vibrator.startVibration({ type: "time", duration: 500 }, { id: 1, usage: 'alarm' })
// 关闭马达振动
vibator.stopVibration(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_TIME)

闪光灯(手电筒模式)

// 开启闪光灯(手电筒模式)
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()
  }
}

音频播放:

AVPlayer管理器封装

//添加AVPlayer管理器
import { media } from '@kit.MediaKit';

class AVPlayerManager {
  private avPlayer: media.AVPlayer | null = null
  private loop: boolean = false
  private rawFdPath: string = ''

  async getAVPlayerInstance() {
    // 如果已存在,直接返回
    if (this.avPlayer !== null) {
      return this.avPlayer
    }
    // 初始化播放器
    const player = await media.createAVPlayer()
    player.on('stateChange', (state) => {
      switch (state) {
        case 'initialized':
          player.prepare()
          break;
        case 'prepared':
          player.play()
          break;
        case 'playing':
          player.play()
          break;
        case 'paused':
          player.pause()
          break;
        case 'completed':
          if (this.loop === true) {
            player.play() // 播放结束继续播放:循环播放
          } else {
            player.stop() // 播放结束
          }
          break;
        case 'stopped':
          player.reset() // stop 时 reset -> 释放音频资源
          break;
        default:
          break;
      }
    })
    this.avPlayer = player
    return this.avPlayer
  }

  // 加载 src/main/resources/rawfile 的文件
  async playByRawSrc(rawFile: string) {
    const player = await this.getAVPlayerInstance()
    // 先释放原来的资源
    await player.reset()
    // 获取文件信息
    const context = getContext()
    // 加载 src/main/resources/rawfile 文件夹中的文件
    const fileDescriptor = await context.resourceManager.getRawFd(rawFile)
    // 设置播放路径
    player.fdSrc = fileDescriptor
    // 播放
    player.play()
  }

  // 停止播放
  async stop() {
    const player = await this.getAVPlayerInstance()
    this.loop = false
    player.stop()
  }

  async setLoop(isLoop: boolean) {
    this.loop = isLoop
  }
}

export const avPlayerManager = new AVPlayerManager()