panlili2024
2025-08-26 4a42989853dd83c0519d0684383430006b7e9625
获取设备列表序列化
5个文件已添加
4个文件已修改
488 ■■■■■ 已修改文件
HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/AttributesInfo.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkFunctionInfo.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/StatusInfo.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/callback/HDLLinkTCallBack.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/LinkResponseUtils.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java
@@ -19,18 +19,18 @@
    public void onCreate() {
        super.onCreate();
        //初始化SDK,如果不走从机入网,走app需要设置端口为8584
        HDLSdk.getInstance().init(this, 8584);
//        HDLSdk.getInstance().init(this, 8584);
        //如果走从机入网,不需要设置端口
        //HDLSdk.getInstance().init(this);
        HDLSdk.getInstance().init(this);
        //控制SDK日志打印
        HDLSdk.getInstance().setLogEnabled(true);
        //source系统接口初始化
        OsManager.init(this);
        //appkey:ryfElI3tVOT
        //appsecret:AKIn7s1A2YnNvAZRtL8FQxzp0R2KUpIY
        HDLLink.getInstance().initCloud(this, "Lstzip08fTl", "iSIr5TSz1Rzxc1QRQ3RgnGwGB2SeAAAA", HdlCloudApi.BASE_CHINA_URL);
        //appkey:ryfElI3tVOT Lstzip08fTl
        //appsecret:AKIn7s1A2YnNvAZRtL8FQxzp0R2KUpIY iSIr5TSz1Rzxc1QRQ3RgnGwGB2SeAAAA
        HDLLink.getInstance().initCloud(this, "FcRyUJlLJFF", "wz8wn75ABidx8vXcFGUotqhwFkTaYvvJ", HdlCloudApi.BASE_TEST_URL);
        //注册全局广播,刷新token
        GlobalBroadcastManager.registerGlobalBroadcast(this);
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -38,6 +38,7 @@
import com.hdl.sdk.common.utils.SPUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.HDLLink;
import com.hdl.sdk.connect.bean.LinkFunctionInfo;
import com.hdl.sdk.connect.bean.LinkResponse;
import com.hdl.sdk.connect.bean.request.AttributesRequest;
import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
@@ -50,6 +51,7 @@
import com.hdl.sdk.connect.bean.response.UpdateInfo;
import com.hdl.sdk.connect.callback.HDLLinkCallBack;
import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
import com.hdl.sdk.connect.callback.HDLLinkTCallBack;
import com.hdl.sdk.connect.cloud.CallBackListener;
import com.hdl.sdk.connect.cloud.CheckAppVersionListener;
import com.hdl.sdk.connect.cloud.HDLException;
@@ -81,8 +83,8 @@
    private EventListener allTopicsListener;
    private String testLightSid = "020101A19B485D02020100010101";
    private String secret = "";
    private List<FunctionBean> devicesList = new ArrayList<>();
    private List<FunctionBean> roomDevicesList = new ArrayList<>();
    private List<LinkFunctionInfo> devicesList = new ArrayList<>();
    private List<LinkFunctionInfo> roomDevicesList = new ArrayList<>();
    private List<SceneBean> sceneList = new ArrayList<>();
    private List<SceneDetailBean> sceneDetailList = new ArrayList<>();
    private List<SceneDetailBean> roomSceneList = new ArrayList<>();
@@ -92,8 +94,8 @@
        tv.setText("开始申请设备密钥...");
        responseTv.setText("");
        String supplier = "HIK KNX";//厂商
        String mac = "FQ4895630";//设备唯一MAC地址
        String supplier = "JINMAOYUN";//厂商
        String mac = "f2c5d8bad48f";//设备唯一MAC地址
//        String mac = editText.getText().toString();
        String spk = "screen.touch";//产品spk
@@ -228,7 +230,7 @@
        selectnetwork();
        checkIfCertified();
        //initDeviceInfo();//不走从机入网的方式不需要初始化
        initDeviceInfo();//不走从机入网的方式不需要初始化,走从机入网则需要初始化
        registerAllTopicsListener();
        HDLLink.getInstance().setDeleteNetworkListener(new DeleteNetworkListener() {
            @Override
@@ -411,11 +413,12 @@
                LinkResponse response = (LinkResponse) msg;
                Log.i("onMessage", "response.getTopic():" + response.getTopic());
                String topic = String.format(TopicConstant.GATEWAY_LOGIN,
                        HDLLinkConfig.getInstance().getGatewayId())+ "_reply";;
                        HDLLinkConfig.getInstance().getGatewayId()) + "_reply";
                ;
                if ("/user/all/custom/gateway/broadcast_reply".equals(response.getTopic())) {
                    localSecret.setText("密钥:" + HDLLinkConfig.getInstance().getLocalSecret());
                }else if (topic.equals(response.getTopic())){
                } else if (topic.equals(response.getTopic())) {
                    //tcp连接成功,处理业务逻辑
                }
            }
@@ -473,8 +476,8 @@
        infoBean.setDeviceName("魔镜");//设备名字
        infoBean.setDeviceModel("HDLSDK");//设备型号
        infoBean.setAccessMode("WIFI");
        infoBean.setIPGateway("192.168.31.1");
        infoBean.setIPAddress("192.168.31.103");
        infoBean.setIPGateway("192.168.1.1");
        infoBean.setIPAddress("192.168.1.103");
        infoBean.setGateway_type("screen.touch");
        infoBean.setHw_version("HW2.0");
        infoBean.setFw_version("Fw1.0");
@@ -507,7 +510,7 @@
        //认证提交参数准备
        //正式服务器
        String spkStr = "screen.mirror";//产品spk
        String spkStr = "screen.touch";//产品spk
        String macStr = "f2c5d8bad48f";//设备唯一MAC地址
        String mac_key = stringToMD5(stringToMD5(macStr + secret));
@@ -596,37 +599,23 @@
    void getFunctionList() {
        tv.setText("获取设备列表中...");
        responseTv.setText("");
        HDLLink.getInstance().getFunctionList(new HDLLinkCallBack() {
        HDLLink.getInstance().getFunctionInfoList(new HDLLinkTCallBack<List<LinkFunctionInfo>>() {
            @Override
            public void onSuccess(List<LinkFunctionInfo> data) {
                if (data != null && data.size() != 0) {
                    devicesList.clear();
                    devicesList.addAll(data);
                    tv.setText("获取设备列表成功");
                    responseTv.setText(data.toString());
                }
            }
            @Override
            public void onError(HDLLinkException error) {
                tv.setText(error.getMsg());
            }
            @Override
            public void onSuccess(String data) {
                tv.setText("获取设备列表成功");
                responseTv.setText(data);
                handelFunctionList(data);
            }
        });
    }
    void handelFunctionList(String data) {
        try {
            final LinkResponse linkResponse = GsonConvert.getGson().fromJson(data, new TypeToken<LinkResponse>() {
            }.getType());
            final BaseLocalResponse<List<FunctionBean>> bean = GsonConvert.getGson().fromJson(linkResponse.getData(), new TypeToken<BaseLocalResponse<List<FunctionBean>>>() {
            }.getType());
            devicesList.clear();
            devicesList.addAll(bean.getObjects());
            Log.d(TAG, "handelFunList-----> " + devicesList.toString());
        } catch (Exception e) {
            Log.e(TAG, "handelFunList: " + e.getMessage());
        }
    }
    /**
@@ -643,10 +632,12 @@
            sids.add(testLightSid);
        }
        HDLLink.getInstance().getFunctionAttribute(sids, new HDLLinkCallBack() {
        HDLLink.getInstance().getFunctionAttributeInfo(sids, new HDLLinkTCallBack<List<LinkFunctionInfo>>() {
            @Override
            public void onSuccess(String msg) {
                responseTv.setText(msg);
            public void onSuccess(List<LinkFunctionInfo> data) {
                if (data != null && data.size() != 0) {
                    responseTv.setText(data.toString());
                }
            }
            @Override
@@ -707,7 +698,7 @@
        request.setStatus(statusBeanList);
        requestList.add(request);
        HDLLink.getInstance().propertyDown(requestList, new HDLLinkCallBack() {
        HDLLink.getInstance().propertyDownDevice(requestList, new HDLLinkTCallBack<String>() {
            @Override
            public void onSuccess(String data) {
                responseTv.setText(data);
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java
@@ -45,7 +45,7 @@
            }
            String mac_Oid_GatewayId = topics[2];
            Log.d("panlili", "AllTopicManagerUtils.java:manager----->topic= "  + topic);
            //Log.d("panlili", "AllTopicManagerUtils.java:manager----->topic= "  + topic);
            if (!isLocalDevice(mac_Oid_GatewayId)) {
                LogUtils.i("不是当前设备的网关Id,Id是" + mac_Oid_GatewayId);
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
@@ -2,20 +2,26 @@
import android.content.Context;
import com.google.gson.reflect.TypeToken;
import com.hdl.hdlhttp.HxHttpConfig;
import com.hdl.sdk.common.event.DeleteNetworkListener;
import com.hdl.sdk.common.event.EventDispatcher;
import com.hdl.sdk.common.event.EventListener;
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.bean.LinkFunctionInfo;
import com.hdl.sdk.connect.bean.LinkResponse;
import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
import com.hdl.sdk.connect.bean.request.ListSidRequest;
import com.hdl.sdk.connect.bean.request.ListUploadRequest;
import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
import com.hdl.sdk.connect.callback.HDLLinkCallBack;
import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
import com.hdl.sdk.connect.callback.HDLLinkTCallBack;
import com.hdl.sdk.connect.cloud.CallBackListener;
import com.hdl.sdk.connect.cloud.CheckAppVersionListener;
import com.hdl.sdk.connect.cloud.HdlCloudApi;
import com.hdl.sdk.connect.cloud.HdlCloudController;
import com.hdl.sdk.connect.cloud.listener.GatewayListener;
import com.hdl.sdk.connect.cloud.listener.SibichiListener;
@@ -265,6 +271,33 @@
    }
    /**
     * 获取设备列表
     */
    public void getFunctionInfoList(HDLLinkTCallBack<List<LinkFunctionInfo>> callBack) {
        getFunctionList(new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                LinkResponse linkResponse = GsonConvert.getGson().fromJson(msg, new TypeToken<LinkResponse>() {
                }.getType());
                final BaseLocalResponse<List<LinkFunctionInfo>> listBaseLocalResponse = GsonConvert.getGson().fromJson(linkResponse.getData(), new TypeToken<BaseLocalResponse<List<LinkFunctionInfo>>>() {
                }.getType());
                if (callBack != null) {
                    callBack.onSuccess(listBaseLocalResponse.getObjects());
                }
            }
            @Override
            public void onError(HDLLinkException e) {
                if (callBack != null) {
                    callBack.onError(e);
                }
            }
        });
    }
    /**
     * 获取设备功能属性
     *
     * @param sids
@@ -275,6 +308,35 @@
    }
    /**
     * 获取设备功能属性
     *
     * @param sids
     * @param callBack
     */
    public void getFunctionAttributeInfo(List<String> sids, HDLLinkTCallBack<List<LinkFunctionInfo>> callBack) {
        getFunctionAttribute(sids, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                LinkResponse linkResponse = GsonConvert.getGson().fromJson(msg, new TypeToken<LinkResponse>() {
                }.getType());
                final BaseLocalResponse<List<LinkFunctionInfo>> listBaseLocalResponse = GsonConvert.getGson().fromJson(linkResponse.getData(), new TypeToken<BaseLocalResponse<List<LinkFunctionInfo>>>() {
                }.getType());
                if (callBack != null) {
                    callBack.onSuccess(listBaseLocalResponse.getObjects());
                }
            }
            @Override
            public void onError(HDLLinkException e) {
                if (callBack != null) {
                    callBack.onError(e);
                }
            }
        });
    }
    /**
     * 设备控制
     *
     * @param request  控制状态参数
@@ -285,6 +347,35 @@
    }
    /**
     * 设备控制
     *
     * @param request  控制状态参数
     * @param callBack 结果回调
     */
    public void propertyDownDevice(List<DeviceControlRequest> request, HDLLinkTCallBack<String> callBack) {
        propertyDown(request, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                LinkResponse linkResponse = GsonConvert.getGson().fromJson(msg, new TypeToken<LinkResponse>() {
                }.getType());
                final BaseLocalResponse<String> listBaseLocalResponse = GsonConvert.getGson().fromJson(linkResponse.getData(), new TypeToken<BaseLocalResponse<String>>() {
                }.getType());
                if (callBack != null) {
                    callBack.onSuccess(listBaseLocalResponse.getObjects());
                }
            }
            @Override
            public void onError(HDLLinkException e) {
                if (callBack != null) {
                    callBack.onError(e);
                }
            }
        });
    }
    /**
     * 读取状态
     *
     * @param sids     请求参数 指定读取的设备sid列表
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/AttributesInfo.java
New file
@@ -0,0 +1,73 @@
package com.hdl.sdk.connect.bean;
import androidx.annotation.NonNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class AttributesInfo implements Serializable {
    private String key;
    private String data_type;
    private List<String> value = new ArrayList<>();
    private String max;
    private String min;
    public List<String> getValue() {
        if (value == null) {
            return new ArrayList<>();
        }
        return value;
    }
    public void setValue(@NonNull List<String> value) {
        this.value = value;
    }
    public String getMax() {
        return max == null ? "" : max;
    }
    public void setMax(String max) {
        this.max = max;
    }
    public String getMin() {
        return min == null ? "" : min;
    }
    public void setMin(String min) {
        this.min = min;
    }
    @NonNull
    public String getKey() {
        return key == null ? "" : key;
    }
    public void setKey(@NonNull String key) {
        this.key = key;
    }
    @NonNull
    public String getData_type() {
        return data_type == null ? "" : data_type;
    }
    public void setData_type(@NonNull String data_type) {
        this.data_type = data_type;
    }
    @Override
    public String toString() {
        return "AttributesInfo{" +
                "key='" + key + '\'' +
                ", data_type='" + data_type + '\'' +
                ", value=" + value +
                ", max='" + max + '\'' +
                ", min='" + min + '\'' +
                '}';
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkFunctionInfo.java
New file
@@ -0,0 +1,146 @@
package com.hdl.sdk.connect.bean;
import androidx.annotation.NonNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class LinkFunctionInfo implements Serializable {
    private String sid;//功能的sid
    private String oid;//模块的oid
    private String name;//功能回路名字
    private String spk;//spk
    private String omodel;
    private String src;
    private String online;
    private List<AttributesInfo> attributes = new ArrayList<>();//功能属性,需要单独发送功能属性读取的指令读回来
    private List<StatusInfo> status = new ArrayList<>();//当前设备状态值,设备控制的时候才用到
    private boolean templateFlag = false;//模板标记
    /**
     * 1:展示 2:不展示
     */
    private String show;
    public String getShow() {
        return show == null ? "1" : show;
    }
    public void setShow(@NonNull String show) {
        this.show = show;
    }
    public boolean isTemplateFlag() {
        return templateFlag;
    }
    public void setTemplateFlag(boolean templateFlag) {
        this.templateFlag = templateFlag;
    }
    @NonNull
    public String getSid() {
        return sid == null ? "" : sid;
    }
    public void setSid(@NonNull String sid) {
        this.sid = sid;
    }
    @NonNull
    public String getOid() {
        return oid == null ? "" : oid;
    }
    public void setOid(@NonNull String oid) {
        this.oid = oid;
    }
    @NonNull
    public String getName() {
        return name == null ? "" : name;
    }
    public void setName(@NonNull String name) {
        this.name = name;
    }
    @NonNull
    public String getSpk() {
        return spk == null ? "" : spk;
    }
    public void setSpk(@NonNull String spk) {
        this.spk = spk;
    }
    @NonNull
    public String getOmodel() {
        return omodel == null ? "" : omodel;
    }
    public void setOmodel(@NonNull String omodel) {
        this.omodel = omodel;
    }
    @NonNull
    public String getSrc() {
        return src == null ? "" : src;
    }
    public void setSrc(@NonNull String src) {
        this.src = src;
    }
    @NonNull
    public String getOnline() {
        return online == null ? "" : online;
    }
    public void setOnline(@NonNull String online) {
        this.online = online;
    }
    public List<AttributesInfo> getAttributes() {
        if (attributes == null) {
            return new ArrayList<>();
        }
        return attributes;
    }
    public void setAttributes(List<AttributesInfo> attributes) {
        this.attributes = attributes;
    }
    public List<StatusInfo> getStatus() {
        if (status == null) {
            return new ArrayList<>();
        }
        return status;
    }
    public void setStatus(List<StatusInfo> status) {
        this.status = status;
    }
    @Override
    public String toString() {
        return "LinkFunctionInfo{" +
                "sid='" + sid + '\'' +
                ", oid='" + oid + '\'' +
                ", name='" + name + '\'' +
                ", spk='" + spk + '\'' +
                ", omodel='" + omodel + '\'' +
                ", src='" + src + '\'' +
                ", online='" + online + '\'' +
                ", attributes=" + attributes +
                ", status=" + status +
                ", templateFlag=" + templateFlag +
                ", show='" + show + '\'' +
                '}';
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/StatusInfo.java
New file
@@ -0,0 +1,39 @@
package com.hdl.sdk.connect.bean;
import androidx.annotation.NonNull;
import java.io.Serializable;
public class StatusInfo implements Serializable {
    private String key;
    private String value;
    @NonNull
    public String getKey() {
        return key == null ? "" : key;
    }
    public void setKey(@NonNull String key) {
        this.key = key;
    }
    @NonNull
    public String getValue() {
        return value == null ? "" : value;
    }
    public void setValue(@NonNull String value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return "StatusInfo{" +
                "key='" + key + '\'' +
                ", value='" + value + '\'' +
                '}';
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/callback/HDLLinkTCallBack.java
New file
@@ -0,0 +1,10 @@
package com.hdl.sdk.connect.callback;
/**
 * 本地通信通用CallBack
 */
public interface HDLLinkTCallBack<T> extends BaseCallBack{
    void onSuccess(T data);
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/LinkResponseUtils.java
New file
@@ -0,0 +1,44 @@
package com.hdl.sdk.connect.utils;
import android.text.TextUtils;
import com.google.gson.reflect.TypeToken;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.bean.LinkResponse;
import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
import java.lang.reflect.Type;
public class LinkResponseUtils<T> {
    public Type getType() {
        return new TypeToken<BaseLocalResponse<T>>() {
        }.getType();
    }
    /**
     * 转换提取LinkResponse里面的objects
     *
     * @param msg
     * @return
     */
    public static <T> T convertLinkResponse(Object msg, Type type) {
        T bean = null;
        if (msg != null && msg instanceof LinkResponse) {
            LinkResponse linkResponse = (LinkResponse) msg;
            String data = linkResponse.getData();
            if (!TextUtils.isEmpty(data)) {
                try {
                    final BaseLocalResponse<T> response = GsonConvert.getGson().fromJson(data, type);
                    if (response != null) {
                        bean = response.getObjects();
                    }
                } catch (Exception e) {
                    LogUtils.e("convertLinkResponse catch:" + e.getMessage());
                }
            }
        }
        return bean;
    }
}