此SDK仅针对安卓平台进行集成,旨在集成HDL SDK后,可调用相关API,实现HDL设备的搜索、控制、获取当前状态等。在文档最后会提供demo示例,详情请查看demo。以下详细列出HDL SDK集成的相关信息:
1.1 目前仅支持Android开发平台,Android SDK 版本4.2以上。
1.2 支持Android Studio IDE集成。
dependencies {
compile(name:'hdl_lib_v1.5.8.20190227_beta', ext:'aar')
}
1.3 调试SDK建议使用真机调试,模拟器的ip地址问题会发生错误。
2.1.1 这个依赖包为接收HDL Lib的EventBusEvent事件,必须依赖才能接收。(详情请看demo)
dependencies {
compile 'org.greenrobot:eventbus:3.0.0'
}
2.1.2 这个为接收On设备的okhttp包,非必须依赖,若要集成On设备获取api则必须依赖。
dependencies {
compile 'com.squareup.okhttp3:okhttp:3.4.1'
}
2.2 可在LaunchActivity或开启Service初始化:
HDLDeviceManager.init(Context context);
(因不同厂家需要此操作从1.2.14版本后不再初始化EventBus,可自行初始化EventBus具体请查看demo)。因SDK初始化仅仅开启一个线程做接收、发送操作,程序应确保该线程存活。建议使用Service初始化SDKContext.startService()
,Service不能新开进程初始化SDK,因为SDK使用EventBus通讯,EventBus不支持跨进程通讯。若要使用双进程保活机制,需要注意将SDK初始化放在同一进程这个问题。
2.3 SDK初始化的端口为6000,若有其他程序占用6000端口,则SDK无法初始化,报错。
3.1 HDL SDK提供搜索设备的api,稍等数秒返回设备信息。
3.2 调用HDLCommand.getHomeDevices(Context context);
获取HDL家居设备数据
3.3 调用HDLCommand.getRcuDevices(Context context,String rcuIp);
获取HDL酒店设备数据
3.3 必须在此activity中实现EventBus的方法,(具体请查看demo)搜索返回:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onDevicesInfoEventMain(DevicesInfoEvent event){
devicesDatas = event.getDesDataList();
tv.setText("size = "+event.getDesDataList().size());
listString.clear();
for(int i = 0;i<devicesDatas.size();i++){
if(TextUtils.isEmpty(devicesDatas.get(i).getRemark())){
listString.add("暂无备注");
}else{
listString.add(devicesDatas.get(i).getRemark());
}
}
adapter.notifyDataSetChanged();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onScenesInfoEventMain(SceneInfoEvent event){
devicesDatas = event.getDesDataList();
tv.setText("size = "+event.getDesDataList().size());
listString.clear();
for(int i = 0;i<devicesDatas.size();i++){
if(TextUtils.isEmpty(devicesDatas.get(i).getRemark())){
listString.add("暂无备注");
}else{
listString.add(devicesDatas.get(i).getRemark());
}
}
adapter.notifyDataSetChanged();
}
在搜索中获取到信息为设备信息,在demo中的ApplianceActivity显示设备信息。设备信息列表显示的是此设备所有回路设备。 如果需要确定哪个设备哪个回路,则可通过子网id和设备id,大类,小类,回路号。
4.1 ApplianceActivity中必须初始化EventBus(具体请查看demo)
4.2 接收备注回调,调用EventBus的返回
@Subscribe(threadMode = ThreadMode.MAIN)
public void onAppliancesInfoEventMain(AppliancesInfoEvent event){
appliancesInfos = event.getAppliancesInfos();
listString.clear();
for(int i =0;i<appliancesInfos.size();i++){
if(TextUtils.isEmpty(appliancesInfos.get(i).getRemarks())){
listString.add("暂无备注");
}else{
listString.add(appliancesInfos.get(i).getRemarks());
}
}
adapter.notifyDataSetChanged();
}
4.3 获取设备类型
通过 appliancesInfo.getDeviceType()
可获取到设备类型。具体参数如下
//1:调光回路(灯) 2:开关回路(灯) 3:混合调光类 (灯) 4:混合开关类(灯)
// 5:开合帘电机(窗帘)6:卷帘电机(窗帘) 7:窗帘模块 (窗帘)8:HVAC 模块(空调)
// 9:通用空调面板(空调) 10:背景音乐模块(音乐) 11:第三方背景音乐模块(音乐)
/ 12:逻辑模块(场景) 13:全局逻辑模块(场景)
// 可以直接总结为:
//1、2、3、4 为灯
//5、6、7 为窗帘
//8、9 为空调
//10、11 为音乐
//12、13 为场景
appliancesInfo.getDeviceType()
5.1调用HDLCommand.getDeviceState(appliancesInfo);
参数为固定参数。即可获取相关设备对应回路的状态,必须要调用EventBus接收返回信息,具体请查看demo。一般情况下都不需要用到。在搜索回来的信息中,已可通过获取当前信息的方法获取每一回路的状态,具体请见Demo
6.1.1 调用HDLCommand.lightCtrl(appliancesInfo,state);
第三个参数为灯光亮度,0代表关,范围在0-100.超过100不做处理。
6.1.2需要接收EventBus的控制返回结果,具体请查看demo。
窗帘种类有:窗帘模块,卷帘电机,开合帘电机。
6.2.1 调HDLCommand.curtainCtrl( AppliancesInfo info, int state)
前两个参数为固定参数,跟6.1.1雷同。第三个参数为:CurtainCtrlParser.HDLcurtainPause
(窗帘停)或CurtainCtrlParser.HDLcurtainOn
(窗帘开)或CurtainCtrlParser.HDLcurtainOff
(窗帘关) 中的一个。
窗帘模块只能调用这3个参数,卷帘电机和开合帘电机第二个参数可以填0-100数字,代表百分比。
6.2.3 需要接收EventBus的控制返回结果,具体查看demo。仅将lightCtrlBackInfo
改为CurtainCtrlBackInfo
6.3.1调用相关控制空调api即可。
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSwich,AirCtrlParser.airOn);//空调面板开
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airSwich,AirCtrlParser.airOff);//空调面板关
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.refTem,20);//制冷温度 范围0-84
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airSpeed,AirCtrlParser.airSpeedAuto);//风速自动
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airSpeed,AirCtrlParser.airSpeedHigh);//风速高风
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airSpeed,AirCtrlParser.airSpeedMid);//风速中风
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airSpeed,AirCtrlParser.airSpeedLow);//风速低风
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airMode,AirCtrlParser.airModeRefTem);//空调模式制冷
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airMode,AirCtrlParser.airModeHeatTem);//空调模式制热
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airMode,AirCtrlParser.airModeVen);//空调模式通风
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airMode,AirCtrlParser.airModeAuto);//空调模式自动
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.airMode,AirCtrlParser.airModeDehum);//空调模式抽湿
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.heatTem,28);//制热温度 范围0-84
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.autoTem,25);//自动温度 范围0-84
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.upTem,1);//上升温度 范围0-5
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.downTem,1);//下降温度 范围0-5
6.4.1调用HDLCommand.logicCtrl(appliancesInfo);具体查看demo
sdk可接收设备状态改变的推送,目前支持灯光,窗帘,空调面板的状态改变推送。在需要接收的界面重写EventBus回调。
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLightFeedBackInfoEventMain(LightFeedBackEvent event){
/**
* 控制回馈与推送都是通过此方法返回。
*/
// 此处代码不能识别哪个灯光返回
int brightness = event.getLightCtrlBackInfo().getBrightness();
lightState = brightness==100? 0:100;//如果返回100重置状态为0,反之重置状态100
lightBtn.setText("当前亮度 = "+brightness);
/*以下为灯光推送示例代码,可以识别哪个继电器,哪个调光灯,哪个回路,也可用作控制回馈。
按需求调用*/
String remarks = event.getLightCtrlBackInfo().getRemarks();//获取返回的灯光备注。如果每个灯光回路备注都唯一,可以直接通过备注判断
String parentRemarks = event.getLightCtrlBackInfo().getParentRemarks();//获取继电器或调光灯备注。这里可以知道是哪个设备返回的
int num = event.getLightCtrlBackInfo().getChannelNum();//获取回路号。这里可以获取到这个继电器或调光灯的回路号
Toast.makeText(this,parentRemarks+" 的 "+remarks+" 回路号:"+num+" 返回"+" 亮度为:"+brightness,Toast.LENGTH_SHORT).show();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onCurtainFeedBackInfoEventMain(CurtainFeedBackEvent event){
int curState = event.getCurtainCtrlBackInfo().getState();
//窗帘模块:curState:0=停止,1=打开,2=关闭。
//开合帘电机,卷帘电机:curState:1-100开合度。也会返回0,1,2的状态
//建议开合帘电机,卷帘电机按停止后再读取当前状态来获取当前状态值
String remarks = event.getCurtainCtrlBackInfo().getRemarks();
String parentRemarks = event.getCurtainCtrlBackInfo().getParentRemarks();
int num = event.getCurtainCtrlBackInfo().getNum();
Toast.makeText(this,parentRemarks+" 的 "+remarks+" 回路号:"+num+" 返回"+" 状态为:"+curState,Toast.LENGTH_SHORT).show();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onAirFeedBackInfoEventMain(AirFeedBackEvent event){
// 空调面板一般只有一个
byte[] curState = event.getAirCtrlBackInfo().getCurState();
switch (curState[0]& 0xFF){
case AirCtrlParser.airSwich:
switch (curState[1]& 0xFF){
case AirCtrlParser.airOff:
airBtn.setText("空调关");
ToastUtil("空调关");
break;
case AirCtrlParser.airOn:
airBtn.setText("空调开");
ToastUtil("空调开");
break;
default:
break;
}
break;
case AirCtrlParser.refTem:
airBtn.setText("空调制冷,温度为:"+(curState[1]& 0xFF));
ToastUtil("空调制冷,温度为:"+(curState[1]& 0xFF));
break;
case AirCtrlParser.airSpeed :
switch (curState[1]& 0xFF){
case AirCtrlParser.airSpeedAuto:
airBtn.setText("空调风速,风速模式为:airSpeedAuto自动风速");
ToastUtil("空调风速,风速模式为:airSpeedAuto自动风速");
break;
case AirCtrlParser.airSpeedHigh:
airBtn.setText("空调风速,风速模式为:airSpeedHigh风速高");
ToastUtil("空调风速,风速模式为:airSpeedHigh风速高");
break;
case AirCtrlParser.airSpeedMid:
airBtn.setText("空调风速,风速模式为:airSpeedMid风速中");
ToastUtil("空调风速,风速模式为:airSpeedMid风速中");
break;
case AirCtrlParser.airSpeedLow:
airBtn.setText("空调风速,风速模式为:airSpeedLow风速低");
ToastUtil("空调风速,风速模式为:airSpeedLow风速低");
break;
default:
break;
}
break;
case AirCtrlParser.airMode:
switch (curState[1]& 0xFF){
case AirCtrlParser.airModeRefTem:
airBtn.setText("空调模式,模式为:制冷");
ToastUtil("空调模式,模式为:制冷");
break;
case AirCtrlParser.airModeHeatTem:
airBtn.setText("空调模式,模式为:制热");
ToastUtil("空调模式,模式为:制热");
break;
case AirCtrlParser.airModeVen:
airBtn.setText("空调模式,模式为:通风");
ToastUtil("空调模式,模式为:通风");
break;
case AirCtrlParser.airModeAuto:
airBtn.setText("空调模式,模式为:自动");
ToastUtil("空调模式,模式为:自动");
break;
case AirCtrlParser.airModeDehum:
airBtn.setText("空调模式,模式为:抽湿");
ToastUtil("空调模式,模式为:抽湿");
break;
default:
break;
}
break;
case AirCtrlParser.heatTem:
airBtn.setText("空调制热,制热温度为"+(curState[1]& 0xFF));
ToastUtil("空调制热,制热温度为"+(curState[1]& 0xFF));
break;
case AirCtrlParser.autoTem:
airBtn.setText("空调自动,自动温度为"+(curState[1]& 0xFF));
ToastUtil("空调自动,自动温度为"+(curState[1]& 0xFF));
break;
case AirCtrlParser.upTem:
airBtn.setText("空调调温,上升温度:"+(curState[1]& 0xFF));
ToastUtil("空调调温,上升温度:"+(curState[1]& 0xFF));
break;
case AirCtrlParser.downTem:
airBtn.setText("空调调温,下降温度:"+(curState[1]& 0xFF));
ToastUtil("空调调温,下降温度:"+(curState[1]& 0xFF));
break;
}
}
相关的调用api:(具体查看demo)
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.GET_AUDIO_CURRRENT_INFO);//获取当前音乐信息。返回当前歌曲、列表等所有信息。获取音乐信息当前音乐会停止播放
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.GET_AUDIO_MODE);//获取当前音乐播放模式。仅返回单曲播放等播放模式。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_CHOOSE_PLAY_SONG,curListNum,position);
}
});
playPauseBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_AUDIO_PLAYPAUSE);
}
});
playStopBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_AUDIO_PLAYSTOP);
}
});
preSongBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_PRE_SONG);
}
});
nextSongBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_NEXT_SONG);
}
});
modeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_AUDIO_MODE_UP);//播放模式+
// HDLCommand.HDLaudioCtrl(AudioActivity.this,appliancesInfo,HDLAudio.SET_AUDIO_MODE_DOWN);//播放模式-
}
});
volMinBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_AUDIO_VOL,0);//音量最小:0。小于0,SDK不处理
}
});
volMidBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_AUDIO_VOL,40);
}
});
volMaxBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_AUDIO_VOL,79);//音量最大:79。超过79,SDK不处理
}
});
nextListBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_NEXT_LIST);//获取下一列表,当前音乐会停止播放
}
});
preListBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HDLCommand.audioCtrl(appliancesInfo,HDLAudio.SET_PRE_LIST);//获取上一列表,当前音乐会停止播放
}
});
if(event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
&& event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
){
switch (event.getType()){
case HDLAudio.CALLBACK_SONG_NAME_LIST:
listString.clear();
for(int i=0;i<event.getSongNameList().size();i++){
listString.add(event.getSongNameList().get(i));
}
adapter.notifyDataSetChanged();
break;
case HDLAudio.CALLBACK_CURRENT_VOLUME:
Log.i("djl","当前音量值:"+event.getAudioInfoInt());
break;
case HDLAudio.CALLBACK_AUDIO_LIST_NUM:
int[] listNum = event.getAudioListInfo();
curListNum = listNum[0];
Log.i("djl","当前列表号:"+listNum[0]+" 当前共有列表数:"+listNum[1]);
break;
case HDLAudio.CALLBACK_CURRENT_LIST_NAME:
Log.i("djl","当前列表名:"+event.getAudioInfoStr());
break;
case HDLAudio.CALLBACK_CURRENT_SONG_NUM:
int[] songNum = event.getAudioListInfo();
Log.i("djl","当前歌曲号:"+songNum[0]+" 当前共有歌曲数:"+songNum[1]);
break;
case HDLAudio.CALLBACK_CURRENT_SONG_NAME:
Log.i("djl","当前歌曲名:"+event.getAudioInfoStr());
curSongNameTv.setText("当前歌曲名:"+event.getAudioInfoStr());
break;
case HDLAudio.CALLBACK_CURRENT_SONG_INFO:
int[] songInfo = event.getAudioListInfo();
//songInfo[0],songInfo[1]获得的值为秒,如songInfo[0]=250,即歌曲总时长为250秒。songInfo[2]获得的值为:1、2、3。1:停止,2:播放,3:暂停。
String curStatus ;
switch (songInfo[2]){
case 1:
curStatus = "停止";
break;
case 2:
curStatus = "播放";
break;
case 3:
curStatus = "暂停";
break;
default:
curStatus = "未知";
break;
}
Log.i("djl","当前歌曲总时长:"+songInfo[0]+"秒 ,当前歌曲已播放时长:"+songInfo[1]+"秒, 当前歌曲状态:"+curStatus);
curSongInfoTv.setText("当前歌曲总时长:"+songInfo[0]+"秒 ,当前歌曲已播放时长:"+songInfo[1]+"秒, 当前歌曲状态:"+curStatus);
break;
case HDLAudio.CALLBACK_CURRENT_MODE:
String curMode ;
switch (event.getAudioInfoInt()){
case 1:
curMode = "单曲播放";
break;
case 2:
curMode = "单曲循环";
break;
case 3:
curMode = "连续播放";
break;
case 4:
curMode = "连播循环";
break;
default:
curMode = "未知";
break;
}
modeBtn.setText(curMode);
break;
default:
break;
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onWarningEventMain(WarningInfoEvent event){
String warningType = event.getWaringType();
Toast.makeText(MainActivity.this,warningType,Toast.LENGTH_SHORT).show();
}
静态注册接收消息,可根据自身情况选择
<receiver
android:name=".HDLBroacastRv">
<intent-filter>
<action android:name="com.hdl.action.WARNING"/>
</intent-filter>
</receiver>
public class HDLBroacastRv extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String warningType = intent.getStringExtra("HdlWarning");
Toast.makeText(context,warningType,Toast.LENGTH_SHORT).show();
}
}
10.1:使用此方法接收音乐数据
@Subscribe(threadMode = ThreadMode.MAIN)
public void onBgmEventMain(ThirdPartyBgmInfoEvent event) {
byte[] bgmBytes = event.getBytes();
}
10.2:使用此方法发送自定义命令
HDLCommand.cusSendCommand(int command, int subnetID, int deviceID, byte[] addBytes, int port, String ipAddress)
参数解析: command:操作码、subnetID:子网号、deviceID:设备号、addBytes:附加数据、port:端口号、ipAddress:ip地址
OnManager.getOnDevicesData("Your Ip Address");
参数填写On设备上分享的ip地址。使用如下方法来接收数据。目前只能接收:调光回路,开关回路,开合帘电机,卷帘电机,窗帘模块,通用空调面板 的数据。接收到这些设备后,均可以用以上控制,获取状态等API加以操作。
@Subscribe(threadMode = ThreadMode.MAIN)
public void onSowInfoEventMain(OnDeviceDataEvent event){
OndevicesDatas = event.getDevicesDataList();
for(int i=0;i<OndevicesDatas.size();i++){
List<AppliancesInfo> appliancesInfoList = OndevicesDatas.get(i).getAppliancesInfoList();
for(int j=0;j<appliancesInfoList.size();j++){
Log.i("djl","设备名称:"+appliancesInfoList.get(j).getDeviceName()
+"\n子网Id = "+appliancesInfoList.get(j).getDeviceSubnetID()
+"\n 设备Id = "+appliancesInfoList.get(j).getDeviceDeviceID()
+"\n 回路号 =" +appliancesInfoList.get(j).getChannelNum()
+"\n 大类 =" +appliancesInfoList.get(j).getBigType()
+"\n 小类 =" +appliancesInfoList.get(j).getLittleType()
+"\n 操作码 =" +appliancesInfoList.get(j).getCtrlCommand()
+"\n 操作回馈码 =" +appliancesInfoList.get(j).getCtrlBackCommand()
+"\n 状态码 =" +appliancesInfoList.get(j).getStateCommand()
+"\n 状态回馈码 =" +appliancesInfoList.get(j).getStateBackCommand()
);
}
}
}
beta版本非稳定版本 1:修复搜索过程中有可能导致崩溃的bug
beta版本非稳定版本 1:增加相关日志,方便排查对接问题。
beta版本非稳定版本 1:修复窗帘模块只能控制第一回路的bug。
beta版本非稳定版本 1:修复HVAC空调控制,命令错误导致广播数据错误bug。
beta版本非稳定版本 1:修复HVAC空调控制bug
beta版本非稳定版本 1:修复获取备注可能产生的空指针问题。
beta版本非稳定版本 1:将音乐转发数据限定为只转发音乐协议数据
beta版本非稳定版本 1:修复在未控制设备的状态下,无法收到相关命令的bug
beta版本非稳定版本 1:修复空调控制未搜到备注,控制崩溃bug
beta版本非稳定版本 1:修复SDK在搜索过程中,音乐、空调命令导致相关接口崩溃bug
beta版本非稳定版本 1:修复SDK搜索机制、获取备注机制。提供第三方背景音乐获取接口
beta版本非稳定版本 1:修复SDK逻辑模块获取备注问题
beta版本非稳定版本 1:修复酒店空调无法控制 2:修复SDK切换家居、酒店导致备注获取失败的bug 3:修复酒店窗帘控制不稳定。
1:更新 v1.5.4 修复备注不回复,SDK会重复获取的bug。 2:调整控制失败逻辑
1:增加搜索、控制设备的超时判断,具体请查看demo,CtrlActivity使用。
1:修复窗帘返回百分比不准确bug
1:修复多次控制灯光出现的崩溃。提供方法判断设备类型。详情查看demo CtrlActivity。
1:SDK 集成了HDL RCU协议,第三无需改动目前的接口即可控制、接收RCU相关命令。
1:增加背景音乐获取列表api。
1:增加判断背景音乐回复数据是否为当前所需数据,修复因此导致当前列表歌曲数获取有误Bug
1:修复由于音乐备注没有返回,导致SDK不回复数据
1:舍弃HDLCommand.getAppliancesRemarks(AppliancesInfo appliancesInfos)获取备注api。设备备注SDK自行获取,第三方只需读取即可。v1.4.1版本Demo已不再使用此api,此版本将去除此api。
2:优化搜索机制,修复在设备模块多的情况下可能搜不完全的Bug。
1:舍弃所有api都需要Context参数,仅保留HDLDeviceManager.init(Context context);具体可查看Demo
2:音乐协议相关api名称修改:舍弃音乐协议多api并存,修改为统一使用HDLaudioCtrl(AppliancesInfo info,int type)、HDLaudioCtrl(AppliancesInfo info,int type,int value)、HDLaudioCtrl(AppliancesInfo info,int type,int value1,int value2)。增加获取下一列表、上一列表api。具体使用查看第8点或查看Demo。
1:更新api相关名称:CommandData更改为HDLCommand,DeviceManager更改为HDLDeviceManager。由于包名的更改,将会导致已集成旧版的项目导包报错,建议直接复制demo导包内容,以及相应修改CommandData、DeviceManager为HDLCommand、HDLDeviceManager。
2:增加音乐协议。功能包括:搜索音乐列表、点播、上一首、下一首、播放/暂停、播放/停止、音量设置、播放模式切换。
1:修复调用搜索api后,立刻调用获取备注api某些情况获取失败Bug
1: 增加HDL报警设备收发。可用EventBus或Broadcast接收。
2: 搜索api修改为:调用搜索获取HDL设备数据、HDL场景数据api,5秒后回调EventBus数据。
3: 去除备注乱码字符。
4:修复灯光设备备注某些网络获取不到的bug
1:SDK的初始化不再包含EventBus的初始化,厂家根据自身情况在需要接收的界面初始化
2:废弃HDLCommand.devicesSearch(Conetext context);
搜索api,增加区分HDL设备和HDL场景api。HDLCommand.HDLdevicesSearch(Context context);
和HDLCommand.HDLscenesSearch(Context context);