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

举报
Serendipity·y 发表于 2022/02/17 01:12:33 2022/02/17
【摘要】 一、简介 ① 基本概念 控制类小器件指的是设备上的 LED 灯和振动器。其中,LED 灯主要用作指示(如充电状态)、闪烁功能(如三色灯)等;振动器主要用于闹钟、开关机振动、来电振动等场景。控制类小器件...

一、简介

① 基本概念
  • 控制类小器件指的是设备上的 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);
	}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

三、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"
	        }
	    }
	]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 查询硬件设备上的振动器列表。
  • 查询指定的振动器是否支持指定的震动效果。
  • 创建不同效果的振动。
  • 关闭指定的振动器指定模式的振动。
	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);
	}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

文章来源: blog.csdn.net,作者:Serendipity·y,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Forever_wj/article/details/118579411

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。