HDLSDK/.idea/gradle.xml
@@ -11,6 +11,7 @@ <option name="modules"> <set> <option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$/app" /> <option value="$PROJECT_DIR$/com.hdl.sdk" /> <option value="$PROJECT_DIR$/hdl-connect" /> </set> HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -1,7 +1,10 @@ package com.hdl.hdlsdk; import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; @@ -38,9 +41,11 @@ import com.hdl.sdk.connect.bean.request.ListUploadRequest; import com.hdl.sdk.connect.bean.response.BaseLocalResponse; import com.hdl.sdk.connect.bean.response.GatewaySearchBean; 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.cloud.CallBackListener; import com.hdl.sdk.connect.cloud.CheckAppVersionListener; import com.hdl.sdk.connect.cloud.HDLException; import com.hdl.sdk.connect.config.HDLLinkConfig; import com.hdl.sdk.connect.socket.HDLAuthSocket; @@ -129,6 +134,32 @@ tv.setText("申请成功"); responseTv.setText(msg.toString()); secret = msg.toString(); } }); } void checkAppVersion() { tv.setText("开始检测更新..."); responseTv.setText(""); // //正式服务器 String appKey = "i8hR07jzrIS";//appkey String appSecret = "BmnJ8RWTtaVEBk24zPPF4UMwfYu0lAWU";//appsecret String appCode = "1697150870315999233";//appCode HDLLink.getInstance().checkAppVersion(this, appKey, appSecret, getAppVersionName(this), appCode, new CheckAppVersionListener() { @Override public void onSuccess(UpdateInfo info) { tv.setText("有新更新"); responseTv.setText(info.toString()); } @Override public void onError(HDLException e) { tv.setText("检测更新失败"); responseTv.setText(e.getMsg()); } }); @@ -265,6 +296,7 @@ beans.add(new DemoBean("UDP发送,监听主题回复,带重发带回调")); beans.add(new DemoBean("TCP发送,监听主题回复,带重发带回调")); beans.add(new DemoBean("退网")); beans.add(new DemoBean("检测更新")); demoAdapter = new DemoAdapter(beans); rv.setAdapter(demoAdapter); @@ -342,6 +374,10 @@ case 15: //退网 deleteNetwork(); break; case 16: //检测更新 checkAppVersion(); break; } } @@ -787,4 +823,26 @@ } }); } /** * 获取APP版本 * * @param context * @return */ public static String getAppVersionName(Context context) { String versionName = "0"; try { PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); versionName = packageInfo.versionName; if (TextUtils.isEmpty(versionName)) { versionName = "0"; } } catch (Exception e) { e.printStackTrace(); } return versionName; } } HDLSDK/com.hdl.sdk/build.gradle
@@ -8,8 +8,8 @@ defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode 5 versionName "1.1.3" versionCode 6 versionName "1.1.4" } buildTypes { debug { HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
@@ -147,7 +147,7 @@ listener.onMessage(o); } } catch (Exception e) { // LogUtils.e("post异常1:" + e.getMessage()); LogUtils.e("post异常1:" + e.getMessage()); } } }); HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/SPUtils.java
@@ -2,11 +2,17 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.Base64; import com.hdl.sdk.common.HDLSdk; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Collections; import java.util.Map; import java.util.Set; @@ -146,5 +152,52 @@ .apply(); } private static String Object2String(Object object) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = null; try { objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(object); String string = new String(Base64.encode(byteArrayOutputStream.toByteArray(), Base64.DEFAULT)); objectOutputStream.close(); return string; } catch (IOException e) { e.printStackTrace(); return null; } } private static Object String2Object(String objectString) { byte[] mobileBytes = Base64.decode(objectString.getBytes(), Base64.DEFAULT); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(mobileBytes); ObjectInputStream objectInputStream = null; try { objectInputStream = new ObjectInputStream(byteArrayInputStream); Object object = objectInputStream.readObject(); objectInputStream.close(); return object; } catch (Exception e) { e.printStackTrace(); return null; } } public static void saveSerializableEntity(String key, Object saveObject) { SharedPreferences.Editor editor = getAppPreference().edit(); String string = Object2String(saveObject); editor.putString(key, string); editor.commit(); } public static Object getSerializableEntity(String key) { String string = getAppPreference().getString(key, null); if (string != null) { Object object = String2Object(string); return object; } else { return null; } } } HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
@@ -12,6 +12,7 @@ import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; 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.interceptor.EncryptInterceptor; @@ -181,6 +182,34 @@ } /** * 检测更新 * * @param appKey appKey * @param appSecret appSecret * @param versionCode 当前版本 * @param appCode appCode * @param listener 结果回调 */ public void checkAppVersion(Context context, String appKey, String appSecret, String versionCode, String appCode, CheckAppVersionListener listener) { LogUtils.i("检测更新"); HxHttpConfig.getInstance().init(context, HdlCloudApi.BASE_CHINA_URL) .addInterceptor( new EncryptInterceptor(), new SmartHeaderInterceptor()); this.appKey = appKey; this.appSecret = appSecret; HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY); HxHttpConfig.getInstance() //.addInterceptor(new HttpCacheInterceptor()) .addInterceptor(httpLoggingInterceptor).ignoreSSL(); HdlCloudController.checkAppVersion(versionCode, appCode, listener); } /** * 通知删除并退网子设备 * * @param oid 从网关(设备)oid HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/UpdateInfo.java
New file @@ -0,0 +1,90 @@ package com.hdl.sdk.connect.bean.response; import java.io.Serializable; /** * Created by panlili on 2023/8/30. */ public class UpdateInfo implements Serializable { private String version; private String appName; private String appCode; //是否强制更新 private Boolean isEnforce; //类型 private String releaseSystem; //新包下载路径 private String packageUrl; //更新说明 private String remark; public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public String getAppCode() { return appCode; } public void setAppCode(String appCode) { this.appCode = appCode; } public Boolean getIsEnforce() { return isEnforce; } public void setIsEnforce(Boolean isEnforce) { this.isEnforce = isEnforce; } public String getReleaseSystem() { return releaseSystem; } public void setReleaseSystem(String releaseSystem) { this.releaseSystem = releaseSystem; } public String getPackageUrl() { return packageUrl; } public void setPackageUrl(String packageUrl) { this.packageUrl = packageUrl; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } @Override public String toString() { return "UpdateInfo{" + "version='" + version + '\'' + ", appName='" + appName + '\'' + ", appCode='" + appCode + '\'' + ", isEnforce=" + isEnforce + ", releaseSystem='" + releaseSystem + '\'' + ", packageUrl='" + packageUrl + '\'' + ", remark='" + remark + '\'' + '}'; } } HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CheckAppVersionListener.java
New file @@ -0,0 +1,11 @@ package com.hdl.sdk.connect.cloud; import com.hdl.sdk.connect.bean.response.UpdateInfo; /** * Created by panlili on 2023/8/30. */ public interface CheckAppVersionListener extends BaseCallBack { void onSuccess(UpdateInfo info); } HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudApi.java
@@ -15,4 +15,7 @@ //申请设备密钥(根据设备MAC) public static final String APPLY_DEVICE_SECRET = "/smart-open/third/device/authByMac"; //检查app是否更新 public static final String CHECK_APP_VERSION_URL = "/basis-footstone/app/appVersion/check"; } HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudController.java
@@ -1,6 +1,7 @@ package com.hdl.sdk.connect.cloud; import com.hdl.hdlhttp.HxHttp; import com.hdl.sdk.connect.bean.response.UpdateInfo; import io.reactivex.rxjava3.disposables.Disposable; @@ -35,4 +36,30 @@ }); } /** * 检查app是否更新 * * @return */ public static Disposable checkAppVersion(String versionCode, String appCode, CheckAppVersionListener listener) { return HxHttp.builder() .url(HdlCloudApi.BASE_CHINA_URL + HdlCloudApi.CHECK_APP_VERSION_URL) .params("version", versionCode) .params("appCode", appCode) .params("releaseSystem", "Android") .build() .post() .subscribeWith(new HDLResponse<UpdateInfo>() { @Override public void onResponse(UpdateInfo response) { listener.onSuccess(response); } @Override public void onFailure(HDLException e) { listener.onError(e); } }); } } HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
@@ -19,6 +19,7 @@ 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"; public static final String AUTHENTICATE_IS_DEVICEINFO_KEY = "auth_deviceinfo_key"; private String localSecret;//本地加密密钥 private String gatewayId; @@ -187,11 +188,13 @@ } public AuthenticateRequest.AuthenticateDeviceInfoBean getDeviceInfoBean() { return deviceInfoBean; AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = (AuthenticateRequest.AuthenticateDeviceInfoBean) SPUtils.getSerializableEntity(AUTHENTICATE_IS_DEVICEINFO_KEY); return infoBean; } public void setDeviceInfoBean(AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean) { this.deviceInfoBean = deviceInfoBean; SPUtils.saveSerializableEntity(AUTHENTICATE_IS_DEVICEINFO_KEY, deviceInfoBean); } public AuthenticateRequest.RequestBean getRequestBean() { HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
@@ -1,5 +1,7 @@ package com.hdl.sdk.connect.socket; import static com.hdl.sdk.connect.config.HDLLinkConfig.AUTHENTICATE_IS_DEVICEINFO_KEY; import android.os.Build; import android.text.TextUtils; import android.util.Log; @@ -130,6 +132,10 @@ if (!TextUtils.isEmpty(data)) { DeviceInfoResponse response = GsonConvert.getGson().fromJson(data, new TypeToken<DeviceInfoResponse>() { }.getType()); if ((response == null) || (response.getObjects() == null) || (response.getObjects().getIPAddress() == null)) return; HDLLinkConfig.getInstance().setIpAddress(response.getObjects().getIPAddress()); LogUtils.i("---getIpAddress=" + HDLLinkConfig.getInstance().getIpAddress()); HDLSDK/settings.gradle
@@ -1,5 +1,5 @@ //include ':app' include ':app' //include ':hdl-socket' include ':hdl-connect' //include ':hdl-common'