控制页对我们来说至关重要,是软件实现功能的第一步,我们需要对xml文件有一定的熟悉程度,此次项目中,我们需要写四个垃圾桶的控制布局。在resources->base->layout新建xxx.xml文件
该布局分为三段式:最上面为导航栏布局,中间布局是Dustbin的logo,下方布局是四个垃圾桶的控制部分
页面代码展示:
效果图如下:
IoT 是指将装置、机器、产品和设备连接到云并配置为收集和安全地传输数据,我们以华为IoT为例
接下来就是控制页业务逻辑的编写,在slice目录下新建 DustbinAbilitySlice.java文件(可自定义),我们设想对于开关的图片点击来对垃圾桶发送指令,首先我们需要在slice页面中的onstart()方法中使用findComponentById来找到图像、文本组件,(以可回收垃圾桶为例)将图像组件赋值给Recyclables变量,将文本组件值赋给currentDustbinRValue,开关图像用于点亮图标SwitchImg_R,
private Image SwitchImg_R;
private Text currentDustbinRValue;
Image Recyclables;
因为我们使用的是接口,所以需要重写onclick()方法,此时我们的括号里可以写上this,表示点击该图片时,调用本方法。
Recyclables = (Image) findComponentById(ResourceTable.Id_dustbin_Recyclables_image_switch);////找到可回收开关组件
Recyclables.setClickedListener(this);//绑定单击事件
SwitchImg_R = (Image) findComponentById(ResourceTable.Id_dustbin_Recyclables_image_switch);//可回收开关图像
currentDustbinRValue = (Text) findComponentById(ResourceTable.Id_dustbin_current_valueR);//可回收容量文本
以下服务名和命令可参考Dustbin的profile文件
public static Command Dustbin_OpenRecyclables_Command(boolean isOn) {
JSONObject params = new JSONObject();
if (isOn) {
params.put("OpenRecyclables", "ON");
} else {
params.put("OpenRecyclables", "OFF");
}
return new Command("Open_R",
"SmartDustbin_DATA", JSONObject.toJSONString(params));
}
如需要进入控制页更新,可在onStart()中调用initDeviceState()
private void initDeviceState() {
KLog.i("[220207x01]initDevice");
OKHttpUtilsRx2.INSTANCE.getApi().getDeviceInfo(deviceId, PreferencesUtil.getUserId(getContext()))
.compose(OKHttpUtilsRx2.INSTANCE.ioMain())
.subscribe(new OKHttpUtilsRx2.SubjectImpl<RespondBase<DeviceResult>>() {
@Override
public void onNext(RespondBase<DeviceResult> deviceInfo) {
KLog.i(deviceInfo);
if(deviceInfo.isSuccess()){
KLog.i("isSuccess");
}
if (deviceInfo.isSuccess() && deviceInfo.getResult().isOnline()) {
// 更新状态
String property = deviceInfo.getResult().getProperty();
KLog.i(property);
String value_RC = DeviceStateUtil.getKeyValue(property, "Recyclables_Capacity");
String value_UC = DeviceStateUtil.getKeyValue(property, "Unrecyclable_Capacity");
String value_KC = DeviceStateUtil.getKeyValue(property, "KitchenGarbage_Capacity");
String value_OC = DeviceStateUtil.getKeyValue(property, "OtherRubbish_Capacity");
if (value_RC.equals("100")||value_UC.equals("100")||value_KC.equals("100")||value_OC.equals("100")) {
// 告警页面
KLog.i("Alert Dustbin");
isAlertDustbinON = true;
goToAlert();
}
currentDustbinRValue.setText(String.format("%s", value_RC));
currentDustbinUValue.setText(String.format("%s", value_UC));
currentDustbinKValue.setText(String.format("%s", value_KC));
currentDustbinOValue.setText(String.format("%s", value_OC));
} else {
initDustbinState();
}
}
@Override
public void onError(Throwable throwable) {
initDustbinState();
}
});
}//初始化垃圾桶状态
private void Recyclables(Component component) {
isONR = !isONR;
if (isONR) { ;
SwitchImg_R.setPixelMap(ResourceTable.Media_icon_switch_on);
} else {
SwitchImg_R.setPixelMap(ResourceTable.Media_icon_switch_off);
}
// 发送命令
if (!isSetCommand) {
sendCommand(CommandUtil.Dustbin_OpenRecyclables_Command(isONR));
}//Recyclables
}
public static final String ACTION_DUSTBIN = "action.dustbin";
addActionRoute(ACTION_DUSTBIN, DustbinAbilitySlice.class.getName()); //智能语音垃圾桶
完成以上步骤,我们就完成了数字管家的功能代码编写。