HarmonyOS之LED灯和振动器Vibrator的功能和使用

Posted Forever_wj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HarmonyOS之LED灯和振动器Vibrator的功能和使用相关的知识,希望对你有一定的参考价值。

一、简介

① 基本概念
  • 控制类小器件指的是设备上的 LED 灯和振动器。其中,LED 灯主要用作指示(如充电状态)、闪烁功能(如三色灯)等;振动器主要用于闹钟、开关机振动、来电振动等场景。
  • 控制类小器件主要包含以下四个模块:控制类小器件 API、控制类小器件Framework、控制类小器件 Service、HD_IDL 层。

在这里插入图片描述

  • 控制类小器件 API:提供灯和振动器基础的 API,主要包含灯的列表查询、打开灯、关闭灯等接口,振动器的列表查询、振动器的振动器效果查询、触发/关闭振动器等接口。
  • 控制类小器件 Framework:主要实现灯和振动器的框架层管理,实现与控制类小器件 Service 的通信。
  • 控制类小器件 Service:实现灯和振动器的服务管理。
  • HD_IDL 层:对不同设备的适配。
② 约束与限制
  • 在调用 Light API 时,请先通过 getLightIdList 接口查询设备所支持的灯的 ID 列表,以免调用打开接口异常。
  • 在调用 Vibrator API 时,请先通过 getVibratorIdList 接口查询设备所支持的振动器的ID列表,以免调用振动接口异常。
  • 在使用振动器时,开发者需要配置请求振动器的权限 ohos.permission.VIBRATE,才能控制振动器振动。

二、Light

① 应用场景
  • 当设备需要设置不同的闪烁效果时,可以调用 Light 模块,例如,LED 灯能够设置灯颜色、灯亮和灯灭时长的闪烁效果。
② Light 的 API
  • 灯模块主要提供的功能有:查询设备上灯的列表,查询某个灯设备支持的效果,打开和关闭灯设备。
  • LightAgent 类开放能力如下:
接口名描述
getLightIdList()获取硬件设备上的灯列表
isSupport(int)根据指定灯Id查询硬件设备是否有该灯
isEffectSupport(int, String)查询指定的灯是否支持指定的闪烁效果
turnOn(int, String)对指定的灯创建指定效果的一次性闪烁
turnOn(int, LightEffect)对指定的灯创建自定义效果的一次性闪烁
turnOn(String)对指定的灯创建指定效果的一次性闪烁
turnOn(LightEffect)对指定的灯创建自定义效果的一次性闪烁
turnOff(int)关闭指定的灯
turnOff()关闭指定的灯
③ Light 的使用
  • 查询硬件设备上灯的列表。
  • 查询指定的灯是否支持指定的闪烁效果。
  • 创建不同的闪烁效果。
  • 关闭指定的灯。
	private LightAgent lightAgent = new LightAgent();
	
	@Override
	public void onStart(Intent intent) {
	    super.onStart(intent);
	    super.setUIContent(ResourceTable.Layout_light_layout);
	
	    // ...
	
	    // 查询硬件设备上的灯列表
	    List<Integer> myLightList = lightAgent.getLightIdList();
	    if (myLightList.isEmpty()) {
	        return;
	    }
	    int lightId = myLightList.get(0);
	
	    // 查询指定的灯是否支持指定的闪烁效果
	    boolean isSupport = lightAgent.isEffectSupport(lightId, LightEffect.LIGHT_ID_KEYBOARD);
	
	    // 创建指定效果的一次性闪烁
	    boolean turnOnResult = lightAgent.turnOn(lightId, LightEffect.LIGHT_ID_KEYBOARD);
	
	    // 创建自定义效果的一次性闪烁
	    LightBrightness lightBrightness = new LightBrightness(255, 255, 255);
	    LightEffect lightEffect = new LightEffect(lightBrightness, 1000, 1000);
	    boolean turnOnEffectResult = lightAgent.turnOn(lightId, lightEffect);
	
	    // 关闭指定的灯
	    boolean turnOffResult = lightAgent.turnOff(lightId);
	}

三、Vibrator

① 应用场景
  • 当设备需要设置不同的振动效果时,可以调用 Vibrator 模块,例如,设备的按键可以设置不同强度和时长的振动,闹钟和来电可以设置不同强度和时长的单次或周期性振动。
② Vibrator 的 API
  • 振动器模块主要提供的功能有:查询设备上振动器的列表,查询某个振动器是否支持某种振动效果,触发和关闭振动器。
  • VibratorAgent类开放能力如下:
