562935844@qq.com
2023-08-31 b77dc026ffd21dba8652d28409c51e27d3e5a76c
更新sdk
2个文件已添加
14个文件已修改
1 文件已重命名
260 ■■■■■ 已修改文件
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/res/layout/activity_main.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/com.hdl.sdk/build.gradle 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/build.gradle 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/DeleteNetworkListener.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/BaseLocalCodeResponse.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO.rar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/.idea/misc.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/build.gradle 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.3.aar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -25,9 +25,11 @@
import com.google.gson.reflect.TypeToken;
import com.hdl.hdlsdk.device.DevicesListActivity;
import com.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.event.DeleteNetworkListener;
import com.hdl.sdk.common.event.EventListener;
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.HDLLink;
import com.hdl.sdk.connect.bean.LinkResponse;
@@ -59,10 +61,11 @@
    private RecyclerView rv;
    private TextView tv;
    private TextView responseTv;
    private TextView localSecret;
    private EditText editText;
    boolean isOn;
    private EventListener allTopicsListener;
    private String testLightSid = "0001010D48C71B02020100010101";
    private String testLightSid = "02010131D9C03D01020300010107";
    private String secret = "";
    @Override
@@ -185,6 +188,7 @@
            public void onSuccess(String msg) {
                tv.setText("认证成功");
                responseTv.setText(msg.toString());
                localSecret.setText("密钥:" + HDLLinkConfig.getInstance().getLocalSecret());
            }
        });
    }
@@ -214,6 +218,7 @@
        setContentView(R.layout.activity_main);
        responseTv = findViewById(R.id.response_tv);
        editText = findViewById(R.id.edittext);
        localSecret = findViewById(R.id.local_secret);
        tv = findViewById(R.id.state_tv);
        rv = findViewById(R.id.rv);
        rv.setLayoutManager(new LinearLayoutManager(this));
@@ -222,6 +227,17 @@
        checkIfCertified();
        initDeviceInfo();//初始化
        registerAllTopicsListener();
        HDLLink.getInstance().setDeleteNetworkListener(new DeleteNetworkListener() {
            @Override
            public void onSuccess(Object msg) {
                LogUtils.i("setDeleteNetworkListener onSucceed = " + msg);
            }
            @Override
            public void onFailure() {
                LogUtils.i("setDeleteNetworkListener onFailure");
            }
        });
        ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
            @Override
@@ -301,7 +317,7 @@
                        break;
                    case 9:
                        //场景控制
                        controlScene();
                        getScene();
                        break;
                    case 10:
                        //功能列表
@@ -359,6 +375,9 @@
            @Override
            public void onMessage(Object msg) {
                LinkResponse response = (LinkResponse) msg;
                if ("/user/all/custom/gateway/broadcast_reply".equals(response.getTopic())) {
                    localSecret.setText("密钥:" + HDLLinkConfig.getInstance().getLocalSecret());
                }
            }
        };
        HDLLink.getInstance().registerAllTopicsListener(allTopicsListener);
@@ -560,6 +579,7 @@
            @Override
            public void onSuccess(String msg) {
                responseTv.setText(msg);
                Log.d("panlili", "MainActivity.java:getSceneList-----> " + msg);
            }
            @Override
@@ -573,6 +593,30 @@
    // {"id":"8a5eaa143ce943b987b577df5a66759b","time_stamp":"1637040217235","objects":[{"sid":"04010560D2C7170A0A0100000000","name":"回家模式","status":"off","group":"255","delay":"0","modify_time":"1634871490"},{"sid":"04010560D2C76E0A0A0100010000","name":"离家模式","status":"off","group":"255","delay":"0","modify_time":"1634785823"}]}
    /**
     * 获取场景详情
     * 执行成功的话 响应code为200
     */
    void getScene() {
        tv.setText("场景读取");
        responseTv.setText("");
        //场景sid列表,支持批量读取
        List<String> sids = new ArrayList<>();
        sids.add("0201034C50B53F0A0A0100011100");
        sids.add("0201037F50B53F0A0A0100021100");
        HDLLink.getInstance().getScene(sids, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                responseTv.setText(msg);
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
            }
        });
    }
    /**
     * 控制场景
     * 执行成功的话 响应code为200
     */
HDLSDK/app/src/main/res/layout/activity_main.xml
@@ -76,6 +76,14 @@
                android:text="响应:" />
            <TextView
                android:id="@+id/local_secret"
                android:paddingStart="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="密钥:" />
            <TextView
                android:id="@+id/response_tv"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
