AbleCloud物联网云平台开发指导Android篇3
扫描二维码
随时随地手机看文章
设备控制
下面以开关灯为例,通过二进制、json两种格式简要介绍与安卓设备通讯的例子。实际开发请只选择以下其中一种消息格式。
注意:msgCode从[64,200)范围代表控制查询及响应,[200,255]范围代表消息主动上报,其他范围为AbleCloud内部使用,不允许重复定义。
1 使用二进制消息格式进行通讯
1.1 设备控制
以开关灯为例,协议如下:
//请求数据包
{ 68 :[
//关灯(二进制流,由厂商自己解析)
{ 0 , 0 , 0 , 0 },
//开灯(二进制流,由厂商自己解析)
{ 1 , 0 , 0 , 0 }
]}
//响应数据包
{ 102 :[
//失败(二进制流,由厂商自己解析)
{ 0 , 0 , 0 , 0 },
//成功(二进制流,由厂商自己解析)
{ 1 , 0 , 0 , 0 }
]}
-------------------------------------
private static final int CODE_SWITCH_REQ = 68;
private static final int CODE_SWITCH_RESP = 102;
private static final int OFF = 0;
private static final int ON = 1;
AC.handleMsg(new ACMsgHandler() {
@Override
public void handleMsg(ACDeviceMsg req, ACDeviceMsg resp) {
switch (reqMsg.getMsgCode()) {
case CODE_SWITCH_REQ:
//请求消息体
byte[] payload = reqMsg.getPayload();
if (payload[0] == ON) {
if (Light.turnLightOn()) {
respMsg.setPayload(new byte[]{1, 0, 0, 0}); //开灯成功
} else
respMsg.setPayload(new byte[]{0, 0, 0, 0}); //开灯失败
} else {
if (Light.turnLightOff()) {
respMsg.setPayload(new byte[]{1, 0, 0, 0}); //关灯成功
} else
respMsg.setPayload(new byte[]{0, 0, 0, 0}); //关灯失败
}
respMsg.setMsgCode(CODE_SWITCH_RESP);
break;
}
}
});
2 使用JSON消息格式进行通讯
2.1 设备控制
以开关灯为例,协议如下:
//请求数据包
{ 70 :[
//关灯
{"switch", 0}
//开灯
{"switch", 1}
]}
//响应数据包--JSON格式的resp不需要设置msgCode
{
//失败
{"result", false},
//成功
{"result", true}
]}
-----------------------------
private static final int CODE_JSON = 70;
private static final int OFF = 0;
private static final int ON = 1;
AC.handleMsg(new ACMsgHandler() {
@Override
public void handleMsg(ACDeviceMsg req, ACDeviceMsg resp) {
//JSON格式的resp不需要设置msgCode
switch (reqMsg.getMsgCode()) {
case CODE_JSON:
//请求消息体
JSONObject req = new JSONObject(reqMsg.getJsonPayload());
//请求操作类型,关灯或开灯
int value = req.getInt("switch");
//响应消息体
JSONObject resp = new JSONObject();
if (value == ON) {
if (Light.turnLightOn()) {
resp.put("result", true);
respMsg.setJsonPayload(resp.toString()); //开灯成功
} else {
resp.put("result", false);
respMsg.setJsonPayload(resp.toString()); //开灯失败
}
} else if (value == OFF) {
if (Light.turnLightOff()) {
resp.put("result", true);
respMsg.setJsonPayload(resp.toString()); //关灯成功
} else {
resp.put("result", false);
respMsg.setJsonPayload(resp.toString()); //关灯失败
}
}
break;
}
}
});