接口名描述
getVibratorIdList()获取硬件设备上的振动器列表
isSupport(int)根据指定的振动器Id查询硬件设备是否存在该振动器
isEffectSupport(int, String)查询指定的振动器是否支持指定的震动效果
startOnce(int, String)对指定的振动器创建指定效果的一次性振动
startOnce​(String)对指定的振动器创建指定效果的一次性振动
startOnce(int, int)对指定的振动器创建指定振动时长的一次性振动
startOnce​(int)对指定的振动器创建指定振动时长的一次性振动
start(String, boolean)对指定的振动器以预设的某种振动效果进行循环振动
start(int, VibrationPattern)对指定的振动器创建自定义效果的波形或一次性振动
start​(VibrationPattern)对指定的振动器创建自定义效果的波形或一次性振动
stop(int, String)关闭指定的振动器指定模式的振动
stop(String)关闭指定的振动器指定模式的振动
③ Vibrator 的使用
  • 控制设备上的振动器,需要在“config.json”里面进行配置请求权限,具体如下:
	"reqPermissions": [
	    {
	        "name": "ohos.permission.VIBRATE",
	        "reason": "",
	        "usedScene": {
	            "ability": [
	                ".MainAbility"
	            ],
	            "when": "inuse"
	        }
	    }
	]
  • 查询硬件设备上的振动器列表。
  • 查询指定的振动器是否支持指定的震动效果。
  • 创建不同效果的振动。
  • 关闭指定的振动器指定模式的振动。
	private VibratorAgent vibratorAgent = new VibratorAgent();
	
	private int[] timing = {1000, 1000, 2000, 5000};
	
	private int[] intensity = {50, 100, 200, 255};
	
	@Override
	public void onStart(Intent intent) {
	    super.onStart(intent);
	    super.setUIContent(ResourceTable.Layout_vibrator_layout);
	
	    // ...
	
	    // 查询硬件设备上的振动器列表
	    List<Integer> vibratorList = vibratorAgent.getVibratorIdList();
	    if (vibratorList.isEmpty()) {
	        return;
	    }
	    int vibratorId = vibratorList.get(0);
	
	    // 查询指定的振动器是否支持指定的振动效果
	    boolean isSupport = vibratorAgent.isEffectSupport(vibratorId,
	            VibrationPattern.VIBRATOR_TYPE_CAMERA_CLICK);
	
	    // 创建指定效果的一次性振动
	    boolean vibrateEffectResult = vibratorAgent.startOnce(vibratorId,
	            VibrationPattern.VIBRATOR_TYPE_CAMERA_CLICK);
	
	    // 创建指定振动时长的一次性振动
	    int vibratorTiming = 1000;
	    boolean vibrateResult = vibratorAgent.startOnce(vibratorId, vibratorTiming);
	
	    // 以预设的某种振动效果进行循环振动
	    boolean vibratorRepeatEffect = vibratorAgent.start(VibrationPattern.VIBRATOR_TYPE_RINGTONE_BOUNCE, true);
	    // 控制振动器停止循环振动
	    vibratorAgent.stop();
	
	    // 创建自定义效果的周期性波形振动
	    int count = 5;
	    VibrationPattern vibrationPeriodEffect = VibrationPattern.createPeriod(timing, intensity, count);
	    boolean vibratePeriodResult = vibratorAgent.start(vibratorId, vibrationPeriodEffect);
	
	    // 创建自定义效果的一次性振动
	    VibrationPattern vibrationOnceEffect = VibrationPattern.createSingle(3000, 50);
	    boolean vibrateSingleResult = vibratorAgent.start(vibratorId, vibrationOnceEffect);
	
	    // 关闭指定的振动器自定义模式的振动
	    boolean stopResult = vibratorAgent.stop(vibratorId,
	            VibratorAgent.VIBRATOR_STOP_MODE_CUSTOMIZED);
	}

以上是关于HarmonyOS之LED灯和振动器Vibrator的功能和使用的主要内容,如果未能解决你的问题,请参考以下文章

呼吸灯和花样流水灯 51单片机实现

物联网基于OneNET和Siri快捷指令实现控制ESP8266-01S点亮LED灯和查询DHT11温湿度传感器数据

物联网基于OneNET和Siri快捷指令实现控制ESP8266-01S点亮LED灯和查询DHT11温湿度传感器数据

物联网基于OneNET和Siri快捷指令实现控制ESP8266-01S点亮LED灯和查询DHT11温湿度传感器数据

物联网基于OneNET和Siri快捷指令实现控制ESP8266-01S点亮LED灯和查询DHT11温湿度传感器数据

自制智能镜之——化妆灯和人体感应篇