HDLSDK/com.hdl.sdk/build.gradle
@@ -8,8 +8,8 @@
    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 2
        versionName "1.1.0"
        versionCode 5
        versionName "1.1.3"
    }
    buildTypes {
        debug {
HDLSDK/hdl-connect/build.gradle
@@ -8,8 +8,8 @@
    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 2
        versionName "1.1.0"
        versionCode 5
        versionName "1.1.3"
        consumerProguardFiles "consumer-rules.pro"
    }
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/DeleteNetworkListener.java
New file
@@ -0,0 +1,11 @@
package com.hdl.sdk.common.event;
/**
 * Created by Tong on 2021/9/22.
 */
public interface DeleteNetworkListener {
    void onSuccess(Object msg);
    void onFailure();
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
@@ -3,6 +3,7 @@
import android.content.Context;
import com.hdl.hdlhttp.HxHttpConfig;
import com.hdl.sdk.common.event.DeleteNetworkListener;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.connect.bean.request.DeviceAuthRequest;
@@ -40,6 +41,7 @@
    private static final HDLLink instance = new HDLLink();
    private String appKey, appSecret;
    public DeleteNetworkListener listener;
    /**
     * getInstance
@@ -90,6 +92,15 @@
    public synchronized void removeAllTopicsListener(EventListener listener) {
        if (listener == null) return;
        EventDispatcher.getInstance().removeAllTopicsListener(listener);
    }
    /**
     * 注册退网主题的监听
     *
     * @param listener
     */
    public synchronized void setDeleteNetworkListener(DeleteNetworkListener listener) {
        this.listener = listener;
    }
    /***********************三方设备和网关通信之前的认证流程****************************/
@@ -251,6 +262,16 @@
    }
    /**
     * 场景详情
     *
     * @param sids     场景sid列表
     * @param callBack 回调
     */
    public void getScene(List<String> sids, HDLLinkCallBack callBack) {
        HDLSocket.getInstance().getScene(sids, callBack);
    }
    /**
     * 场景控制
     *
     * @param sids     场景sid列表
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/BaseLocalCodeResponse.java
New file
@@ -0,0 +1,47 @@
package com.hdl.sdk.connect.bean.response;
import java.io.Serializable;
/**
 * Created by Tong on 2021/9/29.
 */
public class BaseLocalCodeResponse<T> implements Serializable {
    private String id;
    private String time_stamp;
    private String code;
    private T objects;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getTime_stamp() {
        return time_stamp;
    }
    public void setTime_stamp(String time_stamp) {
        this.time_stamp = time_stamp;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public T getObjects() {
        return objects;
    }
    public void setObjects(T objects) {
        this.objects = objects;
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java
@@ -24,7 +24,7 @@
        private String oid;
        private String homeId;
        private String mac;
        private String LocalSecret;
        private String local_secret;
        public String getIPAddress() {
            return ip_address;
@@ -67,11 +67,11 @@
        }
        public String getLocalSecret() {
            return LocalSecret;
            return local_secret;
        }
        public void setLocalSecret(String localSecret) {
            LocalSecret = localSecret;
            local_secret = localSecret;
        }
    }
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
@@ -15,6 +15,7 @@
import com.hdl.sdk.common.utils.LogUtils;
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.LinkResponse;
import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
import com.hdl.sdk.connect.bean.response.DeviceDeleteResponse;
@@ -27,8 +28,9 @@
import com.hdl.sdk.socket.codec.ByteToMessageDecoder;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import android.util.Base64;
import kotlin.ParameterName;
@@ -181,7 +183,7 @@
                            //之前的版本这块是明文的
                            if (!topic.contains("heartbeat_reply")) {
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
                                    LogUtils.e("解密失败,数据内容是:\r\n" + Base64.getEncoder().encodeToString(body));
                                    LogUtils.e("解密失败,数据内容是:\r\n" + Base64.encodeToString(body, Base64.NO_WRAP));
                                else {
                                    LogUtils.e("解密失败,数据内容是:\r\n" + new String(body, "utf-8"));
                                }
@@ -213,18 +215,19 @@
                            LogUtils.i("UploadGatewayInfo onError");
                        }
                    });
                } else if (response.getTopic().equals(updateLocalSecret)) {
                } else if (response.getTopic().equals(updateLocalSecret) || response.getTopic().equals(TopicConstant.LINK_BROADCAST)) {
                    try {
                        DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceInfoResponse>() {
                        }.getType());
                        if (!TextUtils.isEmpty(deviceInfoResponse.getObjects().getLocalSecret())) {
                            byte[] baseBytes = Base64.getDecoder().decode(deviceInfoResponse.getObjects().getLocalSecret());
                            byte[] baseBytes = Base64.decode(deviceInfoResponse.getObjects().getLocalSecret(), Base64.NO_WRAP);
                            String mackey = "";
                            if (!TextUtils.isEmpty(SPUtils.getString("auth_mackey_key", ""))) {
                                mackey = SPUtils.getString("auth_mackey_key", "");
                                byte[] bodyBytes = AesUtil.aesDecrypt(baseBytes, mackey.substring(mackey.length() - 16));
                                String localSecret = new String(bodyBytes, "utf-8");
                                Log.d("panlili", "更新密钥----->localSecret= " + localSecret);
                                HDLLinkConfig.getInstance().setLocalSecret(localSecret);
                            }
                        }
@@ -239,11 +242,17 @@
                            @Override
                            public void onSuccess(String msg) {
                                LogUtils.i("deleteNetwork onSucceed");
                                if (HDLLink.getInstance().listener != null) {
                                    HDLLink.getInstance().listener.onSuccess(msg);
                                }
                            }
                            @Override
                            public void onError(HDLLinkException e) {
                                LogUtils.i("deleteNetwork onError");
                                if (HDLLink.getInstance().listener != null) {
                                    HDLLink.getInstance().listener.onFailure();
                                }
                            }
                        });
                    } catch (Exception e) {
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
@@ -271,7 +271,7 @@
                            HDLLinkConfig.getInstance().setAuthBean(request.getAuth());
                            //判断网关是否已经注册到云端
                            Log.d("panlili", "HDLAuthSocket.java:onSucceed-----> " + localSecret);
                            Log.d("panlili", "认证成功----->localSecret= " + localSecret);
                            if (TextUtils.isEmpty(localSecret) && TextUtils.isEmpty(gatewayId)) {
                                //认证失败,网关未注册到云端
                                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR_GATEWAY_NOT_REGISTERED));
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
@@ -29,6 +29,7 @@
import com.hdl.sdk.connect.bean.request.ListOidRequest2;
import com.hdl.sdk.connect.bean.request.ListUploadRequest;
import com.hdl.sdk.connect.bean.response.AuthenticateResponse;
import com.hdl.sdk.connect.bean.response.BaseLocalCodeResponse;
import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
import com.hdl.sdk.connect.bean.request.FunctionAttributeRequest;
@@ -93,6 +94,7 @@
    }
    public boolean isBroadcast = false;
    /**
     * 广播自身信息给主网关
@@ -544,6 +546,53 @@
    }
    /**
     * 获取场景列表
     */
    public void getScene(List<String> sids, HDLLinkCallBack callBack) {
        if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
            String time = String.valueOf(System.currentTimeMillis());
            final BaseLocalResponse<List<PropertyReadRequest>> data = new BaseLocalResponse<>();
            data.setId(IdUtils.getUUId());
            data.setTime_stamp(time);
            List<PropertyReadRequest> list = new ArrayList<>();
            for (String s : sids) {
                list.add(new PropertyReadRequest(s));
            }
            data.setObjects(list);
            String topic = String.format(TopicConstant.SCENE_GET, getGatewayId());
            LinkRequest message = new LinkRequest(topic,
                    GsonConvert.getGson().toJson(data));
            String replyTopic = topic + "_reply";
            try {
                sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
                    @Override
                    public void onSucceed() {
                    }
                    @Override
                    public void onError() {
                        if (callBack != null) {
                            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
                        }
                    }
                });
            } catch (Exception e) {
                if (callBack != null) {
                    callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
                }
            }
        } else {
            if (callBack != null) {
                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR));
            }
        }
    }
    /**
     * 场景控制
     *
     * @param sids     场景sid列表
@@ -828,9 +877,10 @@
        final String msgId = IdUtils.getUUId();
        String time = String.valueOf(System.currentTimeMillis());
        final BaseLocalResponse<List<ListOidRequest>> data = new BaseLocalResponse<>();
        final BaseLocalCodeResponse<List<ListOidRequest>> data = new BaseLocalCodeResponse<>();
        data.setId(msgId);
        data.setTime_stamp(time);
        data.setCode("0");
        final ListOidRequest request = new ListOidRequest();
        request.setOid(oid);
@@ -961,7 +1011,7 @@
                threadPool.scheduleWithFixedDelay(new Runnable() {
                    @Override
                    public void run() {
                        if (sendCount.get() < 0) {
                        if (sendCount.get() < 3) {
                            sendCount.set(sendCount.get() + 1);
                            getTcp().sendMsg(data);
                        } else {
HDLSDK_DEMO.rar
Binary files differ
HDLSDK_DEMO/.idea/misc.xml
@@ -3,7 +3,9 @@
  <component name="DesignSurface">
    <option name="filePathToZoomLevelMap">
      <map>
        <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/activity_devices_list.xml" value="0.3536458333333333" />
        <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml" value="0.3538301198540907" />
        <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/item_devices_list.xml" value="0.3536458333333333" />
        <entry key="..\:/job/me/Android/HDLSDK/app/src/main/res/layout/activity_main.xml" value="0.1" />
        <entry key="..\:/job/me/Android/HDLSDK/app/src/main/res/layout/demo_item.xml" value="0.28958333333333336" />
      </map>
HDLSDK_DEMO/app/build.gradle
@@ -40,5 +40,5 @@
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6'
//    implementation 'com.google.code.gson:gson:2.8.8'
//    implementation project(path: ':hdl-connect')
    implementation files('libs\\com.hdl.sdk-v1.1.0.aar')
    implementation files('libs\\com.hdl.sdk-v1.1.3.aar')
}
HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.3.aar
Binary files differ
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -2,6 +2,7 @@
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
@@ -14,6 +15,7 @@
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -23,9 +25,11 @@
import com.google.gson.reflect.TypeToken;
import com.hdl.hdlsdk.device.DevicesListActivity;
import com.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.event.DeleteNetworkListener;
import com.hdl.sdk.common.event.EventListener;
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.HDLLink;
import com.hdl.sdk.connect.bean.LinkResponse;
@@ -55,10 +59,11 @@
    private RecyclerView rv;
    private TextView tv;
    private TextView responseTv;
    private TextView localSecret;
    private EditText editText;
    boolean isOn;
    private EventListener allTopicsListener;
    private String testLightSid = "0001010D48C71B02020100010101";
    private String testLightSid = "02010131D9C03D01020300010107";
    private String secret = "";
    @Override
@@ -164,6 +169,8 @@
        authbean.setSpk(spkStr);
        authbean.setMACKey(mac_key);
        authbean.setRequest(requestBean);
        HDLLinkConfig.getInstance().setAuthBean(authbean);
        //HDLLinkConfig.getInstance().getDeviceInfoBean()这个初始化的时候要先设置好
        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean);
        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
@@ -174,10 +181,12 @@
                Log.e(TAG, "onError: 认证失败 " + e.getCode());
            }
            @RequiresApi(api = Build.VERSION_CODES.O)
            @Override
            public void onSuccess(String msg) {
                tv.setText("认证成功");
                responseTv.setText(msg.toString());
                localSecret.setText("密钥:" + HDLLinkConfig.getInstance().getLocalSecret());
            }
        });
    }
@@ -207,6 +216,7 @@
        setContentView(R.layout.activity_main);
        responseTv = findViewById(R.id.response_tv);
        editText = findViewById(R.id.edittext);
        localSecret = findViewById(R.id.local_secret);
        tv = findViewById(R.id.state_tv);
        rv = findViewById(R.id.rv);
        rv.setLayoutManager(new LinearLayoutManager(this));
@@ -215,6 +225,17 @@
        checkIfCertified();
        initDeviceInfo();//初始化
        registerAllTopicsListener();
        HDLLink.getInstance().setDeleteNetworkListener(new DeleteNetworkListener() {
            @Override
            public void onSuccess(Object msg) {
                LogUtils.i("setDeleteNetworkListener onSucceed = " + msg);
            }
            @Override
            public void onFailure() {
                LogUtils.i("setDeleteNetworkListener onFailure");
            }
        });
        ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
            @Override
@@ -352,6 +373,9 @@
            @Override
            public void onMessage(Object msg) {
                LinkResponse response = (LinkResponse) msg;
                if ("/user/all/custom/gateway/broadcast_reply".equals(response.getTopic())){
                    localSecret.setText("密钥:" + HDLLinkConfig.getInstance().getLocalSecret());
                }
            }
        };
        HDLLink.getInstance().registerAllTopicsListener(allTopicsListener);
HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml
@@ -76,6 +76,14 @@
                android:text="响应:" />
            <TextView
                android:id="@+id/local_secret"
                android:paddingStart="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="密钥:" />
            <TextView
                android:id="@+id/response_tv"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"