灯光服务
灯光服务提供 API 调用控制设备灯光的能力。作为灯光服务访问代理的 LightManager 对象, 提供了灯光服务的主要 API,可通过 RobotContext 对象获取到。
LightManager lightManager = aRobotContext.getSystemService(LightManager.SERVICE);
获取灯光列表
获取设备拥有的灯光数量以及灯光的详细信息,可通过以下代码实现:
List<LightDevice> /* [1] */ devices = lightManager.getDeviceList();
[1] 灯光集合,LightDevice 是灯光的信息,具体包括:
| 属性 getter | 说明 |
|---|---|
| LightDevice.id | 灯光的唯一标识 |
| LightDevice.name | 灯光的名称 |
| LightDevice.description | 灯光的描述 |
如果想通过灯光的 id 查找到灯光的详细信息,可通过以下代码实现:
try { LightDevice lightDevice = lightManager.getDevice("lightId"); } catch (LightNotFoundException e) { // 灯光的详细没有查到时将运行至此 }
开-关灯
如果想打开灯光,可通过以下代码实现:
Map<String, Integer> /* [1] */ devices = new HashMap<>(); devices.put("lightId", Color.BLUE); lightManager.turnOn(devices);
[1] 想要打开的灯光的集合,key 是灯光的 id,value 是灯光打开后显示的颜色。
如果只想打开一个灯光,可通过如下代码实现:
lightManager.turnOn("lightId", Color.BLUE);
如果想关闭灯光,可通过如下代码实现:
List<String> devices = new ArrayList<>(); devices.add("lightId"); lightManager.turnOff(devices);
如果想关闭多个灯,但又不想创建集合,可通过如下代码实现:
lightManager.turnOff("lightId001", "lightId002");
如果只想关闭一个灯光,可通过如下代码实现:
lightManager.turnOff("lightId");
如果想要知道灯光是打开还是关闭,可通过如下代码实现:
boolean isTurnedOn = lightManager.isTurnedOn("lightId");
返回值 isTurnedOn 为 true 表示灯光是打开的。
改变灯光颜色
如果想要改变灯光颜色,可通过如下代码实现:
Map<String, Integer> /* [1] */ devices = new HashMap<>(); devices.put("lightId", Color.BLUE); lightManager.changeColors(devices);
[1] 想要改变颜色的灯光的集合,key 是灯光的 id,value 是灯光显示的颜色。
如果只想改变一个灯光的颜色,可通过如下代码实现:
lightManager.changeColor("lightId", Color.BLUE);
如果想要获取灯光的颜色,可通过如下代码实现:
int color = lightManager.getColor("lightId");
改变灯效
如果想要让灯光展示一些动态效果,可通过如下代码实现:
promise /* [2] */ = lightManager.displayEffect("lightId", Uri.parse("light://effect/1") /* [1] */) .progress(new ProgressCallback<DisplayProgress>() { @Override public void onProgress(DisplayProgress displayProgress /* [3] */) { // 灯效展示过程会多次运行至此 } }) .done(new DoneCallback<Void>() { @Override public void onDone(Void aVoid) { // 灯效展示完毕会运行至此 } }) .fail(new FailCallback<LightException>() { @Override public void onFail(LightException e) { // 灯效展示出错会运行至此 } });
[1] 要展示的灯效的唯一标识。
[2] 返回等待展示进度与结果的异步对象,通过该对象可等待或监听进度与结果以及取消展示过程。具体用法参考 Promise。
[3] 异步回调的 DisplayProgress 对象描述了灯效展示的进度信息,具体包括:
| 属性 getter | 说明 |
|---|---|
| DisplayProgress.progress | 进度信息began:展示开始 ended:展示结束 |
通过指定选项,可调整灯光展示的行为。
DisplayOption /* [1] */ option = new DisplayOption.Builder( "lightId",Uri.parse("light://effect/1")).build(); promise = lightManager.displayEffect(option);
[1] DisplayOption 对象通过 DisplayOption.Builder 构建, 使用说明如下:
| 方法 | 说明 | 默认值 |
|---|---|---|
| Builder.constructor(lightId, effectUri) | 构造时必须传入灯光的 id, 以及灯效的唯一标识 | |
| Builder.setSticky(sticky) | 展示过程是否允许被其他线程打断true : 不运行被打断 |
false |
| Builder.setLoops(loops) | 循环展示的次数 0:无线循环 |
0 |
| Builder.setExtension(extension) | 自定义参数 | JsonObjectString.EMPTY_OBJECT |
如果想展示多个灯效,可指定多个选项,通过如下 2 种方式实现:
DisplayOption option1 = new DisplayOption.Builder( "lightId001",Uri.parse("light://effect/1")).setLoops(1).build(); DisplayOption option2 = new DisplayOption.Builder( "lightId002",Uri.parse("light://effect/2")).setLoops(1).build(); promise = lightManager.displayEffectSerially(option1, option2);
List<DisplayOption> options = new ArrayList<>(); options.add(option1); options.add(option2); promise = lightManager.displayEffectSerially(options);
灯光灯效列表
灯光和灯效可以通过常量设置
| 灯光颜色 | int |
|---|---|
| 红色 | RED |
| 白色 | WHITE |
| 蓝色 | BLUE |
| 绿色 | GREEN |
| 橙色 | ORANGE |
| 黄色 | CYAN |
| 紫色 | PURPLE |
| 灯效 | int |
|---|---|
| 呼吸 | BREATHE |
| 警报效果 | WARNING |
| 闪一次 | FLASH_ONE |
| 闪两次 | FLASH_TWO |
| 常亮3秒 | BRIGHT_3_SECOND |
| 常亮 | BRIGHT_INFINITY |