HDLSDK/.idea/compiler.xml
File was deleted HDLSDK/.idea/gradle.xml
File was deleted HDLSDK/app/build.gradle
@@ -32,6 +32,7 @@ implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.1' implementation files('libs\\gson-2.8.8.jar') testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' HDLSDK/app/libs/gson-2.8.8.jarBinary files differ
HDLSDK/app/src/main/AndroidManifest.xml
@@ -12,14 +12,12 @@ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.HDLSDK"> <activity android:name=".device.DevicesListActivity"></activity> <activity android:name=".MainActivity" android:exported="true"> HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java
File was deleted HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -10,7 +10,6 @@ import androidx.recyclerview.widget.RecyclerView; import android.Manifest; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; @@ -21,46 +20,30 @@ import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.listener.OnItemClickListener; import com.google.gson.JsonObject; 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.EventListener; import com.hdl.sdk.common.exception.HDLLinkException; import com.hdl.sdk.common.utils.IdUtils; import com.hdl.sdk.common.utils.IpUtils; 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.LinkRequest; import com.hdl.sdk.connect.bean.LinkResponse; import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.request.BroadcastRequest; import com.hdl.sdk.connect.bean.request.PropertyReadRequest; import com.hdl.sdk.connect.bean.response.BaseLocalResponse; import com.hdl.sdk.connect.bean.response.GatewaySearchBean; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; import com.hdl.sdk.connect.config.HDLLinkConfig; import com.hdl.sdk.connect.socket.HDLAuthSocket; import com.hdl.sdk.connect.socket.HDLSocket; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; import com.hdl.sdk.connect.protocol.LinkMessageDecoder; import com.hdl.sdk.connect.protocol.LinkMessageEncoder; import com.hdl.sdk.socket.SocketOptions; import com.hdl.sdk.socket.codec.MessagePipeLine; import java.util.Base64; import com.hdl.sdk.socket.SocketBoot; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Base64; import java.util.List; import java.util.Map; import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY; import static java.util.Base64.*; public class MainActivity extends AppCompatActivity { @@ -71,18 +54,19 @@ private TextView responseTv; boolean isOn; private EventListener allTopicsListener; private String testLightSid = "0001010D48C71B02020100010101"; private String testLightSid = "1493092497588469761"; @Override protected void onDestroy() { super.onDestroy(); removeAllTopicsListener(); } void init() { // HDLLinkConfig.getInstance().setLocalSecret("7d04c4e3c2b7d600"); // HDLLinkConfig.getInstance().setGatewayId("1473119283609321473"); // HDLLinkConfig.getInstance().setLocalEncrypt(true); } void init() { HDLLinkConfig.getInstance().setLocalSecret("e186beeb7974998e"); HDLLinkConfig.getInstance().setGatewayId("1519863101509361666"); } @RequiresApi(api = Build.VERSION_CODES.O) @Override protected void onCreate(Bundle savedInstanceState) { @@ -94,7 +78,7 @@ rv = findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this)); init(); // init(); checkIfCertified(); initDeviceInfo();//初始化基本信息,非常重要,认证时要用 registerAllTopicsListener(); @@ -170,7 +154,7 @@ break; case 8: //功能列表 startDevicesListActivity(); // startDevicesListActivity(); break; case 9: //UDP发送 @@ -206,6 +190,7 @@ String mes = isCertified ? "已经认证过" : "未认证"; showToast(mes); tv.setText(mes); } /** @@ -265,22 +250,23 @@ HDLLink.getInstance().removeAllTopicsListener(allTopicsListener); } void initDeviceInfo() { void initDeviceInfo() { AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); infoBean.setDeviceMAC("AA000000000000AF"); infoBean.setIPMAC("AA000000000000AF"); infoBean.setDeviceMAC("AA00000000000100"); infoBean.setIPMAC("AA00000000000100"); infoBean.setDeviceName("音乐播放器");//设备名字 infoBean.setDeviceModel("MCLog.431");//设备型号 infoBean.setAccessMode("WIFI"); infoBean.setIPGateway("192.168.1.1"); infoBean.setIPAddress("192.168.1.102"); infoBean.setIPAddress("192.168.1.116"); infoBean.setGateway_type("music.standard"); infoBean.setHw_version("HW2.0"); infoBean.setFw_version("Fw1.0"); infoBean.setOID("010105000000FE10");//每个设备oid都要不一样 infoBean.setSid("110105000000FE08110100000000");//每个设备的sid都要不一样 infoBean.setOID("010105000000FE11");//每个设备oid都要不一样 infoBean.setSid("110105000000FE08110100000011");//每个设备的sid都要不一样 HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); } /** @@ -297,8 +283,8 @@ // 正式服务器 String spkStr = "screen.mirror";//产品spk String macStr = "AA000000000000AC";//设备唯一MAC地址 String secret = "ee62124c151b737c";//通过spk和mac提交云端认证后分配的secret String macStr = "AA00000000000100";//设备唯一MAC地址 String secret = "e186beeb7974998e";//通过spk和mac提交云端认证后分配的secret String mac_key = stringToMD5(stringToMD5(macStr + secret)); String versionString = "HDL_V1.0.1";// @@ -320,15 +306,16 @@ HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() { @Override public void onError(HDLLinkException e) { tv.setText("认证失败"); responseTv.setText(e.getMsg()); Log.i("TAG", "onError: 认证失败"); // tv.setText("认证失败"); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError: 认证失败" + e.getMsg()); } @Override public void onSuccess(String msg) { tv.setText("认证成功"); responseTv.setText(msg.toString()); // tv.setText("认证成功"); // responseTv.setText(msg.toString()); Log.i("TAG", "onSuccess: 认证成功" + msg.toString()); } }); } @@ -364,15 +351,16 @@ HDLLink.getInstance().searchGatewayBroadcast(new HDLAuthSocket.SearchGatewayCallBack() { @Override public void onError(HDLLinkException e) { tv.setText("网关不在线"); responseTv.setText(e.getMsg()); // tv.setText("网关不在线"); // responseTv.setText(e.getMsg()); Log.i("TAG", "网关不在线" + e.getMsg()); } @Override public void onSuccess(GatewaySearchBean gatewaySearchBean) { tv.setText("网关在线"); responseTv.setText("搜索成功 网关id:" + gatewaySearchBean.getGatewayId()); // LogUtils.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId()); // tv.setText("网关在线"); // responseTv.setText("搜索成功 网关id:" + gatewaySearchBean.getGatewayId()); Log.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId()); } }); } @@ -386,13 +374,15 @@ HDLLink.getInstance().getFunctionList(new HDLLinkCallBack() { @Override public void onError(HDLLinkException error) { tv.setText(error.getMsg()); // tv.setText(error.getMsg()); Log.i("TAG", "onError 获取功能列表失败" + error.getMsg()); } @Override public void onSuccess(String data) { tv.setText("获取功能列表成功"); responseTv.setText(data); // tv.setText("获取功能列表成功"); // responseTv.setText(data); Log.i("TAG", "onSuccess 获取功能列表成功" + data.toString()); } }); } @@ -408,12 +398,14 @@ HDLLink.getInstance().getFunctionAttribute(sids, new HDLLinkCallBack() { @Override public void onSuccess(String msg) { responseTv.setText(msg); // responseTv.setText(msg); Log.i("TAG", "onSuccess 功能属性读取成功" + msg.toString()); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 获取功能列表失败" + e.getMsg()); } }); } @@ -429,20 +421,22 @@ HDLLink.getInstance().propertyRead(list, new HDLLinkCallBack() { @Override public void onSuccess(String data) { tv.setText("读取成功"); responseTv.setText(data); // tv.setText("读取成功"); // responseTv.setText(data); Log.i("TAG", "onSuccess 读取设备状态成功" + data.toString()); } @Override public void onError(HDLLinkException e) { tv.setText("读取失败"); responseTv.setText(e.getMsg()); // tv.setText("读取失败"); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 读取设备状态失败" + e.getMsg()); } }); } /** * 控制失败 * 控制设备 * 回复响应code为200 代表执行成功 */ void controlDecide() { @@ -461,12 +455,14 @@ HDLLink.getInstance().propertyDown(requestList, new HDLLinkCallBack() { @Override public void onSuccess(String data) { responseTv.setText(data); // responseTv.setText(data); Log.i("TAG", "onSuccess 控制设备成功" + data.toString()); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 控制设备失败" + e.getMsg()); } }); } @@ -479,12 +475,14 @@ HDLLink.getInstance().getSceneList(new HDLLinkCallBack() { @Override public void onSuccess(String msg) { responseTv.setText(msg); // responseTv.setText(msg); Log.i("TAG", "onSuccess 获取场景列表成功" + msg.toString()); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 获取场景列表失败" + e.getMsg()); } }); } @@ -509,21 +507,23 @@ HDLLink.getInstance().controlScene(sids, new HDLLinkCallBack() { @Override public void onSuccess(String msg) { responseTv.setText(msg); // responseTv.setText(msg); Log.i("TAG", "onSuccess 场景控制成功" + msg.toString()); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 场景控制失败" + e.getMsg()); } }); } void startDevicesListActivity() { /* void startDevicesListActivity() { Intent intent = new Intent(this, DevicesListActivity.class); startActivity(intent); } }*/ /** * TCP发送 只发一次,不监听回复,不重发 @@ -577,13 +577,14 @@ HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr, new HDLLinkResponseCallBack() { @Override public void onSuccess(LinkResponse msg) { Log.i("udpSendWithCallback", "udpSendWithCallback"); responseTv.setText(GsonConvert.getGson().toJson(msg)); Log.i("TAG", "onSuccess UDP发送成功" + GsonConvert.getGson().toJson(msg)); // responseTv.setText(GsonConvert.getGson().toJson(msg)); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError UDP发送失败" + e.getMsg()); } }); } @@ -598,13 +599,14 @@ HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr, new HDLLinkCallBack() { @Override public void onSuccess(String msg) { Log.i("tcpSendWithCallback", "tcpSendWithCallback"); responseTv.setText(msg); Log.i("TAG", "onSuccess TCP发送成功" + msg); // responseTv.setText(msg); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError TCP发送失败"); } }); } HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java
File was deleted HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java
File was deleted HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/FunctionBean.java
File was deleted HDLSDK/build.gradle
@@ -12,14 +12,15 @@ } } allprojects { repositories { maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'https://maven.aliyun.com/repository/public' } google() maven { url "https://jitpack.io" } } } HDLSDK/com.hdl.sdk/build.gradle
@@ -1,8 +1,11 @@ //打包的 apply plugin: 'com.android.library' apply plugin:'com.kezong.fat-aar' //apply plugin: 'com.android.library' //apply plugin:'com.kezong.fat-aar' plugins { id 'java-library' } android { /*android { compileSdkVersion rootProject.compileSdkVersion defaultConfig { @@ -21,23 +24,27 @@ sourceCompatibility 1.8 targetCompatibility 1.8 } } //gradlew assembleRelease //gradlew makeJar }*/ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') // embed 'com.ezviz.sdk:ezviz-sdk:4.16.1' // embed(name: 'hdl-common-release',ext: 'aar') // embed(name: 'hdl-connect-release',ext: 'aar') // embed(name: 'hdl-socket-release',ext: 'aar') // embed project(path: ':hdl-common', configuration:'default') // embed project(path: ':hdl-connect', configuration:'default') // embed project(path: ':hdl-socket', configuration:'default') embed project(path: ':hdl-common', configuration:'default') embed project(path: ':hdl-connect', configuration:'default') embed project(path: ':hdl-socket', configuration:'default') implementation project(path: ':hdl-common') implementation project(path: ':hdl-connect') implementation project(path: ':hdl-socket') } //打包的 /* buildscript { repositories { @@ -50,105 +57,4 @@ classpath 'com.android.tools.build:gradle:3.6.3' classpath 'com.kezong:fat-aar:1.2.16' } } //allprojects { // repositories { // flatDir{ // dirs 'libs' // } // google() // jcenter() // } //} ////运行的 // //apply plugin: 'com.android.application' //apply from: "../app-common/build_common.gradle" //apply plugin: 'kotlin-android' //apply plugin: 'kotlin-android-extensions' // ////如果有用到kapt添加如下配置 //kapt { // useBuildCache = true // javacOptions { // option("-Xmaxerrs", 500) // } //} // //android { // // compileSdkVersion 29 // buildToolsVersion "29.0.3" // // sourceSets { // main { // jniLibs.srcDirs = ['libs'] // } // } // lintOptions { // abortOnError false // } // defaultConfig { // applicationId "com.evoyo.home1111112" // minSdkVersion 21 // //noinspection ExpiredTargetSdkVersion // targetSdkVersion 28 // versionCode 4160 // versionName "v4.16.0.20201230" // ndk { // abiFilters "armeabi-v7a", "arm64-v8a" // } // /*禁止使用java8,如果sdk使用了java8编译,但是应用层使用了java7编译,会导致应用层打包无法通过*/ // compileOptions { // sourceCompatibility JavaVersion.VERSION_1_7 // targetCompatibility JavaVersion.VERSION_1_7 // } // } // //在Android代码块中添加如下配置:(可优化最上图中transformClassDexBuilderForDebug的时间) // dexOptions { // preDexLibraries true // maxProcessCount 8 // } // buildTypes { // debug { // minifyEnabled false // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // } // } // productFlavors { // } //} // // //dependencies { // /*萤石SDK核心模块,必须*/ //// api project(path: ':ezviz-sdk') // api 'com.ezviz.sdk:ezviz-sdk:4.16.1' // // /*视频通话模块,按需使用*/ //// api project(path: ':videotalk') // api 'com.ezviz.sdk:videotalk:1.2.0' // // /*视频通话模块,按需使用*/ //// api project(path: ':streamctrl') // api 'com.ezviz.sdk:streamctrl:1.2.0' // // /*萤石核心模块的三方依赖*/ //// implementation 'javax.jmdns:jmdns:3.4.1' // implementation 'com.google.code.gson:gson:2.8.0' // api 'com.squareup.okhttp3:okhttp:3.12.1' // // /*demo的依赖项*/ // api project(path: ':app-common') // implementation fileTree(include: ['*.jar'], dir: 'libs') // implementation 'com.android.support.constraint:constraint-layout:1.1.3' //} // ////repositories { //// maven { url 'https://dl.bintray.com/open-ezviz/mobile-sdk'} ////} }*/ HDLSDK/com.hdl.sdk/src/main/AndroidManifest.xml
File was deleted HDLSDK/hdl-common/build.gradle
@@ -1,8 +1,9 @@ plugins { id 'com.android.library' // id 'com.android.library' id 'java-library' } android { /*android { compileSdkVersion rootProject.compileSdkVersion defaultConfig { @@ -25,10 +26,13 @@ sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }*/ java { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } dependencies { api 'com.google.code.gson:gson:2.8.8' api 'androidx.annotation:annotation:1.2.0' api 'androidx.collection:collection:1.1.0' // api 'com.google.code.gson:gson:2.8.8' implementation files('libs\\gson-2.8.8.jar') } HDLSDK/hdl-common/libs/gson-2.8.8.jarBinary files differ
HDLSDK/hdl-common/src/main/AndroidManifest.xml
File was deleted HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java
@@ -1,15 +1,14 @@ package com.hdl.sdk.common; import android.content.Context; import com.hdl.sdk.common.utils.LogUtils; /** * Created by Tong on 2021/9/28. * Modify by panlili on 5/7/22 */ public class HDLSdk { private Context context; // private Context context; /** * 获取当前版本 @@ -32,14 +31,14 @@ return SingletonInstance.INSTANCE; } public void init(Context context) { /* public void init(Context context) { this.context = context.getApplicationContext(); LogUtils.i("Version:" + version); } }*/ public Context getContext() { return context; } // public Context getContext() { // return context; // } /** * 设置打印是否开启 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
@@ -1,14 +1,12 @@ package com.hdl.sdk.common.event; import androidx.annotation.NonNull; import androidx.collection.ArrayMap; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.concurrent.ExecutorService; @@ -21,9 +19,9 @@ private static final List<EventListener> ALL_TOPICS_EVENT = new ArrayList<>();//所有主题消息 private static final ArrayMap<Object, List<EventListener>> EVENT = new ArrayMap<>(); private static final Map<Object, List<EventListener>> EVENT = new HashMap<>(); private static final ArrayMap<EventListener, Integer> TYPE = new ArrayMap<>(); private static final Map<EventListener, Integer> TYPE = new HashMap<>(); private static final int MAIN_TYPE = 0; private static final int IO_TYPE = 1; @@ -62,7 +60,7 @@ } } public void registerIo(Object tag, EventListener listener) { public void registerIo(Object tag, EventListener listener) { synchronized (this) { LogUtils.i("注册主题:" + tag); if (tag == null) return; @@ -82,7 +80,7 @@ } } public void remove(Object tag) { public void remove(Object tag) { synchronized (this) { if (tag == null) { return; @@ -105,7 +103,7 @@ } } public void remove(Object tag, EventListener listener) { public void remove(Object tag, EventListener listener) { synchronized (this) { try { if (tag == null || listener == null) { @@ -125,7 +123,7 @@ } } public synchronized void post(Object tag, @NonNull Object o) { public synchronized void post(Object tag, Object o) { if (tag == null) { LogUtils.i("post tag为空"); return; @@ -139,7 +137,8 @@ if (listener == null) { continue; } ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { @Override public void run() { try { @@ -173,17 +172,18 @@ }); } } }catch (Exception e){ } catch (Exception e) { LogUtils.e("post异常2:" + e.getMessage()); } } /** * 注册所有主题消息的监听 * * @param listener */ public synchronized void registerAllTopicsListener(EventListener listener) { if(listener==null){ if (listener == null) { return; } try { @@ -191,13 +191,14 @@ ALL_TOPICS_EVENT.add(listener); } TYPE.put(listener, MAIN_TYPE); }catch (Exception e){ } catch (Exception e) { LogUtils.e("registerAllTopicsListener:" + e.getMessage()); } } /** * 取消所有主题消息的监听 * * @param listener */ public synchronized void removeAllTopicsListener(EventListener listener) { @@ -206,7 +207,7 @@ @Override public void run() { try { if(listener==null){ if (listener == null) { return; } if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) { HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java
@@ -1,7 +1,5 @@ package com.hdl.sdk.common.exception; import androidx.annotation.NonNull; /** * Created by Tong on 2021/11/11. */ @@ -39,8 +37,7 @@ this.code = code; } public @NonNull String getMsg() { public String getMsg() { return msg; } HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
@@ -1,8 +1,8 @@ package com.hdl.sdk.common.utils; import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; //import android.content.Context; //import android.net.wifi.WifiInfo; //import android.net.wifi.WifiManager; import java.net.InetAddress; import java.net.InterfaceAddress; @@ -19,21 +19,6 @@ * @return 广播地址 */ public static String getBroadcastAddress() { // try { // for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces(); // niEnum.hasMoreElements(); ) { // NetworkInterface ni = niEnum.nextElement(); // if (!ni.isLoopback()) { // for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) { // if (interfaceAddress.getBroadcast() != null) { // return interfaceAddress.getBroadcast().toString().substring(1); // } // } // } // } // } catch (SocketException e) { // e.printStackTrace(); // } return "255.255.255.255"; } @@ -54,7 +39,7 @@ return false; } public static String getIP(Context application) { /*public static String getIP(Context application) { WifiManager wifiManager = (WifiManager) application.getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (!wifiManager.isWifiEnabled()) { try { @@ -77,7 +62,7 @@ } return null; } */ private static String intToIp(int i) { HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/LogUtils.java
@@ -1,7 +1,5 @@ package com.hdl.sdk.common.utils; import android.util.Log; /** * Created by Tong on 2021/9/23. */ @@ -21,43 +19,43 @@ public static void d(String tag, String msg) { if (tag != null && msg != null && isEnabled) { Log.d(TAG, tag + "-- " + msg); System.out.println(tag + "-- " + msg); } } public static void e(String tag, String msg) { if (tag != null && msg != null && isEnabled) { Log.e(TAG, tag + "-- " + msg); System.out.println(tag + "-- " + msg); } } public static void w(String tag, String msg) { if (tag != null && msg != null && isEnabled) { Log.w(TAG, tag + "-- " + msg); System.out.println(tag + "-- " + msg); } } public static void v(String tag, String msg) { if (tag != null && msg != null && isEnabled) { Log.v(TAG, tag + "-- " + msg); System.out.println(tag + "-- " + msg); } } public static void i(String tag, String msg) { if (tag != null && msg != null && isEnabled) { Log.i(TAG, tag + "-- " + msg); System.out.println(tag + "-- " + msg); } } public static void i(String msg) { if (msg != null && isEnabled) { Log.i(TAG, msg); System.out.println(msg); } } public static void e(String msg) { if (msg != null && isEnabled) { Log.e(TAG, msg); System.out.println(msg); } } } HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/SPUtils.java
File was deleted HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/TextUtils.java
New file @@ -0,0 +1,9 @@ package com.hdl.sdk.common.utils; public class TextUtils { public static boolean isEmpty(CharSequence str) { return str == null || str.length() == 0; } } HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/ThreadToolUtils.java
@@ -1,8 +1,5 @@ package com.hdl.sdk.common.utils; import android.os.Handler; import android.os.Looper; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -12,16 +9,13 @@ */ public class ThreadToolUtils { private final Handler uiHandler = new Handler(Looper.getMainLooper()); // private final Handler uiHandler = new Handler(Looper.getMainLooper()); //cpu 最大线程容纳量 private final int coreSize = Runtime.getRuntime().availableProcessors() + 1; private ThreadToolUtils() { } // private static class SingletonInstance { // } private static final ThreadToolUtils instance = new ThreadToolUtils(); @@ -65,9 +59,10 @@ /** * 切换回主线程 */ public void runOnUiThread(Runnable run) { uiHandler.post(run); } public void runOnUiThread(Runnable run) { // uiHandler.post(run); Thread thread = new Thread(run); thread.start(); } } HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java
@@ -1,8 +1,5 @@ package com.hdl.sdk.common.utils.gson; import androidx.annotation.NonNull; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -25,14 +22,12 @@ return new ParameterizedTypeImpl(rawType, actualTypeArguments, null); } @NonNull @Override public Type[] getActualTypeArguments() { return actualTypeArguments; } @NonNull @Override public Type getRawType() { return rawType; HDLSDK/hdl-connect/build.gradle
@@ -1,8 +1,9 @@ plugins { id 'com.android.library' // id 'com.android.library' id 'java-library' } android { /*android { compileSdkVersion rootProject.compileSdkVersion defaultConfig { @@ -25,10 +26,14 @@ sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }*/ java { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } dependencies { api project(path: ':hdl-socket') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' implementation files('libs\\commons-lang3-3.12.0.jar') implementation files('libs\\gson-2.8.8.jar') } HDLSDK/hdl-connect/libs/commons-lang3-3.12.0.jarBinary files differ
HDLSDK/hdl-connect/libs/gson-2.8.8.jarBinary files differ
HDLSDK/hdl-connect/src/main/AndroidManifest.xml
File was deleted HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
@@ -1,7 +1,6 @@ package com.hdl.sdk.connect; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; @@ -13,7 +12,6 @@ import com.hdl.sdk.connect.socket.HDLSocket; import java.util.List; import java.util.concurrent.TimeUnit; /** * Created by jlchen on 11/15/21. HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java
@@ -1,10 +1,7 @@ package com.hdl.sdk.connect.bean; import android.text.TextUtils; import androidx.annotation.NonNull; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.TextUtils; import com.hdl.sdk.connect.config.HDLLinkConfig; import com.hdl.sdk.common.utils.ByteUtils; import com.hdl.sdk.connect.utils.AesUtil; @@ -56,7 +53,6 @@ this.length = length; } @NonNull @Override public String toString() { return "Topic:" + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java
@@ -1,9 +1,6 @@ package com.hdl.sdk.connect.bean; import android.text.TextUtils; import androidx.annotation.NonNull; import com.hdl.sdk.common.utils.TextUtils; import com.hdl.sdk.common.utils.gson.GsonConvert; import java.io.Serializable; @@ -57,7 +54,6 @@ this.length = length; } @NonNull @Override public String toString() { return GsonConvert.getGson().toJson(this); HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/callback/HDLLinkCallBack.java
@@ -1,8 +1,5 @@ package com.hdl.sdk.connect.callback; import com.hdl.sdk.common.exception.HDLLinkException; import com.hdl.sdk.connect.bean.LinkResponse; /** * Created by jlchen on 11/16/21. * HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
@@ -1,24 +1,21 @@ package com.hdl.sdk.connect.config; import android.text.TextUtils; import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.SPUtils; import com.hdl.sdk.common.utils.TextUtils; import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.response.GatewaySearchBean; /** * Created by jlchen on 11/11/21. * Modify by panlili on 5/7/22 * * @Description : HDLLinkConfig */ public class HDLLinkConfig { private static final String AUTHENTICATE_LS_KEY = "auth_ls_key"; private static final String AUTHENTICATE_GATEWAYID_KEY = "auth_gatewayid_key"; private static final String AUTHENTICATE_IPADDRESS_KEY = "auth_ipaddress_key"; private static final String AUTHENTICATE_IS_LS_KEY = "auth_isls_key"; private static String AUTHENTICATE_LS_KEY = ""; private static String AUTHENTICATE_GATEWAYID_KEY = ""; private static String AUTHENTICATE_IPADDRESS_KEY = ""; private String localSecret;//本地加密密钥 private String gatewayId; @@ -30,9 +27,9 @@ /** * instance */ private static final HDLLinkConfig instance=new HDLLinkConfig(); private HDLLinkConfig() { private static final HDLLinkConfig instance = new HDLLinkConfig(); private HDLLinkConfig() { loadConfig(); } @@ -41,15 +38,7 @@ * * @return AuthenticateConfig */ public static HDLLinkConfig getInstance() { // if (instance == null) { // synchronized (HDLLinkConfig.class) { // if (instance == null) { // instance = new HDLLinkConfig(); // instance.loadConfig(); // } // } // } public static HDLLinkConfig getInstance() { return instance; } @@ -60,19 +49,15 @@ this.gatewayId = ""; this.ipAddress = ""; this.localSecret = ""; SPUtils.remove(AUTHENTICATE_LS_KEY); SPUtils.remove(AUTHENTICATE_GATEWAYID_KEY); SPUtils.remove(AUTHENTICATE_IPADDRESS_KEY); SPUtils.remove(AUTHENTICATE_IS_LS_KEY); } /** * 加载缓存 */ void loadConfig() { localSecret = SPUtils.getString(AUTHENTICATE_LS_KEY, ""); gatewayId = SPUtils.getString(AUTHENTICATE_GATEWAYID_KEY, ""); ipAddress = SPUtils.getString(AUTHENTICATE_IPADDRESS_KEY, ""); localSecret = AUTHENTICATE_LS_KEY; gatewayId = AUTHENTICATE_GATEWAYID_KEY; ipAddress = AUTHENTICATE_IPADDRESS_KEY; } /** @@ -86,9 +71,9 @@ this.localSecret = localSecret; this.gatewayId = gatewayId; this.ipAddress = ipAddress; SPUtils.put(AUTHENTICATE_LS_KEY, localSecret); SPUtils.put(AUTHENTICATE_GATEWAYID_KEY, gatewayId); SPUtils.put(AUTHENTICATE_IPADDRESS_KEY, ipAddress); AUTHENTICATE_LS_KEY = localSecret; AUTHENTICATE_GATEWAYID_KEY = gatewayId; AUTHENTICATE_IPADDRESS_KEY = ipAddress; } /** @@ -112,7 +97,7 @@ public void setLocalSecret(String localSecret) { this.localSecret = localSecret; SPUtils.put(AUTHENTICATE_LS_KEY, localSecret); AUTHENTICATE_LS_KEY = localSecret; } public String getLocalSecret() { @@ -122,14 +107,16 @@ public String getGatewayId() { return gatewayId; } public void setGatewayId(String gatewayId) { this.gatewayId=gatewayId; this.gatewayId = gatewayId; } public String getIpAddress() { return ipAddress; } public void setIpAddress(String ipAddress){ public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } @@ -143,7 +130,7 @@ if (!this.ipAddress.equals(this.currentGateway.getIp_address())) { //如果IP地址有变化则更新 this.ipAddress = this.currentGateway.getIp_address(); SPUtils.put(AUTHENTICATE_IPADDRESS_KEY, ipAddress); AUTHENTICATE_IPADDRESS_KEY = ipAddress; } } } HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
@@ -1,20 +1,11 @@ package com.hdl.sdk.connect.protocol; import android.annotation.TargetApi; import android.os.Build; import android.util.Log; import androidx.annotation.RequiresApi; import com.google.gson.internal.bind.DateTypeAdapter; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.connect.config.HDLLinkConfig; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.utils.ByteUtils; import com.hdl.sdk.connect.bean.LinkResponse; import com.hdl.sdk.connect.utils.AesUtil; import com.hdl.sdk.connect.utils.ProtocolParse; import com.hdl.sdk.socket.codec.ByteToMessageDecoder; import java.util.ArrayList; @@ -168,11 +159,12 @@ try { //之前的版本这块是明文的 if (!topic.contains("heartbeat_reply")) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) LogUtils.e("解密失败,数据内容是:\r\n" + Base64.getEncoder().encodeToString(body)); else { LogUtils.e("解密失败,数据内容是:\r\n" + new String(body, "utf-8")); } }*/ LogUtils.e("解密失败,数据内容是:\r\n" + new String(body, "utf-8")); } } catch (Exception e) { } HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
@@ -1,7 +1,5 @@ package com.hdl.sdk.connect.socket; import android.text.TextUtils; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; @@ -10,8 +8,8 @@ import com.hdl.sdk.common.exception.HDLLinkCode; import com.hdl.sdk.common.exception.HDLLinkException; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.TextUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.connect.HDLLink; import com.hdl.sdk.connect.bean.response.AuthenticateResponse; import com.hdl.sdk.connect.bean.response.NetworkAccessBroadcastResponse; import com.hdl.sdk.connect.callback.BaseCallBack; @@ -35,7 +33,6 @@ import com.hdl.sdk.socket.udp.UdpSocketBoot; import com.hdl.sdk.socket.udp.UdpSocketOptions; import java.net.InetSocketAddress; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -183,6 +180,9 @@ HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { LogUtils.i("onSucceed msg:" + msg); if (callBack == null) return; try { AuthenticateResponse bean = getAuthenticateResponseBean(msg); @@ -629,6 +629,8 @@ } } }); LogUtils.i("callBackSearchGatewayTimeout onError:搜索网关失败,超时"); } HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
@@ -1,8 +1,5 @@ package com.hdl.sdk.connect.socket; import android.text.TextUtils; import android.util.Log; import com.google.gson.JsonObject; import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.event.EventDispatcher; @@ -11,6 +8,7 @@ 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.TextUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.common.utils.gson.GsonConvert; import com.hdl.sdk.connect.bean.request.BroadcastRequest; @@ -32,6 +30,8 @@ import com.hdl.sdk.socket.codec.MessagePipeLine; import com.hdl.sdk.socket.listener.ConnectStatusListener; import com.hdl.sdk.socket.listener.SendListener; import org.apache.commons.lang3.StringEscapeUtils; import java.util.ArrayList; import java.util.List; @@ -110,7 +110,7 @@ }).start(); } // private static class SingletonInstance { // private static class SingletonInstance { // } private static final HDLSocket instance = new HDLSocket(); @@ -119,8 +119,9 @@ } SocketOptions options; private SocketOptions getTcpOptions() { if(null!=options){ if (null != options) { return options; } options = new SocketOptions(); @@ -243,6 +244,7 @@ final BaseLocalResponse<List<FunctionAttributeRequest>> data = new BaseLocalResponse<>(); data.setId(IdUtils.getUUId()); data.setTime_stamp(time); List<FunctionAttributeRequest> list = new ArrayList<>(); for (String s : sids) { @@ -423,13 +425,13 @@ throw new RuntimeException("请搜索网关"); } //如果没有初始化,或者网关IP更改了,就重新初始化 if (tcpBoot == null||!getTcpOptions().getIp().equals(getTcpIp())) { if (tcpBoot == null || !getTcpOptions().getIp().equals(getTcpIp())) { tcpBoot = TcpClient.init(getTcpIp(), getTcpPort(), getTcpOptions()); tcpBoot.SetHeartbeat(new IHeartbeat() { @Override public void heartbeat() { if(HDLLinkConfig.getInstance().getDeviceInfoBean()==null||HDLLinkConfig.getInstance().getDeviceInfoBean().getOID()==null) { if (HDLLinkConfig.getInstance().getDeviceInfoBean() == null || HDLLinkConfig.getInstance().getDeviceInfoBean().getOID() == null) { LogUtils.i("DeviceInfoBean为空,需要设置才能正常心跳"); return; } @@ -493,8 +495,9 @@ } /** * 场景控制 * @param sids 场景sid列表 * 场景控制 * * @param sids 场景sid列表 * @param callBack 回调 */ public void controlScene(List<String> sids, HDLLinkCallBack callBack) { @@ -584,8 +587,8 @@ /** * 通用TCP发送指令 只发一次,不监听回复,不重发 * * @param topic 发送数据 * @param bodyStr 回复的主题 * @param topic 发送数据 * @param bodyStr 回复的主题 */ public void tcpSendMsg(String topic, String bodyStr) { try { @@ -596,7 +599,7 @@ LinkRequest message = new LinkRequest(topic, bodyStr); getTcp().sendMsg(message.getSendBytes()); } catch (Exception e) { LogUtils.e("tcpSendMsg", "发送失败 :"+e.getMessage()); LogUtils.e("tcpSendMsg", "发送失败 :" + e.getMessage()); } } @@ -607,7 +610,7 @@ public void sendMsg(byte[] data, String eventTag, HDLLinkCallBack callBack, SendListener sendListener) { try { if(eventTag!=null) { if (eventTag != null) { final AtomicInteger sendCount = new AtomicInteger(0); final ScheduledExecutorService threadPool = ThreadToolUtils.getInstance().newScheduledThreadPool(1); @@ -615,12 +618,14 @@ @Override public void onMessage(Object msg) { if (msg instanceof LinkResponse) { LogUtils.i("sendMsg onSuccess"); LogUtils.i("sendMsg onSuccess" + StringEscapeUtils.unescapeJava(msg.toString())); // LogUtils.i("sendMsg onSuccess" + msg); threadPool.shutdownNow(); LogUtils.i("sendMsg eventListener remove"); EventDispatcher.getInstance().remove(eventTag, this); if (callBack != null) { callBack.onSuccess(msg.toString()); callBack.onSuccess(StringEscapeUtils.unescapeJava(msg.toString())); // callBack.onSuccess(msg.toString()); } } } @@ -644,6 +649,8 @@ } } }); LogUtils.i("HDLSocket sendMsg onError 发送失败"); } } }, 1000, 500, TimeUnit.MILLISECONDS); @@ -675,6 +682,8 @@ } } }); LogUtils.i("HDLSocket sendMsg onError 发送失败"); } } HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java
@@ -1,16 +1,14 @@ package com.hdl.sdk.connect.socket; import android.text.TextUtils; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.event.EventListener; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.TextUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.connect.bean.LinkRequest; import com.hdl.sdk.socket.SocketBoot; import com.hdl.sdk.socket.udp.UdpSocketBoot; import java.net.InetSocketAddress; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ProtocolParse.java
@@ -1,6 +1,6 @@ package com.hdl.sdk.connect.utils; import android.text.TextUtils; import com.hdl.sdk.common.utils.TextUtils; /** * Created by Tong on 2021/9/22. HDLSDK/hdl-socket/build.gradle
@@ -1,8 +1,9 @@ plugins { id 'com.android.library' // id 'com.android.library' id 'java-library' } android { /*android { compileSdkVersion rootProject.compileSdkVersion defaultConfig { @@ -26,6 +27,10 @@ targetCompatibility JavaVersion.VERSION_1_8 } }*/ java { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } dependencies { HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java
@@ -1,29 +1,18 @@ package com.hdl.sdk.socket; import android.text.TextUtils; import android.util.Log; import androidx.collection.ArrayMap; import com.google.gson.JsonObject; import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.utils.IdUtils; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.TextUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.socket.annotation.ConnectStatus; import com.hdl.sdk.socket.client.IClient; import com.hdl.sdk.socket.client.IHeartbeat; import com.hdl.sdk.socket.listener.SendListener; import java.net.ConnectException; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; /** * Created by Tong on 2021/9/26. @@ -57,7 +46,7 @@ private final BlockingQueue<SocketRequest> mMessageQueue = new LinkedBlockingDeque<>(); private final ArrayMap<String, SendListener> sendMap = new ArrayMap<>(); private final Map<String, SendListener> sendMap = new HashMap<>(); public SocketBoot(IClient client) { this.client = client; HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java
@@ -1,31 +1,22 @@ package com.hdl.sdk.socket.annotation; import androidx.annotation.IntDef; import java.lang.annotation.ElementType; import java.lang.annotation.Target; /** * Created by Tong on 2021/9/22. */ @Target({ElementType.TYPE_PARAMETER, ElementType.PARAMETER}) @IntDef({ConnectStatus.CONNECTING, ConnectStatus.CONNECTED, ConnectStatus.DISCONNECT}) public @interface ConnectStatus { public class ConnectStatus { /** * 连接中 */ int CONNECTING = 0; public static int CONNECTING = 0; /** * 连接成功 */ int CONNECTED = 1; public static int CONNECTED = 1; /** * 连接关闭 */ int DISCONNECT = 2; public static int DISCONNECT = 2; } HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java
@@ -1,8 +1,5 @@ package com.hdl.sdk.socket.client; import com.hdl.sdk.common.utils.ByteUtils; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.socket.SocketBoot; @@ -39,21 +36,21 @@ /** * 从连接池中找出当前IP及端口的连接客户端 * * @param ipAdderss 连接IP地址 * @param port 连接端口 * @param port 连接端口 * @return */ public static TcpClient getTcpClientByIP(String ipAdderss,int port) { for(TcpClient tcpClient:tcpClientList){ if(tcpClient.ip.equals(ipAdderss)&&tcpClient.port==port) { public static TcpClient getTcpClientByIP(String ipAdderss, int port) { for (TcpClient tcpClient : tcpClientList) { if (tcpClient.ip.equals(ipAdderss) && tcpClient.port == port) { return tcpClient; } } return null; return null; } private byte[] readBuffer = new byte[4*1024]; private byte[] readBuffer = new byte[4 * 1024]; private TcpClient(String ip, int port, SocketOptions socketOptions) { this.socketOptions = socketOptions; @@ -83,8 +80,6 @@ } @Override public void disconnect() { if (mSocket != null) { @@ -108,18 +103,18 @@ public void onHandleResponse() throws Exception { final InputStream stream = getInputStream(); if (stream != null && getOptions() != null) { while ( true) { int len=getInputStream().read(readBuffer); if(len<=0){ throw new Exception("接收异常,接收数据长度len="+len); while (true) { int len = getInputStream().read(readBuffer); if (len <= 0) { throw new Exception("接收异常,接收数据长度len=" + len); } IHandleMessage handleMessage = getOptions().getHandleMessage(); if (handleMessage != null) { byte []bytes = new byte[len]; System.arraycopy(readBuffer,0,bytes,0,len); byte[] bytes = new byte[len]; System.arraycopy(readBuffer, 0, bytes, 0, len); //完整的数据才回调 handleMessage.read(bytes,ip); handleMessage.read(bytes, ip); } } } @@ -129,10 +124,10 @@ public void sendMsg(byte[] msg) throws Exception { final OutputStream outputStream = getOutStream(); if (outputStream != null && getOptions() != null) { IHandleMessage handleMessage = getOptions().getHandleMessage(); handleMessage.write(handleMessage.write(msg)); outputStream.write(msg); outputStream.flush(); IHandleMessage handleMessage = getOptions().getHandleMessage(); handleMessage.write(handleMessage.write(msg)); outputStream.write(msg); outputStream.flush(); } } @@ -141,6 +136,7 @@ * 处理连接状态 */ public void onConnectStatus(int status) { ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { @Override public void run() { @@ -148,16 +144,13 @@ if (list != null && !list.isEmpty()) { for (ConnectStatusListener listener : list) { switch (status) { case ConnectStatus .CONNECTING: case 0: listener.onConnecting(); break; case ConnectStatus .CONNECTED: case 1: listener.onConnected(); break; case ConnectStatus .DISCONNECT: case 2: listener.onConnectFailed(); break; } @@ -165,6 +158,9 @@ } } }); LogUtils.i("TcpClient onConnectStatus status:" + status); } HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
@@ -1,10 +1,8 @@ package com.hdl.sdk.socket.client; import android.text.TextUtils; import com.hdl.sdk.common.utils.IpUtils; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.TextUtils; import com.hdl.sdk.socket.SocketBoot; import com.hdl.sdk.socket.SocketOptions; import com.hdl.sdk.socket.SocketPool; HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java
@@ -1,26 +1,15 @@ package com.hdl.sdk.socket.udp; import android.text.TextUtils; import androidx.collection.ArrayMap; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.TextUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.socket.SocketRequest; import com.hdl.sdk.socket.annotation.ConnectStatus; import com.hdl.sdk.socket.client.IClient; import com.hdl.sdk.socket.client.IUdpClient; import com.hdl.sdk.socket.listener.SendListener; import java.net.ConnectException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.concurrent.BlockingQueue; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -37,7 +26,7 @@ private ExecutorService receiveThread; private final ArrayMap<String, SendListener> sendMap = new ArrayMap<>(); private final Map<String, SendListener> sendMap = new HashMap<>(); public UdpSocketBoot(IUdpClient client) { this.client = client; HDLSDK/settings.gradle
@@ -4,3 +4,4 @@ include ':hdl-connect' include ':hdl-common' include ':com.hdl.sdk' include ':hdl-test' HDLSDK_DEMO/.idea/compiler.xml
@@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="CompilerConfiguration"> <bytecodeTargetLevel target="1.8" /> <bytecodeTargetLevel target="11" /> </component> </project> HDLSDK_DEMO/.idea/gradle.xml
@@ -4,7 +4,7 @@ <component name="GradleSettings"> <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> <option name="testRunner" value="PLATFORM" /> <option name="testRunner" value="GRADLE" /> <option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="modules"> @@ -17,7 +17,6 @@ </set> </option> <option name="resolveModulePerSourceSet" value="false" /> <option name="useQualifiedModuleNames" value="true" /> </GradleProjectSettings> </option> </component> HDLSDK_DEMO/.idea/misc.xml
@@ -3,12 +3,16 @@ <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.3494791666666667" /> <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml" value="0.3536458333333333" /> <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/demo_item.xml" value="0.3494791666666667" /> <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/item_devices_list.xml" value="0.3494791666666667" /> <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> </option> </component> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> HDLSDK_DEMO/app/build.gradle
@@ -32,12 +32,17 @@ implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.1' implementation files('libs\\hdl-common.jar') implementation files('libs\\hdl-connect.jar') implementation files('libs\\hdl-socket.jar') implementation files('libs\\commons-lang3-3.12.0.jar') implementation files('libs\\gson-2.8.8.jar') testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6' implementation 'com.google.code.gson:gson:2.8.8' // implementation 'com.google.code.gson:gson:2.8.8' // implementation project(path: ':hdl-connect') } HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.0.11.aarBinary files differ
HDLSDK_DEMO/app/libs/commons-lang3-3.12.0.jarBinary files differ
HDLSDK_DEMO/app/libs/gson-2.8.8.jarBinary files differ
HDLSDK_DEMO/app/libs/hdl-common.jarBinary files differ
HDLSDK_DEMO/app/libs/hdl-connect.jarBinary files differ
HDLSDK_DEMO/app/libs/hdl-socket.jarBinary files differ
HDLSDK_DEMO/app/src/main/AndroidManifest.xml
@@ -12,14 +12,12 @@ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.HDLSDK"> <activity android:name=".device.DevicesListActivity"></activity> <activity android:name=".MainActivity" android:exported="true"> HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/App.java
File was deleted HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/DemoAdapter.java
@@ -4,7 +4,6 @@ import androidx.annotation.Nullable; import com.chad.library.adapter.base.BaseMultiItemQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.viewholder.BaseViewHolder; import java.util.List; @@ -16,7 +15,7 @@ public DemoAdapter(@Nullable List<DemoBean> data) { super(data); addItemType(0, R.layout.demo_item); addItemType(0,R.layout.demo_item); } @Override HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -4,12 +4,13 @@ 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; import android.Manifest; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; @@ -19,32 +20,22 @@ import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.listener.OnItemClickListener; import com.google.gson.JsonObject; 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.EventListener; import com.hdl.sdk.common.exception.HDLLinkException; import com.hdl.sdk.common.utils.IdUtils; import com.hdl.sdk.common.utils.IpUtils; import com.hdl.sdk.common.utils.gson.GsonConvert; import com.hdl.sdk.connect.HDLLink; import com.hdl.sdk.connect.bean.LinkRequest; import com.hdl.sdk.connect.bean.LinkResponse; import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.request.PropertyReadRequest; import com.hdl.sdk.connect.bean.response.BaseLocalResponse; import com.hdl.sdk.connect.bean.response.GatewaySearchBean; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; import com.hdl.sdk.connect.config.HDLLinkConfig; import com.hdl.sdk.connect.socket.HDLAuthSocket; import com.hdl.sdk.connect.socket.HDLSocket; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; import com.hdl.sdk.connect.protocol.LinkMessageDecoder; import com.hdl.sdk.connect.protocol.LinkMessageEncoder; import com.hdl.sdk.socket.SocketOptions; import com.hdl.sdk.socket.codec.MessagePipeLine; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; @@ -52,8 +43,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY; public class MainActivity extends AppCompatActivity { @@ -64,7 +53,7 @@ private TextView responseTv; boolean isOn; private EventListener allTopicsListener; private String testLightSid = "0001010D48C71B02020100010101"; private String testLightSid = "1493092497588469761"; @Override protected void onDestroy() { @@ -72,86 +61,26 @@ removeAllTopicsListener(); } void initDeviceInfo() { AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); infoBean.setDeviceMAC("AA000000000000AF"); infoBean.setIPMAC("AA000000000000AF"); infoBean.setDeviceName("音乐播放器");//设备名字 infoBean.setDeviceModel("MCLog.431");//设备型号 infoBean.setAccessMode("WIFI"); infoBean.setIPGateway("192.168.88.1"); infoBean.setIPAddress("192.168.88.153"); infoBean.setGateway_type("music.standard"); infoBean.setHw_version("HW2.0"); infoBean.setFw_version("Fw1.0"); infoBean.setOID("010105000000FE10");//每个设备oid都要不一样 infoBean.setSid("110105000000FE08110100000000");//每个设备的sid都要不一样 HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); void init() { HDLLinkConfig.getInstance().setLocalSecret("e186beeb7974998e"); HDLLinkConfig.getInstance().setGatewayId("1519863101509361666"); // HDLLinkConfig.getInstance().setLocalEncrypt(true); } /** * 入网认证 */ void sendAuthenticateRequest() { tv.setText("开始入网认证..."); //认证提交参数准备 // // //测试服务 // String spkStr = "ir.module";//产品spk // String macStr = "AA000000000000AF";//设备唯一MAC地址 // String secret = "44b360eb74b7ba64";//通过spk和mac提交云端认证后分配的secret // 正式服务器 String spkStr = "screen.mirror";//产品spk String macStr = "AA000000000000AC";//设备唯一MAC地址 String secret = "ee62124c151b737c";//通过spk和mac提交云端认证后分配的secret String mac_key = stringToMD5(stringToMD5(macStr + secret)); String versionString = "HDL_V1.0.1";// String time = String.valueOf(System.currentTimeMillis()); HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr); //1.设置认证信息 AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); requestBean.setMAC(macStr); requestBean.setSupplier("WISE"); requestBean.setFirmwareVersion(versionString); requestBean.setHardwareModel("1956F"); AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean(); authbean.setSpk(spkStr); authbean.setMACKey(mac_key); authbean.setRequest(requestBean); //HDLLinkConfig.getInstance().getDeviceInfoBean()这个初始化的时候要先设置好 AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean); HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() { @Override public void onError(HDLLinkException e) { tv.setText("认证失败"); responseTv.setText(e.getMsg()); Log.i("TAG", "onError: 认证失败"); } @Override public void onSuccess(String msg) { tv.setText("认证成功"); responseTv.setText(msg.toString()); } }); } @RequiresApi(api = Build.VERSION_CODES.O) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); responseTv = findViewById(R.id.response_tv); tv = findViewById(R.id.state_tv); rv = findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this)); // init(); checkIfCertified(); initDeviceInfo();//初始化 initDeviceInfo();//初始化基本信息,非常重要,认证时要用 registerAllTopicsListener(); ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() { @@ -225,7 +154,7 @@ break; case 8: //功能列表 startDevicesListActivity(); // startDevicesListActivity(); break; case 9: //UDP发送 @@ -271,6 +200,7 @@ @Override public void onMessage(Object msg) { LinkResponse response = (LinkResponse) msg; handleLinkResponse(response); } }; HDLLink.getInstance().registerAllTopicsListener(allTopicsListener); @@ -319,7 +249,82 @@ HDLLink.getInstance().removeAllTopicsListener(allTopicsListener); } void initDeviceInfo() { AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); // infoBean.setDeviceMAC("AA00000000000100"); // infoBean.setIPMAC("AA00000000000100"); infoBean.setDeviceMAC("BB000000000000BF"); infoBean.setIPMAC("BB000000000000BF"); infoBean.setDeviceName("音乐播放器");//设备名字 infoBean.setDeviceModel("MCLog.431");//设备型号 infoBean.setAccessMode("WIFI"); // infoBean.setIPGateway("192.168.1.1"); // infoBean.setIPAddress("192.168.1.116"); infoBean.setIPGateway("192.168.3.1"); infoBean.setIPAddress("192.168.3.126"); infoBean.setGateway_type("music.standard"); infoBean.setHw_version("HW2.0"); infoBean.setFw_version("Fw1.0"); // infoBean.setOID("010105000000FE11");//每个设备oid都要不一样 // infoBean.setSid("110105000000FE08110100000011");//每个设备的sid都要不一样 infoBean.setOID("010105010101FE07");//每个设备oid都要不一样 infoBean.setSid("010105010101FE02020100040101");//每个设备的sid都要不一样 HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); } /** * 入网认证 */ void sendAuthenticateRequest() { tv.setText("开始入网认证..."); //认证提交参数准备 // 测试服务 String spkStr = "ir.module";//产品spk String macStr = "BB000000000000BF";//设备唯一MAC地址 String secret = "d70f8872ddd6fe6a";//通过spk和mac提交云端认证后分配的secret // 正式服务器 // String spkStr = "screen.mirror";//产品spk // String macStr = "AA00000000000100";//设备唯一MAC地址 // String secret = "e186beeb7974998e";//通过spk和mac提交云端认证后分配的secret String mac_key = stringToMD5(stringToMD5(macStr + secret)); String versionString = "HDL_V1.0.1";// String time = String.valueOf(System.currentTimeMillis()); HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr); //1.设置认证信息 AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); requestBean.setMAC(macStr); requestBean.setSupplier("WISE"); requestBean.setFirmwareVersion(versionString); requestBean.setHardwareModel("1956F"); AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean(); authbean.setSpk(spkStr); authbean.setMACKey(mac_key); authbean.setRequest(requestBean); //HDLLinkConfig.getInstance().getDeviceInfoBean()这个初始化的时候要先设置好 AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean); HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() { @Override public void onError(HDLLinkException e) { // tv.setText("认证失败"); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError: 认证失败" + e.getMsg()); } @Override public void onSuccess(String msg) { // tv.setText("认证成功"); // responseTv.setText(msg.toString()); Log.i("TAG", "onSuccess: 认证成功" + msg.toString()); } }); } String stringToMD5(String text) { byte[] hash; @@ -352,15 +357,16 @@ HDLLink.getInstance().searchGatewayBroadcast(new HDLAuthSocket.SearchGatewayCallBack() { @Override public void onError(HDLLinkException e) { tv.setText("网关不在线"); responseTv.setText(e.getMsg()); // tv.setText("网关不在线"); // responseTv.setText(e.getMsg()); Log.i("TAG", "网关不在线" + e.getMsg()); } @Override public void onSuccess(GatewaySearchBean gatewaySearchBean) { tv.setText("网关在线"); responseTv.setText("搜索成功 网关id:" + gatewaySearchBean.getGatewayId()); // LogUtils.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId()); // tv.setText("网关在线"); // responseTv.setText("搜索成功 网关id:" + gatewaySearchBean.getGatewayId()); Log.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId()); } }); } @@ -374,13 +380,15 @@ HDLLink.getInstance().getFunctionList(new HDLLinkCallBack() { @Override public void onError(HDLLinkException error) { tv.setText(error.getMsg()); // tv.setText(error.getMsg()); Log.i("TAG", "onError 获取功能列表失败" + error.getMsg()); } @Override public void onSuccess(String data) { tv.setText("获取功能列表成功"); responseTv.setText(data); // tv.setText("获取功能列表成功"); // responseTv.setText(data); Log.i("TAG", "onSuccess 获取功能列表成功" + data.toString()); } }); } @@ -396,12 +404,14 @@ HDLLink.getInstance().getFunctionAttribute(sids, new HDLLinkCallBack() { @Override public void onSuccess(String msg) { responseTv.setText(msg); // responseTv.setText(msg); Log.i("TAG", "onSuccess 功能属性读取成功" + msg.toString()); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 获取功能列表失败" + e.getMsg()); } }); } @@ -417,20 +427,22 @@ HDLLink.getInstance().propertyRead(list, new HDLLinkCallBack() { @Override public void onSuccess(String data) { tv.setText("读取成功"); responseTv.setText(data); // tv.setText("读取成功"); // responseTv.setText(data); Log.i("TAG", "onSuccess 读取设备状态成功" + data.toString()); } @Override public void onError(HDLLinkException e) { tv.setText("读取失败"); responseTv.setText(e.getMsg()); // tv.setText("读取失败"); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 读取设备状态失败" + e.getMsg()); } }); } /** * 控制失败 * 控制设备 * 回复响应code为200 代表执行成功 */ void controlDecide() { @@ -449,12 +461,14 @@ HDLLink.getInstance().propertyDown(requestList, new HDLLinkCallBack() { @Override public void onSuccess(String data) { responseTv.setText(data); // responseTv.setText(data); Log.i("TAG", "onSuccess 控制设备成功" + data.toString()); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 控制设备失败" + e.getMsg()); } }); } @@ -467,12 +481,14 @@ HDLLink.getInstance().getSceneList(new HDLLinkCallBack() { @Override public void onSuccess(String msg) { responseTv.setText(msg); // responseTv.setText(msg); Log.i("TAG", "onSuccess 获取场景列表成功" + msg.toString()); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 获取场景列表失败" + e.getMsg()); } }); } @@ -497,21 +513,23 @@ HDLLink.getInstance().controlScene(sids, new HDLLinkCallBack() { @Override public void onSuccess(String msg) { responseTv.setText(msg); // responseTv.setText(msg); Log.i("TAG", "onSuccess 场景控制成功" + msg.toString()); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError 场景控制失败" + e.getMsg()); } }); } void startDevicesListActivity() { /* void startDevicesListActivity() { Intent intent = new Intent(this, DevicesListActivity.class); startActivity(intent); } }*/ /** * TCP发送 只发一次,不监听回复,不重发 @@ -565,13 +583,14 @@ HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr, new HDLLinkResponseCallBack() { @Override public void onSuccess(LinkResponse msg) { Log.i("udpSendWithCallback", "udpSendWithCallback"); responseTv.setText(GsonConvert.getGson().toJson(msg)); Log.i("TAG", "onSuccess UDP发送成功" + GsonConvert.getGson().toJson(msg)); // responseTv.setText(GsonConvert.getGson().toJson(msg)); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError UDP发送失败" + e.getMsg()); } }); } @@ -586,13 +605,14 @@ HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr, new HDLLinkCallBack() { @Override public void onSuccess(String msg) { Log.i("tcpSendWithCallback", "tcpSendWithCallback"); responseTv.setText(msg); Log.i("TAG", "onSuccess TCP发送成功" + msg); // responseTv.setText(msg); } @Override public void onError(HDLLinkException e) { responseTv.setText(e.getMsg()); // responseTv.setText(e.getMsg()); Log.i("TAG", "onError TCP发送失败"); } }); } HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java
File was deleted HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java
File was deleted HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/device/FunctionBean.java
File was deleted