10行代码开发手电筒应用

2024-07-26 19:06:23 浏览数 (1)

前言

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

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

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

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

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

功能:

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

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

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

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

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

效果

关灯

开灯

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

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

使用接口

isTorchSupported

isTorchSupported(): boolean

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

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

返回值:

类型

说明

boolean

返回 true 表示设备支持手电筒。

示例:

代码语言:javascript复制
function isTorchSupported(cameraManager: camera.CameraManager): boolean {
  let isSupported = cameraManager.isTorchSupported();
  return isSupported;
}

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

isTorchModeSupported

isTorchModeSupported(mode: TorchMode): boolean

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

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

参数:

参数名

类型

必填

说明

mode

TorchMode[1]

手电筒模式。

返回值:

类型

说明

boolean

返回 true 表示设备支持设置的手电筒模式。

代码语言:javascript复制
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[2]

手电筒模式。

错误码:

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

错误码 ID

错误信息

7400101

Parameter missing or parameter type incorrect.

7400102

Operation not allowed.

7400201

Camera service fatal error.

示例:

代码语言:javascript复制
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): void

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

说明

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

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

参数:

参数名

类型

必填

说明

type

string

监听事件,固定为'torchStatusChange'。cameraManager 对象获取成功后可监听。目前只支持手电筒打开,手电筒关闭,手电筒不可用,手电筒恢复可用会触发该事件并返回对应信息。

callback

AsyncCallback

回调函数,用于获取手电筒状态变化信息。

示例:

代码语言:javascript复制
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): void

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

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

参数:

参数名

类型

必填

说明

type

string

监听事件,固定为'torchStatusChange'。cameraManager 对象获取成功后可监听。

callback

AsyncCallback

回调函数,如果指定参数则取消对应 callback(callback 对象不可是匿名函数),否则取消所有 callback。

示例:

代码语言:javascript复制
function unregisterTorchStatusChange(cameraManager: camera.CameraManager): void {
  cameraManager.off('torchStatusChange');
}

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

下面这段

代码语言:javascript复制
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,你可以按照我上面的实现,做一下试试。

参考

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-camera-V5

https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkui-132-V5

参考资料

[1]

TorchMode: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-camera-V5#torchmode11

[2]

TorchMode: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-camera-V5#torchmode11

0 人点赞