1.1. 主要类介绍
1.1.1. JdSmartAccount
提供用户登陆智能主机使用。 setName()表示当前登陆的用户名,如果登陆成功,则赋值,如果退出登陆,则设为空字串""
1.1.2. JdSmartHostInfo
//设定是否支持用户登陆,如果支持则写true,系统提供登录页面(桌面-设置-智能家具设置-智能主机管理(admin),进入登录页面), 否则false(如自行创建的二维码扫码登录)
void setSupportLogin(boolean supportLogin)
//登陆提示信息,如果支持登陆,则生效。建议写品牌名
void setLoginPrompt(String loginPrompt)
/*
* 设定是否使能场景编辑,默认为true
* 若为false, 则只支持获取场景名,和执行场景,仅需实现getScenes和controlScene两个接口
* 若为true, 则支持场景所有功能,包括场景编辑、执行、场景绑定,需要实现所有场景相关接口
*/
void setEnableSceneEdit(boolean enable)
//是否支持查看传感器类设备报警记录
void setShowSensorDetail(boolean showSensorDetail)
//是否支持选择家庭
void setEnableSelectFamily(boolean enableSelectFamily)
//设置当前选中家庭名称
void setCurFamilyName(String curFamilyName)
//设置登录类型
void setLoginType(String loginType)
//设置登录时的相关参数,如果没有可不设置
void setLoginParas(JdSmartLoginParas loginParas)
/*
* 设置版本号,可以直接设为3,也支持12
* 设为1,表示支持在进入房间管理页前显示登录状态页(如果已登录成功,会跳过登录状态页,直接进入房间管理页)
* 设为2,支持授权的方式登录
* 设为3,支持显示设备离线在线状态
*/
void setVersion(int version)
1.1.3. JdSmartDevice
抽像表示一个智能设备
//设备唯一标识
setDeviceId()
//设备类型
setDeviceType()
/*
* 设备子类型 如果设备是红外设备,需要另外设置为子类型JdSmartDeviceType.DEVICE_SUB_TYPE_IR
* 如果是多功能控制盒设备,需要另外设置为子类型JdSmartDeviceType.DEVICE_SUB_TYPE_CONTROL_BOX
*/
setDeviceSubType()
/*
* 如果是红外设备,设置此设备已学过的红外键列表,键值分隔符为","
* 例如,电视机已经学习了开关,静音键,则这样调用setJdIRkeyList(JdSmartIRConstant.IR_KEY_TV_ON+"," + JdSmartIRConstant.IR_KEY_TV_OFF+"," + JdSmartIRConstant.IR_KEY_TV_MUTE +",");
*/
setJdIRkeyList()
//设备名称
setDeviceName()
//会返回一个JdSmartCtrlCmd变量,表示设备当前的状态,详情见JdSmartCtrlCmd类
getJdSmartCtrlCmd()
1.1.4. JdSmartCtrlCmd
通过deviceId与具体JdSmartDevice设备关联,JdSmartDevice类中同时包含JdSmartCtrlCmd类
此类包含order,value1,value2,value3,value4,groupData等变量
有两个含义,
- 智能设备的命令,一般指接收到设备控制命令或场景执行命令时
- 设备当前状态,当向UI端更新设备的最新状态时,表示当前状态。
更详细信息,见demo 代码CustomSmartHost.java 代码中函数
void controlDevice(JdSmartCtrlCmd cmd, JdbaseCallback callback)
void changeDeviceStatus(JdSmartCtrlCmd cmd, JdSmartDevice dev)
- 如果接收到设备控制命令或场景执行命令时,表示如下
order表示命令,详情见JdSmartDeviceOrder类
value1, value2, value3, value4 表示此命令所带的参数
groupData 是jason字符串,如果设备的命令较复杂,用groupData一次传递传多个参数值
例如:
收到开灯命令:
JdSmartCtrlCmd.getOrder()将等于JdSmartDeviceOrder.ON
JdSmartCtrlCmd.getValue1(),因为开灯命令简单不用带参数,不必关注
收到设置空调到下一个模式命令:
JdSmartCtrlCmd.getOrder()将等于JdSmartDeviceOrder.NEXT
JdSmartCtrlCmd.getValue1()将等于AIRCONDITION_MODE_TYPE
- 更新设备最新状态给UI,可以不必处理JdSmartCtrlCmd.order成员变量,表示如下:
value1- value4 表示此设备的当前状态是什么
groupData 是jason字符串,如果设备的命令较复杂,用groupData一次传递传多个值
例如: 更新灯的当前状态为打开:
JdSmartCtrlCmd.setValue1("0")
更新空调的状态为制冷模式,风速高,左右扫风前,温度28:
JSONObject jobj = new JSONObject();
jobj.put(JdSmartDeviceOrder.AIRCONDITION_MODE_TYPE, JdSmartDeviceOrder.AIRCONDITION_MODE_COOL);
jobj.put(JdSmartDeviceOrder.AIRCONDITION_WIND_RATE_TYPE, JdSmartDeviceOrder.AIRCONDITION_WIND_RATE_LOW);
jobj.put(JdSmartDeviceOrder.AIRCONDITION_WIND_DIRECTION_TYPE, JdSmartDeviceOrder.AIRCONDITION_WIND_DIRECTION_LEFT_RIGHT);
jobj.put(JdSmartDeviceOrder.TEMPERATURE, "28");
airConditionCmd.setGroupData(jobj.toJSONString());
1.1.5. JdSmartDeviceType
包括开关,普通灯,调光灯,窗帘,插座,空调,电视,空气净化器,开窗器,温控器,多功能控制盒,各种传感器
注意:
DEVICE_TYPE_CURTAINS 表示可以精确获取移动位置的窗帘
DEVICE_TYPE_CURTAINS_NO_POSITION 表示不能精确获取移动位置的窗帘
1.1.6. JdSmartDeviceOrder
- ON,OFF,灯,开关,插座等简单设备的开与关
- OPEN,CLOSE,MOVE_TO_LEVEL窗帘,空调,空气净化器,开窗器,温控器的开与关
- MOVE_TO_LEVEL, PAUSE,STOP 表示移动位置,总比是100,例如并开窗帘,则是50,对于空调来说,MOVE_TO_LEVEL调整温度
- NEXT 切换到设备的下一个模式。空调设备是直接切换到下一个工作模式,风速等级或风向
- SET 设定设备的某个属性值
- MUTE 静音正在报警的设备
1.1.7. JdSmartScene
表示场景类,有一个唯一sceneNo,标识场景
- getSceneNo()和setSceneNo() //获得和设置场景号
- getSceneId()和setSceneId() //已过时,不建议使用
1.1.8. JdSmartSceneBind
表示场景绑定,它的成员变量sceneNo与JdSmartScene类的sceneNo关联
场景绑定的含义是,场景中包含哪些设备命令。
例如,假设有一个回家场景,里面包含动作,当主人回家后,开客厅灯,开电视,开主卧房间空间
那么将包含4条指令,List
1.1.9. IJdSmartHost
主机相关接口
//获取主机信息
JdSmartHostInfo getHostInfo()
//搜索并绑定主机
void searchAndBindHost(boolean isSearch, JdbaseCallback callback)
// 解除绑定
void unbindHost(JdbaseCallback callback)
登录相关接口
//获取登录的帐户信息
JdSmartAccount getAccount()
//登录
void login(String name, String pwd, JdbaseCallback callback)
//退出登录
void logout(JdbaseCallback callback)
//获取当前登录状态
String getLoginState()
//设置当前登录状态
setLoginState(int state, String msg)
场景相关
//执行场景
void controlScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
//获得所有场景
void getScenes(JdbaseCallback callback)
//创建场景
void createScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
//删除场景
void deleteScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
//修改场景
void updateScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
场景音乐相关
使用场景是这样的, 手机端执行场景时,背景音需要播放相对应的场景音乐。 如果背景音乐可以收到手机场景执行的通知,可以在对接包中,调用此接口来播放场景号对应的场景音乐
//根据场景id,播放相应的场景音乐
void playSceneMusicFromSys(String sceneNo)
场景绑定相关
//获得某个场景的场景绑定
void getSceneBind(JdSmartScene jdsmartScene, JdbaseCallback callback)
//创建场景绑定
void createSceneBind(List<JdSmartCtrlCmd> cmds, JdbaseCallback callback)
//删除场景绑定
void deleteSceneBind(List<JdSmartCtrlCmd> cmds, JdbaseCallback callback)
//修改场景绑定
void updateSceneBind(List<JdSmartCtrlCmd> cmds, JdbaseCallback callback)
设备相关
//自动导入接口中,重新导入时,会首先调用这个接口
void refeshDevice()
//执行设备指令
void controlDevice(JdSmartCtrlCmd cmd, JdbaseCallback callback)
//获得所有设备信息
void getAllDevices(JdbaseCallback callback)
//获得指定设备信息
void getDeviceDetail(final String deviceID, final JdbaseCallback callback)
//获得同类型所有设备
JdSmartDevices getDevicesByType(int deviceType)
//更新设备状态
void registerDeviceChange(JdbaseCallback callback)
//获得sensor类型设备的存储记录
void getSensorRecord(String deviceid, int pageIndex, int pageSize, JdbaseCallback callback)
1.1.10. CustomSmartService
CustomSmartService.java是与其他Jd软件服务通信的服务类, 不需要做任何修改。
首先在AndroidManifest.xml 中配置启动CustomSmartService.java服务的action名
<action android:name="com.judian.service.CustomSmartService" /> //请不要更改这个,因为SDK端依赖这个
<service
android:name=".service.CustomSmartService"
android:exported="true">
<intent-filter>
<action android:name="com.judian.service.CustomSmartService" />
</intent-filter>
</service>
1.1.11. CustomSmartHost
CustomSmartHost.java是最终实现的类,实现IJdSmartHost.java接口,客户根据自己的SDK实现相应的接口方法,重点在这个文件
void init(Context context)
当程序运行后,将调用init,可将初始化代码搜索主机,第二次登陆主机(第一次成功登陆,并保存用户名,再次开机后登陆)的代码写此处 当成功登陆主机后,为了减少网络延时,建议立即获取设备列表
/*
* 初始化部分,当程序运行后,将调用
*
* @param context android上下文
*/
void init(Context context);
JdSmartHostInfo getHostInfo()
返回一个JdSmartHostInfo,表示主机支持的功能
/**
* 获取主机信息,需要配置JdSmartHostInfo类
*
* @return JdSmartHostInfo 返回主机信息
*/
JdSmartHostInfo getHostInfo();
void login(String name, String pwd, JdbaseCallback callback)
支持登陆,则需要用户实现,否则直接返回成功,callback.onResult(JdbaseContant.RESULT_SUCCESS, “success”, "");
/**
* 用户认证登陆
* 例如:
* 成功 callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* 失败 callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
* @param name 用户名
* @param pwd 密码
* @param callback 回调登陆结果
*/
void login(String name, String pwd, JdbaseCallback callback);
JdSmartAccount getAccount()
返回JdSmartAccount信息 如果不支持登陆,则JdSmartAccount.name 应该设为““ 如果未登陆,则JdSmartAccount.name 应该设为””,否则设为当前登陆的用户名,代表已登陆
/**
* 获得已登陆的账户信息
*
* @return 如果未登陆,则JdSmartAccount.name 应该设为"",否则设为当前登陆的用户名,代表已登陆
*/
JdSmartAccount getAccount();
private void setLoginState(int state, String msg)
设置当前登录状态
void logout(JdbaseCallback callback)
支持登陆,则需要用户实现,否则直接返回成功,callback.onResult(JdbaseContant.RESULT_SUCCESS, “success”, "");
/**
* 退出登陆
*<pre>
*例如:
* 成功 callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* 失败 callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
*</pre>
* @param callback 回调退出信息
*
*/
void logout(JdbaseCallback callback);
void searchAndBindHost(boolean isSearch, JdbaseCallback callback)
一般不用实现,请不要改动 支持搜索主机时,实现此接口,如果不支持,直接返回成功,callback.onResult(JdbaseContant.RESULT_SUCCESS, “success”, "");
/**
* 搜索,并绑定主机网关
* 例如: callback.onResult(JdbaseContant.RESULT_SUCCESS, "网关信息", "");
* @param isSearch 是否动态搜索
* @param callback 回调搜索结果
*/
void searchAndBindHost(boolean isSearch, JdbaseCallback callback);
void unbindHost(JdbaseCallback callback)
从主机网关解除所有设备与场景,这是危险操作,建议不实现,callback.onResult(JdbaseContant.RESULT_SUCCESS, “success”, "");
/**
* 从主机网关解除所有设备与场景,危险操作
* <pre>
* 例如:
* callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* </pre>
* @param callback 回调结果
*/
void unbindHost(JdbaseCallback callback);
public void selectFamily(String familyID, JdbaseCallback callback)
选择家庭,以显示该家庭下的所有设备
void getScenes(JdbaseCallback callback)
获取所有场景信息,场景信息通过json字符串返回。
/**
* 获取所有场景
* <pre>
* 例如:
* JdSmartScenes jss = new JdSmartScenes();
* for(Scenexxxx s: list){
* JdSmartScene js = new JdSmartScene();
* js.setSceneNo(s.getNo());
* js.setSceneId(s.getId()+"");
* js.setSceneName(s.getName());
* js.setVendor(xxxxx);
* jss.addScene(js);
* }
* callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(jss), "");
* </pre>
* @param callback 回调结果
*
*/
void getScenes(JdbaseCallback callback);
void createScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
创建一个场景,传入的仅是一个jdsmartScene,里面包含新场景名。 实现时,注意检查是否存在相同的场景名。
/**
* 创建场景
* <pre>
* 例如:
* JdSmartScene js = new JdSmartScene();
* js.setSceneName("xxx"); //与传入的场景名一致
* js.setSceneNO(xxxxId() + "");
* callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(js), "");
* </pre>
* @param jdsmartScene 创建的场景, 根据场景的名字screneName创建
* @param callback 回调创建结果
*/
void createScene(JdSmartScene jdsmartScene, JdbaseCallback callback);
void deleteScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
根据场景号或场景名删除一个场景
/**
* 删除场景
* <pre>
* 例如:
* callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
* </pre>
* @param jdsmartScene 删除的场景, 需要根据jdsmartScene.getSceneNo()删除场景
* @param callback 回调删除结果
*/
void deleteScene(JdSmartScene jdsmartScene, JdbaseCallback callback);
void updateScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
更改场景名字
/**
* 修改场景
* <pre>
* 例如:
* callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
* </pre>
* @param jdsmartScene 修改的场景, 需要根据jdsmartScene.getSceneNo()删除场景
* @param callback 回调修改的结果
*/
void updateScene(JdSmartScene jdsmartScene, JdbaseCallback callback);
void createSceneBind(List cmds, JdbaseCallback callback)
创建一个场景绑定。 “场景绑定”是一个名词,表示一些设备与某个场景结合在一起
JdSmartCtrlCmd表示一个设备的指令操作,就是将这些设备的指令操作与场景结合在一起。
/**
* 创建场景绑定
* <pre>
* 例如:
* callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
* </pre>
* @param cmds 绑定到场景的命令列表
* @param callback 回调绑定结果
*/
void createSceneBind(List<JdSmartCtrlCmd> cmds, JdbaseCallback callback);
void deleteSceneBind(List cmds, JdbaseCallback callback)
删除场景绑定
/**
* 删除场景绑定
* <pre>
* 例如:
* callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
* </pre>
* @param cmds 删除的场景的命令列表
* @param callback 回调删除结果
*/
void deleteSceneBind(List<JdSmartCtrlCmd> cmds, JdbaseCallback callback);
void updateSceneBind(List cmds, JdbaseCallback callback)
修改场景绑定
/**
* 修改场景绑定
* <pre>
* 例如:
* callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
* callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* </pre>
* @param cmds 修改的场景的命令列表
* @param callback 回调删除结果
*/
void updateSceneBind(List<JdSmartCtrlCmd> cmds, JdbaseCallback callback);
void getSceneBind(JdSmartScene jdsmartScene, JdbaseCallback callback)
获得场景的所有场景绑定信息
/**
* 获取场景绑定
* <pre>
* 例如:
* JdSmartDevices jds = new JdSmartDevices();
* JdSmartDevice device1 = new JdSmartDevice();
* JdSmartDevice device2 = new JdSmartDevice();
* jds.addDevice(device1);
* jds.addDevice(device2);
* callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(jds), "");
* </pre>
* @param jdsmartScene 场景
* @param callback 回调结果
*/
void getSceneBind(JdSmartScene jdsmartScene, JdbaseCallback callback);
void getAllDevices(JdbaseCallback callback)
获取所有设备
/**
* 获取所有设备列表
* <pre>
* 例如:
* JdSmartDevices jds = new JdSmartDevices();
* JdSmartDevice device1 = new JdSmartDevice();
* JdSmartDevice device2 = new JdSmartDevice();
* jds.addDevice(device1);
* jds.addDevice(device2);
* callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(jds), "");
* </pre>
* @param callback 回调结果
*/
void getAllDevices(JdbaseCallback callback);
void getAllDeviceType(JdbaseCallback callback)
获得所有的设备类型值,注意是所有在线的设备类型值
/**
* 得到所有的设备类型值
* <pre>
* 例如:
* List<Integer> result = new ArrayList<Integer>();
* JdSmartDevice device1 = new JdSmartDevice();
* JdSmartDevice device2 = new JdSmartDevice();
* result.add(device1.getDeviceType());
* result.add(device2.getDeviceType());
* callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(result), "");
* </pre>
* @param callback 回调类型列表
*/
void getAllDeviceType(JdbaseCallback callback);
JdSmartDevices getDevicesByType(int deviceType)
获取同类型的所有设备
/**
* 获取同类型的所有设备
* @param deviceType 设备类型值, 来自于JdSmartDevice.getDeviceType()
* @return JdSmartDevices 直接返回相同类型所有设备
*/
JdSmartDevices getDevicesByType(int deviceType);
void getDeviceDetail(String deviceID, JdbaseCallback callback)
获取某个指定devId的设备
/**
* 获取某个指定devId的设备
* <pre>
* 例如:
* callback.onResult(JdSmartConstant.RESULT_SUCCESS, JSON.toJSONString(jdSmartDevice), "")
* </pre>
* @param deviceID 设备的devId, 或者 JdSmartDevice的json字符串
* @param callback 回调结果
*/
void getDeviceDetail(String deviceID, JdbaseCallback callback);
void controlDevice(JdSmartCtrlCmd cmd, JdbaseCallback callback)
控制设备,cmd里order表示要执行的操作指令, value1, value2, value3, value4表示命令参数
/**
* 控制设备
* <pre>
* 例如:
* callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
* </pre>
* @param cmd 设备命令
* @param callback 回调控制结果
*/
void controlDevice(JdSmartCtrlCmd cmd, JdbaseCallback callback);
void controlScene(JdSmartScene jdsmartScene, JdbaseCallback callback)
控制场景
/**
* 控制场景
* <pre>
* 例如:
* callback.onResult(JdbaseContant.RESULT_SUCCESS, "success", "");
* callback.onResult(JdbaseContant.RESULT_FAIL, "fail", "");
* </pre>
* @param jdsmartScene 场景
* @param callback 负责回调新的设备信息给上层
*/
void controlScene(JdSmartScene jdsmartScene, JdbaseCallback callback);
void getSensorRecord(String deviceid, int pageIndex, int pageSize, JdbaseCallback callback)
获取感应器记录的内容,因为内容可能很多,所以根据页索引,页大小返回数据
/**
* 获取感应器记录的内容
* <pre>
* 例如:
* List<JdSmartSensorRecordGroup> result = new ArrayList<JdSmartSensorRecordGroup>();
* JdSmartSensorRecord record1 = new JdSmartSensorRecord();
* JdSmartSensorRecord record2 = new JdSmartSensorRecord();
* result.add(record1);
* result.add(record2);
* callback.onResult(JdbaseContant.RESULT_SUCCESS, JSON.toJSONString(result), "");
* </pre>
* @param deviceid 设备ID
* @param pageIndex 页码,从1开始
* @param pageSize 每页的数量
* @param callback 回调信息给上层
*/
void getSensorRecord(String deviceid, int pageIndex, int pageSize, JdbaseCallback callback);
void registerDeviceChange(JdbaseCallback callback)
当设备信息有变化时,通过callback上传设备信息
/**
* 当设备信息有变化时,应该调用回调
* 例如:
* callback.onResult(JdSmartConstant.ACTION_REPORT_DEVICE_STATUS,JSON.toJSONString(jdSmartDevice), "")
* @param callback 负责回调新的设备信息给上层
*/
void registerDeviceChange(JdbaseCallback callback);