HarmonyOS之LED灯和振动器Vibrator的功能和使用
【摘要】
一、简介
① 基本概念
控制类小器件指的是设备上的 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)