前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10行代码开发手电筒应用

10行代码开发手电筒应用

作者头像
徐建国
发布2024-07-26 19:06:23
180
发布2024-07-26 19:06:23
举报
文章被收录于专栏:个人路线

前言

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

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

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

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

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

功能:

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大前端之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能:
  • 效果
  • 使用接口
    • isTorchSupported
      • isTorchModeSupported
        • setTorchMode
          • on('torchStatusChange')
            • off('torchStatusChange')11+
            • 参考
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档