控制类小器件开发概述
基本概念
控制类小器件指的是设备上的LED灯和振动器。其中,LED灯主要用作指示(如充电状态)、闪烁功能(如三色灯)等;振动器主要用于闹钟、开关机振动、来电振动等场景。
运作机制
控制类小器件主要包含以下四个模块:控制类小器件API、控制类小器件Framework、控制类小器件Service、HD_IDL层。
图1 控制类小器件
控制类小器件API:提供灯和振动器基础的API,主要包含灯的列表查询、打开灯、关闭灯等接口,振动器的列表查询、振动器的振动器效果查询、触发/关闭振动器等接口。
控制类小器件Framework:主要实现灯和振动器的框架层管理,实现与控制类小器件Service的通信。
控制类小器件Service:实现灯和振动器的服务管理。
HD_IDL层:对不同设备的适配。
约束与限制
在调用Light API时,请先通过getLightIdList接口查询设备所支持的灯的ID列表,以免调用打开接口异常。
在调用Vibrator API时,请先通过getVibratorIdList接口查询设备所支持的振动器的ID列表,以免调用振动接口异常。
在使用振动器时,开发者需要配置请求振动器的权限ohos.permission.VIBRATE,才能控制振动器振动。
Light开发
场景介绍
当设备需要设置不同的闪烁效果时,可以调用Light模块,例如,LED灯能够设置灯颜色、灯亮和灯灭时长的闪烁效果。
说明
使用该功能依赖于硬件设备是否具有LED灯。
接口说明
灯模块主要提供的功能有:查询设备上灯的列表,查询某个灯设备支持的效果,打开和关闭灯设备。LightAgent类开放能力如下,具体请查阅API参考文档。
表1 LightAgent的主要接口
开发步骤
- 1.查询硬件设备上灯的列表。
- 2.查询指定的灯是否支持指定的闪烁效果。
- 3.创建不同的闪烁效果。
- 4.关闭指定的灯。
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模块,例如,设备的按键可以设置不同强度和时长的振动,闹钟和来电可以设置不同强度和时长的单次或周期性振动。
接口说明
振动器模块主要提供的功能有:查询设备上振动器的列表,查询某个振动器是否支持某种振动效果,触发和关闭振动器。VibratorAgent类开放能力如下,具体请查阅API参考文档。
表1 VibratorAgent的主要接口
开发步骤
控制设备上的振动器,需要在“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); }