扫一扫,分享给好友
## 常规设备控制
在“device”目录下的“DeviceApplication.java”文件中,在onInitialize函数中初始化应用。示例代码如下:
@Override public void onInitialize() { AiLifeServiceHelper.initApplication(this); DeviceHandlerAbility.register(this, ""); super.onInitialize(); } @Override public void onEnd() { super.onEnd(); DeviceHandlerAbility.deregister(); AiLifeServiceHelper.disconnect(); }
在“device”目录下的“DeviceHandlerAbility.java”文件中,连接智慧生活基础服务。
进入到控制界面后,在onStart函数里解析传递过来的参数,并且添加连接设备管理服务的操作。连接服务成功之后,进行构建HiLinkDeviceHelper对象、设置数据回调、订阅设备变化事件和获取设备相关信息等操作。示例代码如下:
private AbilityContext abilityContext; /** * 连接智慧生活基础服务,并订阅设备事件,获取设备信息 */ private void connectAiLifeService() { abilityContext.getGlobalTaskDispatcher(TaskPriority.DEFAULT).asyncDispatch(() -> { int result = AiLifeServiceHelper.connect(abilityContext); if (result < ConnectResult.SERVICE_OK) { // TODO: result<0,连接服务失败,直接退出应用 } else { // TODO: result>0,连接服务成功,进行构建HiLinkDeviceHelper对象、设置数据回调、订阅设备变化事件和获取设备相关信息等操作 hiLinkDeviceHelper = new HiLinkDeviceHelper(deviceId); hiLinkDeviceHelper.setHiLinkDataCallback(hiLinkDataCallback); hiLinkDeviceHelper.subscribeDeviceEvent(); hiLinkDeviceHelper.getHiLinkDevice(); } }); }
连接服务返回编码如表1所示。
在“device”目录下的“HiLinkDeviceHelper.java”文件中,构建DeviceManager设备控制对象。示例代码如下:
public class HiLinkDeviceHelper implements DataCallback<String> { private HiLinkDevice mHiLinkDevice; private final String deviceId; private final DeviceManager deviceManager; private HiLinkDataCallback hiLinkDataCallback; /** * 构造方法 * * [url=home.php?mod=space&uid=3142012]@param[/url] deviceId 设备deviceId */ public HiLinkDeviceHelper(String deviceId) { this.deviceId = deviceId; AiLifeServiceParamBuilder builder = new AiLifeServiceParamBuilder(); builder.addScope(ApiParameter.Scope.FEATURE_REQUEST_CLOUD) .addScope(ApiParameter.Scope.FEATURE_CLOUD_CONTROL); PacMapEx parameters = builder.createParameters(); deviceManager = (DeviceManager) AiLifeServiceHelper.getService(AiLifeServiceHelper.DEVICE_MANAGER_SERVICE, parameters); } ... }
在“device”目录下的“HiLinkDeviceHelper.java”文件中,订阅设备变化事件。
在订阅设备变化事件中可以监听到该设备状态信息返回值,从而可以刷新设备对应状态(如设备开关状态等)。示例代码如下:
/** * 订阅设备变化事件 */ public void subscribeDeviceEvent() { List<String> listParam = new ArrayList<>(); listParam.add(deviceId); Objects.requireNonNull(deviceManager).subscribeDeviceEvent(new DeviceListener.Builder() .addDeviceAddListener(hiLinkDevice -> { // TODO: 有新设备添加,进行页面刷新 }) .addDeviceDeleteListener(s -> { // TODO: 监听设备删除变化,进行页面刷新 }) .addDeviceAttachListener(list -> { // TODO: 设备关联状态发生变化,进行页面刷新 }) .addDeviceInfoListener(listParam, (s, hiLinkDevice) -> { // TODO: 监听设备基本信息变化,比如在线/离线等改变,进行页面刷新 }) .addProfileDataListener(deviceId, profileDataChangeEntity -> { // TODO: 监听设备属性变化,如开关等,进行页面刷新 }) .build()); }
在“device”目录下的“HiLinkDeviceHelper.java”文件中,获取设备的相关信息。示例代码如下:
import com.huawei.ailife.service.kit.model.ServiceEntity; . public class HiLinkDeviceHelper implements DataCallback<String> { private HiLinkDevice mHiLinkDevice; ... /** * 获取服务下所挂设备 */ public void getHiLinkDevice() { Objects.requireNonNull(deviceManager).getHiLinkDevice(ApiParameter.Source.FROM_CLOUD, deviceId, new DataCallback<HiLinkDevice>() { @Override public void onSuccess(HiLinkDevice hiLinkDevice) { Objects.requireNonNull(hiLinkDataCallback).onSuccess(DataType.GET_DEVICE, ZSONObject.toZSONString(hiLinkDevice)); mHiLinkDevice = hiLinkDevice; getProfileData(); } @Override public void onFailure(int i, String s) { // TODO: 获取获取服务下所挂设备失败 } }); } /** * 获取服务的数据 */ private void getProfileData() { Objects.requireNonNull(mHiLinkDevice).getProfileData(ApiParameter.Source.FROM_CLOUD, new ArrayList<>(), new DataCallback<List<ServiceEntity>>() { @Override public void onSuccess(List<ServiceEntity> serviceEntities) { // TODO: 获取成功之后,进行页面刷新 } @Override public void onFailure(int i, String s) { // TODO: 获取服务数据失败 } }); } }
在“device”目录下的“HiLinkDeviceHelper.java”文件中,给设备下发命令,示例代码如下:
/** * 给设备下发命令 * * @param serviceId 要控制的设备服务的ID * @param params 控制的参数 */ public void sendCommand(String serviceId, String params) { CommandParam.Builder builder = new CommandParam.Builder() .type(ApiParameter.CommandType.SERVICE_ID) // 要控制的设备服务的类型 .serviceId(serviceId) // 要控制的设备服务的ID(例如:设备的开关按钮的服务ID是:"switch") .mode(ApiParameter.CommandMode.MODE_AUTO); // 控制方式 if (!TextUtils.isEmpty(params)) { ZSONObject zsonObject = ZSONObject.stringToZSON(params); for (String key : zsonObject.keySet()) { builder.addCharastic(key, zsonObject.get(key)); // 控制的参数(例如:设备的开关按钮,开的控制参数是:{on:1}) } } CommandParam commandParam = builder.build(); mHiLinkDevice.sendCommand(commandParam, this); }
本文主要引用整理自官方文档。
发布
HarmonyOS华为鸿蒙系统HarmonyOS操作系统RTOSOpenHarmony同欣智能科技系统架构全场景分布式移植原子化服务鸿蒙操作系统微内核鸿蒙3.0
HarmonyOS Connect认证测试
HarmonyOS/OpenHarmony应用开发-ArkTS自适应线性布局自适应缩放实现
HarmonyOS/OpenHarmony应用开发-ArkTS自适应线性布局自适应拉伸实现
HarmonyOS/OpenHarmony应用开发ArkTS自适应线性布局定位能力实现
OpenHarmony集成昇腾 AI
鸿蒙智联 HarmonyOS Connect 设备小艺语音的接入
鸿蒙智联 HarmonyOS Connect 设备首次发现过程
基于凌蒙派开发板的FastDeploy适配
ArkUI新能力,助力应用开发更便捷
鸿蒙智联 HarmonyOS Connect 设备服务界面样式
电子发烧友网
电子发烧友论坛