#HarmonyOS NEXT体验官#手电筒应用 原创

早起睡不够
发布于 2024-7-25 23:22
浏览
0收藏

手电筒应用

大家好,今天我们一起来开发一个手电筒应用。

前言

在日常生活中,它为人们在黑暗环境中提供照明,如夜间行走、寻找物品、检查电器设备或处理突发的停电情况。尤其对于居住在电力供应不稳定地区的人们,手电筒是必备的工具。

在户外活动中,如露营、徒步旅行、探险等,手电筒能帮助人们看清道路、识别方向、避免危险。它也是紧急情况下的重要信号工具,通过闪烁灯光来引起救援人员的注意。

在工作场景中,维修工人、电力工程师等常常需要手电筒来照亮狭小或昏暗的工作空间,以便进行准确的操作和检查。

从安全角度来看,手电筒可以在遇到紧急危险时作为防身工具,用来暂时吓退潜在的威胁。

总之,手电筒应用虽看似简单,却在保障人们的生活便利、安全以及完成各种任务方面发挥着不可或缺的作用。

功能:

简单开关:用户可以通过点击应用内的按钮或图标轻松打开和关闭手电筒。

SOS 求救信号模式:按照国际通用的 SOS 求救信号节奏(三短、三长、三短)闪烁灯光,在紧急情况下可以发送求救信号。

频闪模式:以一定频率快速闪烁灯光,可用于引起注意、信号指示等场景。

电量显示:实时显示设备当前的电量状态,让用户了解剩余电量还能支持手电筒使用的时长。

低电量提醒:当设备电量低于一定阈值(如 20%)时,给用户发送提醒通知,避免突然没电影响使用。

效果

关灯 开灯
#HarmonyOS NEXT体验官#手电筒应用-鸿蒙开发者社区 #HarmonyOS NEXT体验官#手电筒应用-鸿蒙开发者社区

接下来看一下,如何实现。

首先,我们需要检测设备是否支持手电筒。

使用接口

isTorchSupported

isTorchSupported(): boolean

检测设备是否支持手电筒。

系统能力: SystemCapability.Multimedia.Camera.Core

返回值:

类型 说明
boolean 返回true表示设备支持手电筒。

示例:

function isTorchSupported(cameraManager: camera.CameraManager): boolean {
  let isSupported = cameraManager.isTorchSupported();
  return isSupported;
}

接下来我们检测支持设置的手电筒模式。

isTorchModeSupported

isTorchModeSupported(mode: TorchMode): boolean

检测是否支持设置的手电筒模式。

系统能力: SystemCapability.Multimedia.Camera.Core

参数:

参数名 类型 必填 说明
mode TorchMode 手电筒模式。

返回值:

类型 说明
boolean 返回true表示设备支持设置的手电筒模式。
function isTorchModeSupported(cameraManager: camera.CameraManager, torchMode: camera.TorchMode): boolean {
  let isSupported = cameraManager.isTorchModeSupported(torchMode);
  return isSupported;
}

我们得到返回结果是123,

setTorchMode

setTorchMode(mode: TorchMode): void

设置设备手电筒模式。

系统能力: SystemCapability.Multimedia.Camera.Core

参数:

参数名 类型 必填 说明
mode TorchMode 手电筒模式。

错误码:

以下错误码的详细介绍请参见Camera错误码

错误码ID 错误信息
7400101 Parameter missing or parameter type incorrect.
7400102 Operation not allowed.
7400201 Camera service fatal error.

示例:

import { BusinessError } from '@kit.BasicServicesKit';

function setTorchMode(cameraManager: camera.CameraManager, torchMode: camera.TorchMode): void {
  try {
    cameraManager.setTorchMode(torchMode);
  } catch (error) {
    // 失败返回错误码error.code并处理
    let err = error as BusinessError;
    console.error(`The setTorchMode call failed. error code: ${err.code}`);
  }
}

on(‘torchStatusChange’)

on(type: ‘torchStatusChange’, callback: AsyncCallback<TorchStatusInfo>): void

手电筒状态变化回调,通过注册回调函数获取手电筒状态变化。使用callback异步回调。

说明

当前注册监听接口,不支持在on监听的回调方法里,调用off注销回调。

系统能力: SystemCapability.Multimedia.Camera.Core

参数:

参数名 类型 必填 说明
type string 监听事件,固定为’torchStatusChange’。cameraManager对象获取成功后可监听。目前只支持手电筒打开,手电筒关闭,手电筒不可用,手电筒恢复可用会触发该事件并返回对应信息。
callback AsyncCallback<TorchStatusInfo> 回调函数,用于获取手电筒状态变化信息。

示例:

import { BusinessError } from '@kit.BasicServicesKit';

function callback(err: BusinessError, torchStatusInfo: camera.TorchStatusInfo): void {
  if (err !== undefined && err.code !== 0) {
    console.error(`Callback Error, errorCode: ${err.code}`);
    return;
  }
  console.info(`onTorchStatusChange, isTorchAvailable: ${torchStatusInfo.isTorchAvailable}, isTorchActive: ${torchStatusInfo.isTorchActive}, level: ${torchStatusInfo.torchLevel}`);
}

function registerTorchStatusChange(cameraManager: camera.CameraManager): void {
  cameraManager.on('torchStatusChange', callback);
}

off(‘torchStatusChange’)11+

off(type: ‘torchStatusChange’, callback?: AsyncCallback<TorchStatusInfo>): void

手电筒状态变化注销回调,通过注销回调函数取消获取手电筒状态变化。

系统能力: SystemCapability.Multimedia.Camera.Core

参数:

参数名 类型 必填 说明
type string 监听事件,固定为’torchStatusChange’。cameraManager对象获取成功后可监听。
callback AsyncCallback<TorchStatusInfo> 回调函数,如果指定参数则取消对应callback(callback对象不可是匿名函数),否则取消所有callback。

示例:

function unregisterTorchStatusChange(cameraManager: camera.CameraManager): void {
  cameraManager.off('torchStatusChange');
}

最后最关键的代码,其实就是

下面这段

Column() {

  Button('打开手电筒', { stateEffect: true, type: ButtonType.Capsule })
    .width('80%')
    .height(40)
    .margin(20)
    .onClick(() => {
      camera.getCameraManager(getContext() as common.UIAbilityContext).setTorchMode(1);
    })
  Button('关闭手电筒', { stateEffect: true, type: ButtonType.Capsule })
    .width('80%')
    .height(40)
    .margin(20)
    .onClick(() => {
      camera.getCameraManager(getContext() as common.UIAbilityContext).setTorchMode(0);
    })
}

所以大家看到了吧,其实实现一个手电筒,也没有那么难。你也可以大胆的尝试一下。这里面,我们为了方便,就把image换成了button,你可以按照我上面的实现,做一下试试。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
    相关推荐