From 54a8c79222bba0644b02fe1dbc5d75e26ea50b5d Mon Sep 17 00:00:00 2001 From: mac <user@users-MacBook-Pro.local> Date: 星期二, 14 十一月 2023 18:17:58 +0800 Subject: [PATCH] 2023年11月14日18:17:48 --- app/src/main/java/com/hdl/photovoltaic/utils/LocalManageUtil.java | 339 ++++---------- app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java | 11 app/src/main/java/com/hdl/photovoltaic/base/BaseActivity.java | 3 app/src/main/java/com/hdl/photovoltaic/HDLApp.java | 13 app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java | 230 +++++++++- app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java | 225 +++++++++ app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java | 401 +++++++++++++++++ app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java | 12 HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java | 3 app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java | 19 HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/core/api/HDLCloudHomeApi.java | 4 app/src/main/res/values-en/strings.xml | 6 app/build.gradle | 12 app/src/main/java/com/hdl/photovoltaic/base/CustomBaseActivity.java | 32 + app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java | 24 + 15 files changed, 1,048 insertions(+), 286 deletions(-) diff --git a/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java index 47347c1..4eb0581 100644 --- a/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java +++ b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java @@ -169,6 +169,9 @@ } + + + /** * 鍙戦�佸師鐢熼�忎紶鍛戒护鏁版嵁 * diff --git a/HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/core/api/HDLCloudHomeApi.java b/HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/core/api/HDLCloudHomeApi.java index 48d3783..65492ce 100644 --- a/HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/core/api/HDLCloudHomeApi.java +++ b/HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/core/api/HDLCloudHomeApi.java @@ -100,9 +100,9 @@ public static final String POST_OTA_GET_DeviceFirmwares = "/home-wisdom/program/device/ota/getDeviceFirmwares"; //璁惧鍥轰欢浜戠鐨勯┍鍔ㄥ垎椤靛垪琛ㄨ幏鍙� public static final String POST_OTA_GET_CloudDeviceFirmwares = "/smart-footstone/firmware/firmwareVersion/getLastOne"; - //Link璁惧鍥轰欢鍗囩骇OTA鍛戒护涓嬪彂 + //璁惧鍥轰欢鍗囩骇OTA鍛戒护 public static final String POST_OTA_DeviceFirmwareUpgrade = "/home-wisdom/program/device/ota/deviceFirmwareUpgrade"; - //LINK璁惧鑾峰彇鍥轰欢鍗囩骇鍖呬笅杞藉湴鍧� + //璁惧鑾峰彇鍥轰欢鍗囩骇鍖呬笅杞藉湴鍧� public static final String POST_OTA_GET_LinkDeviceFirmwareDownloadUrl = "/smart-footstone/mgmt/device/ota/getLinkDeviceFirmwareDownloadUrl"; //鑾峰彇IARCC涓夋柟鍥轰欢鍒嗛〉 diff --git a/app/build.gradle b/app/build.gradle index 60bdfa3..ed09318 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -50,6 +50,14 @@ dirs 'libs' } } + /** + * 鎵撳寘鑷姩鍛藉悕 + */ + android.applicationVariants.configureEach { variant -> + variant.outputs.configureEach { + outputFileName = "photovoltaic_${name}_v${versionName}_${generateTime()}.apk" + } + } buildTypes { release { @@ -70,6 +78,10 @@ targetCompatibility JavaVersion.VERSION_1_8 } } +//鏋勫缓鏃堕棿 +static def generateTime() { + return new Date().format("yyyyMMddHHmm") +} dependencies { diff --git a/app/src/main/java/com/hdl/photovoltaic/HDLApp.java b/app/src/main/java/com/hdl/photovoltaic/HDLApp.java index 9378b04..2abcc75 100644 --- a/app/src/main/java/com/hdl/photovoltaic/HDLApp.java +++ b/app/src/main/java/com/hdl/photovoltaic/HDLApp.java @@ -1,7 +1,11 @@ package com.hdl.photovoltaic; import android.app.Application; +import android.content.Context; import android.content.Intent; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.util.DisplayMetrics; import com.hdl.hdlhttp.HxHttpConfig; @@ -15,12 +19,14 @@ import com.hdl.photovoltaic.uni.HDLUniMPSDKManager; import com.hdl.photovoltaic.utils.AppManagerUtils; import com.hdl.photovoltaic.utils.LocalManageUtil; +import com.hdl.photovoltaic.utils.SharedPreUtils; import com.hdl.sdk.link.HDLLinkLocalSdk; import com.hdl.sdk.link.core.connect.HDLUdpConnect; import com.hdl.sdk.link.core.utils.QueueUtils; import com.hdl.sdk.link.core.utils.mqtt.MqttRecvClient; -import java.util.HashMap;import java.util.Locale; +import java.util.HashMap; +import java.util.Locale; import java.util.Objects; import io.dcloud.common.util.RuningAcitvityUtil; @@ -186,8 +192,6 @@ } - - // /** // * 鍒濆鍖杣ni app mqtt // */ @@ -201,4 +205,7 @@ // } // } + + + } diff --git a/app/src/main/java/com/hdl/photovoltaic/base/BaseActivity.java b/app/src/main/java/com/hdl/photovoltaic/base/BaseActivity.java index 7824776..f74016b 100644 --- a/app/src/main/java/com/hdl/photovoltaic/base/BaseActivity.java +++ b/app/src/main/java/com/hdl/photovoltaic/base/BaseActivity.java @@ -12,6 +12,7 @@ import com.hdl.photovoltaic.listener.BaseView; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.utils.AppManagerUtils; +import com.hdl.photovoltaic.utils.LocalManageUtil; import com.hdl.photovoltaic.widget.LoadingDialog; import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; @@ -28,7 +29,7 @@ @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + LocalManageUtil.changeAppLanguage("en", this); _mActivity = this; Object content = getContentView(); //娣诲姞Activity鍒板爢鏍� diff --git a/app/src/main/java/com/hdl/photovoltaic/base/CustomBaseActivity.java b/app/src/main/java/com/hdl/photovoltaic/base/CustomBaseActivity.java index 37526ce..6e363f4 100644 --- a/app/src/main/java/com/hdl/photovoltaic/base/CustomBaseActivity.java +++ b/app/src/main/java/com/hdl/photovoltaic/base/CustomBaseActivity.java @@ -1,11 +1,15 @@ package com.hdl.photovoltaic.base; +import android.content.Context; import android.os.Bundle; import androidx.annotation.Nullable; import com.hdl.photovoltaic.R; +import com.hdl.photovoltaic.utils.LocalManageUtil; + +import java.util.Locale; /** * 鑷畾涔夋柟娉�,鐢ㄤ簬瀹炵幇涓�у寲 @@ -15,7 +19,8 @@ @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setNotificationBarBackgroundColor(0); + setNotificationBarBackgroundColor(CustomColor.blue); + } /** @@ -23,15 +28,24 @@ * * @param color 棰滆壊鍊�(0=钃濊壊;1=鐧借壊;) */ - public void setNotificationBarBackgroundColor(int color) { - - if (color == 0) { - color = R.color.text_245EC3; - } else if (color == 1) { - if (color == 1) { - color = R.color.text_FFFFFFFF; + public void setNotificationBarBackgroundColor(CustomColor color) { + switch (color) { + case blue: { + getWindow().setStatusBarColor(getColor(R.color.text_245EC3)); + break; + } + case white: { + getWindow().setStatusBarColor(getColor(R.color.text_FFFFFFFF)); + break; } } - getWindow().setStatusBarColor(getColor(color)); + + } + + public enum CustomColor { + blue,//钃濊壊 + white,//鐧借壊 + + } } diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java b/app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java index 1057676..3abca1c 100644 --- a/app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java +++ b/app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java @@ -1,9 +1,19 @@ package com.hdl.photovoltaic.internet; +import android.text.TextUtils; +import android.util.Log; + +import com.hdl.log.utils.PointUtil; import com.hdl.photovoltaic.other.HdlAccountLogic; +import com.hdl.sdk.link.common.exception.HDLLinkException; import com.hdl.sdk.link.core.callback.HDLLinkCallBack; +import com.hdl.sdk.link.core.callback.ModbusCallBack; +import com.hdl.sdk.link.core.connect.HDLModBusConnect; import com.hdl.sdk.link.gateway.HDLLinkLocalGateway; + +import java.lang.reflect.Type; +import java.util.Arrays; /** * 瀹㈡埛绔搷浣滈�昏緫 @@ -57,4 +67,219 @@ HDLLinkLocalGateway.getInstance().sendDataToLinkGateway(mac, topic, jObject, sendPath, callBack); } + + /** + * 鍙戦�丮odBus鏁版嵁鍒扮綉鍏� + * 涓嬪彂涓婚搴曞眰榛樿 + * + * @param mac 缃戝叧mac + * @param oidAddresses oid閲岄潰Addresses鍦板潃 + * @param functionCode 鍔熻兘鐮併��3=锛堣鍙栧涓瘎瀛樺櫒)锛�,6=锛堝啓鍏ュ崟涓瘎瀛樺櫒锛�,16=锛堝啓鍏ュ涓瘎瀛樺櫒锛夈�� + * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧� + * @param contentData 鍐呭鏁版嵁锛堜笉鍚瘎瀛樺櫒鍦板潃锛夈�愭敞鎰忥細鍔熻兘鐮�=3鏃�,濉暟鍊硷紱瀹為檯璇诲灏慴yte灏卞~澶氬皯锛屼緥濡傚~"20"銆� + */ + public void SendModBusDataToLinkGateway(String mac, String oidAddresses, int functionCode, int registerAddress, String contentData, ModbusCallBack modbusCallBack) { + String s = ""; + switch (functionCode) { + case 3: { + s = getReadModbusPassData(oidAddresses, registerAddress, functionCode, contentData); + } + break; + case 6: { + s = getWriteSingleModbusPassData(oidAddresses, registerAddress, functionCode, contentData); + } + break; + case 16: { + s = getWriteMultipleModbusPassData(oidAddresses, registerAddress, functionCode, contentData); + } + break; + } + HDLModBusConnect.getInstance().Send(mac, s.getBytes(), modbusCallBack); + } + + /** + * 鑾峰彇璇诲彇銆恗odbus鍗忚銆戞嫾鎺ラ�忎紶鏁版嵁鐨勫瓧绗︿覆 + * 涓嬪彂涓婚锛�/user/${gw_id}/custom/native/${driver}/down; + * 閫嗗彉鍣ㄥ洖澶嶄富棰橈細/user/${gw_id}/custom/native/${driver}/down_reply; + * Modbus ECU鍗忚锛氫簨浠禝D(2涓猙yte)->鍗忚[鍥哄畾:0,0](2涓猙yte)->闀垮害(2byte)->鏍囪瘑绗oid鐨刟ddresses鍊糫(4涓猙yte)->鍔熻兘鐮�(1涓猙yte)->璐熻浇鏁版嵁(N涓猙yte); + * 闀垮害(2涓猙yte)=鏍囪瘑绗�(4涓猙yte)+鍔熻兘鐮�(1涓猙yte)+璐熻浇鏁版嵁(N涓猙yte); + * 璐熻浇鏁版嵁=瀵勫瓨鍣ㄥ湴鍧�(2涓猙yte)+瀵勫瓨鍣ㄩ暱搴�(2涓猙yte)+鍐呭闀垮害(1涓猙yte)+鍐呭鏁版嵁(N涓猙yte)銆愭敞鎰�:鍗曚釜鍐欏叆瀵勫瓨鍣�-->鍘绘帀<瀵勫瓨鍣ㄩ暱搴�>鍜�<鍐呭闀垮害>銆�; + * 瀵勫瓨鍣ㄩ暱搴�=(鍐呭鏁版嵁/2); + * 渚嬪瓙:new byte[]{00,01,00,00,00,0x09,00,00,00,01,03,00,00,00,01}; + * + * @param oidAddresses oid閲岄潰Addresses鐨勫�� + * @param functionCode 鍔熻兘鐮併��3=锛堣鍙栧涓瘎瀛樺櫒)锛�,6=锛堝啓鍏ュ崟涓瘎瀛樺櫒锛�,16=锛堝啓鍏ュ涓瘎瀛樺櫒锛夈�� + * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧� + * @param contentData 鍐呭鏁版嵁锛堜笉鍚瘎瀛樺櫒鍦板潃锛� + */ + public String getReadModbusPassData(String oidAddresses, int functionCode, int registerAddress, String contentData) { + String data = ""; + try { + String eventID = to2ByteHexString(registerAddress);//浜嬩欢ID(2byte) + String agreement = "0000";//鍗忚锛�2byte锛� + String dataByteLength = "";//闀垮害锛圢 byte锛� + String oidAddresses_1 = oidAddresses;//鏍囪瘑绗︼紙4byte锛� + String functionCode_1 = to1ByteHexString(functionCode);//鍔熻兘鐮侊紙=1byte锛� + String registerAddress_1 = to2ByteHexString(registerAddress);//瀵勫瓨鍣ㄥ湴鍧�锛�2byte锛� + String registerLength_1 = to2ByteHexString(Integer.getInteger(contentData) / 2);//瀵勫瓨鍣ㄩ暱搴︼紙2byte锛� + byte[] bytes = (oidAddresses_1 + functionCode_1 + registerAddress_1 + registerLength_1).getBytes(); + dataByteLength = to1ByteHexString(bytes.length / 2); + data = eventID + agreement + dataByteLength + oidAddresses_1 + functionCode_1 + registerAddress_1 + registerLength_1; + return data; + } catch (Exception ignored) { + return data; + } + } + + + /** + * 鑾峰彇鍐欏叆鍗曚釜銆恗odbus鍗忚銆戞嫾鎺ラ�忎紶鏁版嵁鐨勫瓧绗︿覆 + * 涓嬪彂涓婚锛�/user/${gw_id}/custom/native/${driver}/down; + * 閫嗗彉鍣ㄥ洖澶嶄富棰橈細/user/${gw_id}/custom/native/${driver}/down_reply; + * Modbus ECU鍗忚锛氫簨浠禝D(2涓猙yte)->鍗忚[鍥哄畾:0,0](2涓猙yte)->闀垮害(2byte)->鏍囪瘑绗oid鐨刟ddresses鍊糫(4涓猙yte)->鍔熻兘鐮�(1涓猙yte)->璐熻浇鏁版嵁(N涓猙yte); + * 闀垮害(2涓猙yte)=鏍囪瘑绗�(4涓猙yte)+鍔熻兘鐮�(1涓猙yte)+璐熻浇鏁版嵁(N涓猙yte); + * 璐熻浇鏁版嵁=瀵勫瓨鍣ㄥ湴鍧�(2涓猙yte)+瀵勫瓨鍣ㄩ暱搴�(2涓猙yte)+鍐呭闀垮害(1涓猙yte)+鍐呭鏁版嵁(N涓猙yte)銆愭敞鎰�:鍗曚釜鍐欏叆瀵勫瓨鍣�-->鍘绘帀<瀵勫瓨鍣ㄩ暱搴�>鍜�<鍐呭闀垮害>銆�; + * 瀵勫瓨鍣ㄩ暱搴�=(鍐呭鏁版嵁/2); + * 渚嬪瓙:new byte[]{[0, 11, 0, 0, 0, 30, 0, 0, 0, 26, 6, 0, 11, 49, 50, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32]}; + * + * @param oidAddresses oid閲岄潰Addresses鐨勫�� + * @param functionCode 鍔熻兘鐮併��3=锛堣鍙栧涓瘎瀛樺櫒)锛�,6=锛堝啓鍏ュ崟涓瘎瀛樺櫒锛�,16=锛堝啓鍏ュ涓瘎瀛樺櫒锛夈�� + * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧� + * @param contentData 鍐呭鏁版嵁锛堜笉鍚瘎瀛樺櫒鍦板潃锛� + */ + public String getWriteSingleModbusPassData(String oidAddresses, int functionCode, int registerAddress, String contentData) { + String data = ""; + try { + String eventID = to2ByteHexString(registerAddress);//浜嬩欢ID(2byte) + String agreement = "0000";//鍗忚锛�2byte锛� + String dataByteLength = "";//闀垮害锛圢 byte锛� + String oidAddresses_1 = oidAddresses;//鏍囪瘑绗︼紙4byte锛� + String functionCode_1 = to1ByteHexString(functionCode);//鍔熻兘鐮侊紙=1byte锛� + String registerAddress_1 = to2ByteHexString(registerAddress);//瀵勫瓨鍣ㄥ湴鍧�锛�2byte锛� + String contentData_1 = contentData;//鍐呭鏁版嵁锛圢 byte锛� + byte[] bytes = (oidAddresses_1 + functionCode_1 + registerAddress_1 + contentData_1).getBytes(); + dataByteLength = to1ByteHexString(bytes.length / 2); + data = eventID + agreement + dataByteLength + oidAddresses_1 + functionCode_1 + registerAddress_1 + contentData_1; + return data; + } catch (Exception ignored) { + return data; + } + } + + /** + * 鑾峰彇鍐欏叆澶氫釜銆恗odbus鍗忚銆戞嫾鎺ラ�忎紶鏁版嵁鐨勫瓧绗︿覆 + * 涓嬪彂涓婚锛�/user/${gw_id}/custom/native/${driver}/down; + * 閫嗗彉鍣ㄥ洖澶嶄富棰橈細/user/${gw_id}/custom/native/${driver}/down_reply; + * Modbus ECU鍗忚锛氫簨浠禝D(2涓猙yte)->鍗忚[鍥哄畾:0,0](2涓猙yte)->闀垮害(2byte)->鏍囪瘑绗oid鐨刟ddresses鍊糫(4涓猙yte)->鍔熻兘鐮�(1涓猙yte)->璐熻浇鏁版嵁(N涓猙yte); + * 闀垮害(2涓猙yte)=鏍囪瘑绗�(4涓猙yte)+鍔熻兘鐮�(1涓猙yte)+璐熻浇鏁版嵁(N涓猙yte); + * 璐熻浇鏁版嵁=瀵勫瓨鍣ㄥ湴鍧�(2涓猙yte)+瀵勫瓨鍣ㄩ暱搴�(2涓猙yte)+鍐呭闀垮害(1涓猙yte)+鍐呭鏁版嵁(N涓猙yte)銆愭敞鎰�:鍗曚釜鍐欏叆瀵勫瓨鍣�-->鍘绘帀<瀵勫瓨鍣ㄩ暱搴�>鍜�<鍐呭闀垮害>銆�; + * 瀵勫瓨鍣ㄩ暱搴�=(鍐呭鏁版嵁/2); + * 渚嬪瓙:new byte[]{[0, 11, 0, 0, 0, 30, 0, 0, 0, 26, 16, 0, 11, 0, 10, 20, 49, 50, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32]}; + * + * @param oidAddresses oid閲岄潰Addresses鐨勫�� + * @param functionCode 鍔熻兘鐮併��3=锛堣鍙栧涓瘎瀛樺櫒)锛�,6=锛堝啓鍏ュ崟涓瘎瀛樺櫒锛�,16=锛堝啓鍏ュ涓瘎瀛樺櫒锛夈�� + * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧� + * @param contentData 鍐呭鏁版嵁锛堜笉鍚瘎瀛樺櫒鍦板潃锛� + */ + public String getWriteMultipleModbusPassData(String oidAddresses, int functionCode, int registerAddress, String contentData) { + + String data = ""; + try { + String eventID = to2ByteHexString(registerAddress);//浜嬩欢ID(2byte) + String agreement = "0000";//鍗忚锛�2byte锛� + String dataByteLength = "";//闀垮害锛圢 byte锛� + String oidAddresses_1 = oidAddresses;//鏍囪瘑绗︼紙4byte锛� + String functionCode_1 = to1ByteHexString(functionCode);//鍔熻兘鐮侊紙=1byte锛� + String registerAddress_1 = to2ByteHexString(registerAddress);//瀵勫瓨鍣ㄥ湴鍧�锛�2byte锛� + String registerLength_1 = to2ByteHexString(contentData.length() / 2);//瀵勫瓨鍣ㄩ暱搴︼紙2byte锛� + String contentLength_1 = to1ByteHexString(contentData.length());//鍐呭闀垮害锛�1byte锛� + String contentData_1 = contentData;//鍐呭鏁版嵁锛圢 byte锛� + byte[] bytes = (oidAddresses_1 + functionCode_1 + registerAddress_1 + registerLength_1 + contentLength_1 + contentData_1).getBytes(); + dataByteLength = to1ByteHexString(bytes.length / 2); + data = eventID + agreement + dataByteLength + oidAddresses_1 + functionCode_1 + registerAddress_1 + registerLength_1 + contentLength_1 + contentData_1; + return data; + } catch (Exception ignored) { + return data; + } + } + + + /** + * 鑾峰彇鍗佸叚杩涘埗瀛楃涓�(涓嶅涓や綅鍓嶉潰琛�0) + * + * @param value 瀵勫瓨鍣ㄥ湴鍧�(鍗佽繘鍒�) + * @return (2byte)鍗佸叚杩涘埗瀛楃涓� + */ + public String to2ByteHexString(int value) { + String high = ""; + String low = ""; + if (value > 255) { + high = to1ByteHexString(value / 256); + + low = to1ByteHexString(value % 256); + } else { + high = "00"; + low = to1ByteHexString(value); + } + return high + low; + } + + /** + * 鑾峰彇鍗佸叚杩涘埗瀛楃涓�(涓嶅涓や綅鍓嶉潰琛�0) + * + * @param value 鍗佽繘鍒� + * @return (1byte)鍗佸叚杩涘埗瀛楃涓� + */ + public String to1ByteHexString(int value) { + try { + String hexString = Integer.toHexString(value); + if (hexString.length() == 1) { + return "0" + hexString; + } + return hexString; + } catch (Exception e) { + return "00"; + } + } + + + /** + * 鑾峰彇鍗佸叚杩涘埗瀛楃涓�(涓嶅涓や綅鍓嶉潰琛�0) + * + * @param dataBytes 鏁扮粍 + * @return -(n byte)鍗佸叚杩涘埗瀛楃涓� + */ + public String toNByteHexString(byte[] dataBytes) { + StringBuilder stringBuilder = new StringBuilder(); + for (byte dataByte : dataBytes) { + String dataB = Integer.toHexString(dataByte & 0xFF); + if (dataB.length() == 1) { + dataB = "0" + dataB; + } + stringBuilder.append(dataB); + } + return stringBuilder.toString(); + } + + /** + * 鑾峰彇鍗佸叚杩涘埗瀛楃涓�(涓嶅涓や綅鍓嶉潰琛�0) + * + * @param value 瀵勫瓨鍣ㄥ湴鍧�(鍗佽繘鍒�) + * @return (2byte)鍗佸叚杩涘埗瀛楃涓� + */ + private String getByteHexString(int value) { + String high = ""; + String low = ""; + if (value > 255) { + high = to1ByteHexString(value / 256); + + low = to1ByteHexString(value % 256); + } else { + high = "00"; + low = to1ByteHexString(value); + } + return high + low; + } + + } diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java b/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java index 843c02d..9cfbc16 100644 --- a/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java +++ b/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java @@ -32,6 +32,25 @@ public static final String POST_Device_Oid = "/home-wisdom/program/device/oid/add"; //鑾峰彇閫嗗彉鍣�(鑾峰彇璁惧杩滅▼閫氳淇℃伅) public static final String POST_Device_RemoteInfo = "/home-wisdom/program/device/remoteInfo"; + //璁惧鍩烘湰淇℃伅鍒楄〃(oid)鑾峰彇 + public static final String POST_DEVICE_OID_LIST_GET = "/home-wisdom/program/device/oid/list"; + //璁惧鍥轰欢鍒楄〃鑾峰彇 + public static final String POST_OTA_GET_DeviceFirmwares = "/home-wisdom/program/device/ota/getDeviceFirmwares"; + //璁惧鍥轰欢浜戠鐨勯┍鍔ㄥ垎椤靛垪琛ㄨ幏鍙� + public static final String POST_OTA_GET_CloudDeviceFirmwares = "/smart-footstone/firmware/firmwareVersion/getLastOne"; + //璁惧鍥轰欢鍗囩骇OTA鍛戒护 + public static final String POST_OTA_DeviceFirmwareUpgrade = "/home-wisdom/program/device/ota/deviceFirmwareUpgrade"; + //璁惧鑾峰彇鍥轰欢鍗囩骇鍖呬笅杞藉湴鍧� + public static final String POST_OTA_GET_LinkDeviceFirmwareDownloadUrl = "/smart-footstone/mgmt/device/ota/getLinkDeviceFirmwareDownloadUrl"; + //褰撳墠缃戝叧椹卞姩鍒楄〃鑾峰彇 + public static final String POST_OTA_GET_GatewayDrivers = "/home-wisdom/program/device/ota/getGatewayDrivers"; + //缃戝叧浜戠鐨勯┍鍔ㄥ垎椤靛垪琛ㄨ幏鍙� + public static final String POST_OTA_GET_CloudGatewayDrivers = "/smart-footstone/driver/buspro/download"; + //缃戝叧椹卞姩鍗囩骇OTA鍛戒护涓嬪彂 + public static final String POST_OTA_GatewayDriverUpgrade = "/home-wisdom/program/device/ota/gatewayDriverUpgrade"; + //LINK璁惧鑾峰彇椹卞姩鍗囩骇鍖呬笅杞藉湴鍧� + public static final String POST_OTA_GET_LinkDeviceDriverDownloadUrl = "/smart-footstone/mgmt/device/ota/getLinkDeviceDriverDownloadUrl"; + //endregion //endregion diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java index 607bb82..88f735e 100644 --- a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java +++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java @@ -6,7 +6,22 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; +import com.hdl.hdlhttp.HxHttp; +import com.hdl.linkpm.sdk.core.api.HDLCloudHomeApi; +import com.hdl.linkpm.sdk.core.callback.IDefaultCallBack; +import com.hdl.linkpm.sdk.core.callback.IResponseCallBack; import com.hdl.linkpm.sdk.core.exception.HDLException; +import com.hdl.linkpm.sdk.core.response.HDLResponse; +import com.hdl.linkpm.sdk.device.bean.DeviceOidInfoBean; +import com.hdl.linkpm.sdk.device.bean.GatewayCloudBean; +import com.hdl.linkpm.sdk.ota.HDLLinkPMOta; +import com.hdl.linkpm.sdk.ota.bean.CloudDeviceFirmwaresBean; +import com.hdl.linkpm.sdk.ota.bean.CloudGatewayDriversBean; +import com.hdl.linkpm.sdk.ota.bean.DeviceFirmwareBean; +import com.hdl.linkpm.sdk.ota.bean.DownloadUrlBean; +import com.hdl.linkpm.sdk.ota.bean.GatewayDriverBean; +import com.hdl.linkpm.sdk.project.HDLLinkPMProject; +import com.hdl.linkpm.sdk.utils.HDLExceptionSubmitUtils; import com.hdl.photovoltaic.config.AppConfigManage; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.internet.HttpClient; @@ -29,10 +44,15 @@ import com.hdl.sdk.link.gateway.HDLLinkLocalGateway; import com.hdl.sdk.link.gateway.type.GatewayMasterType; +import org.json.JSONException; + import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; + +import io.dcloud.feature.unimp.DCUniMPJSCallback; +import io.reactivex.rxjava3.disposables.Disposable; /** @@ -97,6 +117,8 @@ } return null; } + + /** * 閫嗗彉鍣ㄤ笂浼犳暟鎹埌浜戠(鍖呮嫭:sid锛宱id) @@ -801,7 +823,7 @@ * @param deviceRemoteInfo 璁惧杩滅▼閫氳淇℃伅 * @param cloudInverterDeviceBean 閫嗗彉鍣� */ - private static void refreshGatewayCacheData(boolean isLocal, CloudInverterDeviceBean cloudInverterDeviceBean, DeviceRemoteInfo deviceRemoteInfo) { + private void refreshGatewayCacheData(boolean isLocal, CloudInverterDeviceBean cloudInverterDeviceBean, DeviceRemoteInfo deviceRemoteInfo) { //鏈湴鏌ユ壘閫嗗彉鍣� GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getLocalGateway(cloudInverterDeviceBean.getOsn()); if (gatewayBean == null) { diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java index b0b7b8f..fb26833 100644 --- a/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java +++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java @@ -25,7 +25,7 @@ private static volatile HdlFileLogic sHdlFileLogic; /** - * 琛ㄧず1m鏁版嵁 + * 琛ㄧず1m澶у皬鏁版嵁 */ private final int m = 1; @@ -61,32 +61,32 @@ * 鑾峰彇鎵嬫満鍐呴儴瀛樺偍鏂囦欢璺緞 */ public String getAPPInternalStoreFilesPath() { - return HDLApp.getInstance().getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getPath(); + return Objects.requireNonNull(HDLApp.getInstance().getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)).getPath(); } /** - * 鑾峰彇瀛樻斁銆愮敤鎴枫�戞枃浠跺す鏍硅矾寰� + * 鑾峰彇瀛樻斁銆愮敤鎴锋枃浠跺す銆戞牴璺緞 */ public String getCurrentUserRootPath() { return getAPPInternalStoreFilesPath() + "/" + getUserId(); } /** - * 鑾峰彇瀛樻斁銆愪綇瀹呫�戞枃浠跺す鏍硅矾寰� + * 鑾峰彇瀛樻斁銆愪綇瀹呮枃浠跺す銆戞牴璺緞 */ public String getCurrentHomeRootPath() { return getCurrentUserRootPath() + "/" + "home_" + getHomeId(); } /** - * 鑾峰彇銆愭棩蹇椼�戞枃浠跺叏璺緞 + * 鑾峰彇銆愭棩蹇楁枃浠躲�戝叏璺緞 */ public String getLogFilePath() { return getCurrentHomeRootPath() + "/Log.txt"; } /** - * 鑾峰彇銆愮敤鎴枫�戞枃浠跺叏璺緞 + * 鑾峰彇銆愮敤鎴锋枃浠躲�戝叏璺緞 */ public String getUserFilePath() { return getAPPInternalStoreFilesPath() + "/UserConfigManage.txt"; diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java new file mode 100644 index 0000000..ca50153 --- /dev/null +++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java @@ -0,0 +1,401 @@ +package com.hdl.photovoltaic.other; + +import android.text.TextUtils; + + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; +import com.hdl.linkpm.sdk.core.exception.HDLException; +import com.hdl.linkpm.sdk.device.bean.DeviceOidInfoBean; +import com.hdl.linkpm.sdk.ota.bean.CloudDeviceFirmwaresBean; +import com.hdl.linkpm.sdk.ota.bean.CloudGatewayDriversBean; +import com.hdl.linkpm.sdk.ota.bean.DeviceFirmwareBean; +import com.hdl.linkpm.sdk.ota.bean.DownloadUrlBean; +import com.hdl.linkpm.sdk.ota.bean.GatewayDriverBean; +import com.hdl.photovoltaic.config.UserConfigManage; +import com.hdl.photovoltaic.internet.HttpClient; +import com.hdl.photovoltaic.internet.api.HttpApi; +import com.hdl.photovoltaic.listener.CloudCallBeak; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + + +/** + * ota鍗囩骇閫昏緫 + */ +public class HdlOtaLogic { + private static volatile HdlOtaLogic sHdlOtaLogic; + + /** + * 鑾峰彇褰撳墠瀵硅薄 + * + * @return HdlDeviceLogic + */ + public static synchronized HdlOtaLogic getInstance() { + if (sHdlOtaLogic == null) { + synchronized (HdlOtaLogic.class) { + if (sHdlOtaLogic == null) { + sHdlOtaLogic = new HdlOtaLogic(); + } + } + + } + return sHdlOtaLogic; + } + + //region -----鍥轰欢鍗囩骇--------- + + /** + * 鍚戜簯绔幏鍙栭�嗗彉鍣╫id鍒楄〃 + * 鍓嶆彁鏉′欢:瑕佷笂浼犻�嗗彉鍣╫id鍒楄〃缁欎簯绔� + * + * @param callBack - + */ + public void getCloudOidList(CloudCallBeak<List<DeviceOidInfoBean>> callBack) { + String requestUrl = HttpApi.POST_DEVICE_OID_LIST_GET; + JsonObject json = new JsonObject(); + json.addProperty("homeId", UserConfigManage.getInstance().getHomeId()); + HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { + @Override + public void onSuccess(String json) { + + if (TextUtils.isEmpty(json)) { + if (callBack != null) { + callBack.onSuccess(new ArrayList<>()); + } + return; + } + Gson gson = new Gson(); + Type typeOfT = new TypeToken<List<DeviceOidInfoBean>>() { + }.getType(); + List<DeviceOidInfoBean> list = gson.fromJson(json, typeOfT); + if (callBack != null) { + callBack.onSuccess(list); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onFailure(e); + } + } + }); + + } + + /** + * 鍚戜簯绔幏鍙栥�愬綋鍓嶈澶囧浐浠躲�戝垪琛� + * 鍓嶆彁鏉′欢:璁惧鑷姩涓婃姤oid淇℃伅缁欎簯绔� + * + * @param deviceOidId oid浜戠id + * @param callBack - + */ + public void getCurrentDeviceFirmwares(String deviceOidId, CloudCallBeak<List<DeviceFirmwareBean>> callBack) { + String requestUrl = HttpApi.POST_OTA_GET_DeviceFirmwares; + JsonObject json = new JsonObject(); + json.addProperty("deviceOidId", deviceOidId); + json.addProperty("homeId", UserConfigManage.getInstance().getHomeId()); + HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { + @Override + public void onSuccess(String json) { + + if (TextUtils.isEmpty(json)) { + if (callBack != null) { + callBack.onSuccess(new ArrayList<>()); + } + return; + } + Gson gson = new Gson(); + Type typeOfT = new TypeToken<List<DeviceFirmwareBean>>() { + }.getType(); + List<DeviceFirmwareBean> list = gson.fromJson(json, typeOfT); + if (callBack != null) { + callBack.onSuccess(list); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onFailure(e); + } + } + }); + } + + + /** + * 鍚戜簯绔幏鍙栥�愯澶囨柊鍥轰欢銆戝垪琛� + * 鍓嶆彁鏉′欢:瑕侀�氳繃骞冲彴杞欢涓婁紶鏂板浐浠� + * + * @param hardwareModel 纭欢鍨嬪彿 + * @param osImageId 绯荤粺闀滃儚id + * @param callBack - + */ + public void getNewDeviceFirmwares(String hardwareModel, String osImageId, CloudCallBeak<List<CloudDeviceFirmwaresBean>> callBack) { + String requestUrl = HttpApi.POST_OTA_GET_CloudDeviceFirmwares; + JsonObject json = new JsonObject(); + json.addProperty("hardwareModel", hardwareModel); + json.addProperty("osImageId", osImageId); + json.addProperty("protocolType", "ZIGBEE");//鍗忚绫诲瀷,鍙敤鍊�:BUSPRO,KNX,ZIGBEE,OTHER + HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { + @Override + public void onSuccess(String json) { + + if (TextUtils.isEmpty(json)) { + if (callBack != null) { + callBack.onSuccess(new ArrayList<>()); + } + return; + } + Gson gson = new Gson(); + Type typeOfT = new TypeToken<List<CloudDeviceFirmwaresBean>>() { + }.getType(); + List<CloudDeviceFirmwaresBean> list = gson.fromJson(json, typeOfT); + if (callBack != null) { + callBack.onSuccess(list); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onFailure(e); + } + } + }); + } + + + /** + * 鍚戜簯绔彂璧枫�愯澶囧浐浠躲�戝崌绾TA鎸囦护 + * + * @param deviceOidId 璁惧id + * @param firmwareVersionId 鍥轰欢鐗堟湰id + * @param callBack- + */ + public void upgradeDeviceFirmware(String deviceOidId, String firmwareVersionId, CloudCallBeak<Boolean> callBack) { + String requestUrl = HttpApi.POST_OTA_DeviceFirmwareUpgrade; + JsonObject json = new JsonObject(); + json.addProperty("homeId", UserConfigManage.getInstance().getHomeId()); + json.addProperty("deviceOidId", deviceOidId); + json.addProperty("firmwareVersionId", firmwareVersionId); + HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { + @Override + public void onSuccess(String json) { + if (callBack != null) { + callBack.onSuccess(true); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onFailure(e); + } + } + }); + + } + + /** + * 鍚戜簯绔幏鍙栥�愯澶囧浐浠躲�戝崌绾у寘涓嬭浇鍦板潃 + * + * @param firmwareVersionId 鍥轰欢鐗堟湰Id + */ + public void getDeviceFirmwareDownloadUrl(String firmwareVersionId, CloudCallBeak<DownloadUrlBean> callBack) { + String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceFirmwareDownloadUrl; + JsonObject json = new JsonObject(); + json.addProperty("firmwareVersionId", firmwareVersionId); + HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { + @Override + public void onSuccess(String json) { + + if (TextUtils.isEmpty(json)) { + if (callBack != null) { + callBack.onSuccess(new DownloadUrlBean()); + } + return; + } + Gson gson = new Gson(); + Type typeOfT = new TypeToken<DownloadUrlBean>() { + }.getType(); + DownloadUrlBean downloadUrlBean = gson.fromJson(json, typeOfT); + if (callBack != null) { + callBack.onSuccess(downloadUrlBean); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onFailure(e); + } + } + }); + } + + //endregion + + //region -----椹卞姩鍗囩骇--------- + + /** + * 鍚戜簯绔幏鍙栥�愬綋鍓嶈澶囬┍鍔ㄣ�戝垪琛� + * 鍓嶆彁鏉′欢:璁惧鑷姩涓婃姤oid淇℃伅缁欎簯绔� + * + * @param oid 缃戝叧璁惧oid + * @param callBack - + */ + public void getCurrentGatewayDrivers(String oid, CloudCallBeak<List<GatewayDriverBean>> callBack) { + String requestUrl = HttpApi.POST_OTA_GET_GatewayDrivers; + JsonObject json = new JsonObject(); + json.addProperty("homeId", UserConfigManage.getInstance().getHomeId()); + json.addProperty("oid", oid); + + HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { + @Override + public void onSuccess(String json) { + + if (TextUtils.isEmpty(json)) { + if (callBack != null) { + callBack.onSuccess(new ArrayList<>()); + } + return; + } + Gson gson = new Gson(); + Type typeOfT = new TypeToken<List<GatewayDriverBean>>() { + }.getType(); + List<GatewayDriverBean> list = gson.fromJson(json, typeOfT); + if (callBack != null) { + callBack.onSuccess(list); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onFailure(e); + } + } + }); + + } + + /** + * 鍚戜簯绔幏鍙栥�愯澶囨柊椹卞姩銆戝垪琛� + * 鍓嶆彁鏉′欢:瑕侀�氳繃骞冲彴杞欢涓婁紶鏂伴┍鍔� + * + * @param driveCode 椹卞姩缂栧彿鎴栭┍鍔ㄥ悕绉� + * @param osImageId 椹卞姩绫诲瀷id + * @param callBack - + */ + public void getNewGatewayDrivers(String driveCode, String osImageId, CloudCallBeak<CloudGatewayDriversBean> callBack) { + String requestUrl = HttpApi.POST_OTA_GET_CloudGatewayDrivers; + JsonObject json = new JsonObject(); + json.addProperty("driveCode", driveCode); + json.addProperty("osImageId", osImageId); + + HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { + @Override + public void onSuccess(String json) { + + if (TextUtils.isEmpty(json)) { + if (callBack != null) { + callBack.onSuccess(new CloudGatewayDriversBean()); + } + return; + } + Gson gson = new Gson(); + Type typeOfT = new TypeToken<CloudGatewayDriversBean>() { + }.getType(); + CloudGatewayDriversBean cloudGatewayDriversBean = gson.fromJson(json, typeOfT); + if (callBack != null) { + callBack.onSuccess(cloudGatewayDriversBean); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onFailure(e); + } + } + }); + + + } + + /** + * 浜戠鍙戣捣銆愯澶囬┍鍔ㄣ�戝崌绾TA鎸囦护 + * + * @param oid 缃戝叧璁惧oid + * @param driverVersionId 椹卞姩鐗堟湰id + * @param callBack - + */ + public void upgradeGatewayDriver(String oid, String driverVersionId, CloudCallBeak<Boolean> callBack) { + String requestUrl = HttpApi.POST_OTA_GatewayDriverUpgrade; + JsonObject json = new JsonObject(); + json.addProperty("homeId", UserConfigManage.getInstance().getHomeId()); + json.addProperty("oid", oid); + json.addProperty("driverVersionId", driverVersionId); + HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { + @Override + public void onSuccess(String json) { + if (callBack != null) { + callBack.onSuccess(true); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onFailure(e); + } + } + }); + } + + /** + * 鍚戜簯绔幏鍙栥�愯澶囬┍鍔ㄣ�戝崌绾у寘涓嬭浇鍦板潃 + * + * @param driverVersionId 椹卞姩鐗堟湰Id + */ + public void getDeviceDriverDownloadUrl(String driverVersionId, CloudCallBeak<DownloadUrlBean> callBack) { + String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceDriverDownloadUrl; + JsonObject json = new JsonObject(); + json.addProperty("driverVersionId", driverVersionId); + HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { + @Override + public void onSuccess(String json) { + + if (TextUtils.isEmpty(json)) { + if (callBack != null) { + callBack.onSuccess(new DownloadUrlBean()); + } + return; + } + Gson gson = new Gson(); + Type typeOfT = new TypeToken<DownloadUrlBean>() { + }.getType(); + DownloadUrlBean downloadUrlBean = gson.fromJson(json, typeOfT); + if (callBack != null) { + callBack.onSuccess(downloadUrlBean); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onFailure(e); + } + } + }); + } + + + //endregion +} diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java index 9cf071e..ff4307a 100644 --- a/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java +++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java @@ -6,6 +6,11 @@ import com.google.gson.Gson; import com.hdl.linkpm.sdk.core.exception.HDLException; +import com.hdl.linkpm.sdk.device.bean.DeviceOidInfoBean; +import com.hdl.linkpm.sdk.ota.bean.CloudDeviceFirmwaresBean; +import com.hdl.linkpm.sdk.ota.bean.CloudGatewayDriversBean; +import com.hdl.linkpm.sdk.ota.bean.DeviceFirmwareBean; +import com.hdl.linkpm.sdk.ota.bean.GatewayDriverBean; import com.hdl.photovoltaic.HDLApp; import com.hdl.photovoltaic.bean.ModBusBean; import com.hdl.photovoltaic.config.UserConfigManage; @@ -187,6 +192,46 @@ break; } + } else if (HDLUniMP.UNI_EVENT_REPLY_OTA_MODEL.equals(event)) { + //OTA鍗囩骇妯″潡 + switch (type) { + //鍚戜簯绔幏鍙杘id鍒楄〃 + case HDLUniMP.UNI_EVENT_REPLY_OTA_CLOUD_OID_LIST: { + this.uniGetCloudOidList(data, callback); + } + break; + //褰撳墠璁惧鍥轰欢鍒楄〃 + case HDLUniMP.UNI_EVENT_REPLY_OTA_FIRMWARES_LIST: { + this.uniGetCurrentDeviceFirmwares(data, callback); + } + break; + //璁惧鏂板浐浠跺垪琛� + case HDLUniMP.UNI_EVENT_REPLY_OTA_FIRMWARES_NEW_LIST: { + this.uniGetNewDeviceFirmwares(data, callback); + } + break; + //璁惧鍥轰欢鍗囩骇 + case HDLUniMP.UNI_EVENT_REPLY_OTA_FIRMWARES_UPGRADE: { + this.uniUpgradeDeviceFirmware(data, callback); + } + break; + //褰撳墠璁惧椹卞姩鍒楄〃 + case HDLUniMP.UNI_EVENT_REPLY_OTA_DRIVER_LIST: { + this.uniGetCurrentGatewayDrivers(data, callback); + } + break; + //璁惧鏂伴┍鍔ㄥ垪琛� + case HDLUniMP.UNI_EVENT_REPLY_OTA_DRIVER_NEW: { + this.uniGetNewGatewayDrivers(data, callback); + } + break; + //璁惧椹卞姩鍗囩骇 + case HDLUniMP.UNI_EVENT_REPLY_OTA_DRIVER_UPGRADE: { + this.uniUpgradeGatewayDriver(data, callback); + } + break; + + } } HdlLogLogic.print("uni===鍘熺敓鎺ユ敹uni鍙戞潵鐨勬暟鎹�===" + event + "\r\n" + data, false); } catch (Exception e) { @@ -203,10 +248,9 @@ * @param jsonObject 闄勪欢鏁版嵁(娌℃湁鏁版嵁濉玭ull) */ public void openUniMP(String path, JSONObject jsonObject) { - - JSONObject json = this.createdJsonDate(jsonObject, true); - HdlLogLogic.print("uni===缁勮uni鍙戦�佹暟鎹牸寮�===" + json, false); + JSONObject json = this.createdJSONObject(jsonObject, true); HDLUniMPSDKManager.getInstance().openUniMP(HDLUniMP.UNI_APP_ID, path, json, HdlUniLogic.this); + HdlLogLogic.print("uni===缁勮uni鍙戦�佹暟鎹牸寮�===" + json, false); } /** @@ -232,7 +276,143 @@ } //endregion - //region ******uni閫昏緫鏂规硶****** + //region ******uni鎺ュ彛鏂规硶****** + + /** + * 鍚戜簯绔幏鍙栭�嗗彉鍣╫id鍒楄〃 + * 鍓嶆彁鏉′欢:瑕佷笂浼犻�嗗彉鍣╫id鍒楄〃缁欎簯绔� + * + * @param callback - + */ + private void uniGetCloudOidList(Object data, DCUniMPJSCallback callback) { + HdlOtaLogic.getInstance().getCloudOidList(new CloudCallBeak<List<DeviceOidInfoBean>>() { + @Override + public void onSuccess(List<DeviceOidInfoBean> obj) { + uniCallbackData(obj, callback); + } + + @Override + public void onFailure(HDLException e) { + uniCallbackData(null, e.getCode(), e.getMsg(), callback); + } + }); + } + + /** + * 鍚戜簯绔幏鍙栥�愬綋鍓嶈澶囧浐浠躲�戝垪琛� + * 鍓嶆彁鏉′欢:璁惧鑷姩涓婃姤oid淇℃伅缁欎簯绔� + */ + private void uniGetCurrentDeviceFirmwares(Object data, DCUniMPJSCallback callback) { + String deviceOidId = getKeyValue("deviceOidId", getKeyValue("data", data)); + HdlOtaLogic.getInstance().getCurrentDeviceFirmwares(deviceOidId, new CloudCallBeak<List<DeviceFirmwareBean>>() { + @Override + public void onSuccess(List<DeviceFirmwareBean> obj) { + uniCallbackData(obj, callback); + } + + @Override + public void onFailure(HDLException e) { + uniCallbackData(null, e.getCode(), e.getMsg(), callback); + } + }); + } + + /** + * 鍚戜簯绔幏鍙栥�愯澶囨柊鍥轰欢銆戝垪琛� + * 鍓嶆彁鏉′欢:瑕侀�氳繃骞冲彴杞欢涓婁紶鏂板浐浠� + */ + private void uniGetNewDeviceFirmwares(Object data, DCUniMPJSCallback callback) { + String hardwareModel = getKeyValue("hardwareModel", getKeyValue("data", data));//纭欢鍨嬪彿 + String osImageId = getKeyValue("osImageId", getKeyValue("data", data));//绯荤粺闀滃儚id + HdlOtaLogic.getInstance().getNewDeviceFirmwares(hardwareModel, osImageId, new CloudCallBeak<List<CloudDeviceFirmwaresBean>>() { + @Override + public void onSuccess(List<CloudDeviceFirmwaresBean> obj) { + uniCallbackData(obj, callback); + } + + @Override + public void onFailure(HDLException e) { + uniCallbackData(null, e.getCode(), e.getMsg(), callback); + } + }); + } + + /** + * 鍚戜簯绔彂璧枫�愯澶囧浐浠躲�戝崌绾TA鎸囦护 + */ + private void uniUpgradeDeviceFirmware(Object data, DCUniMPJSCallback callback) { + String deviceOidId = getKeyValue("deviceOidId", getKeyValue("data", data));//璁惧id + String firmwareVersionId = getKeyValue("firmwareVersionId", getKeyValue("data", data));//鍥轰欢鐗堟湰id + HdlOtaLogic.getInstance().upgradeDeviceFirmware(deviceOidId, firmwareVersionId, new CloudCallBeak<Boolean>() { + @Override + public void onSuccess(Boolean obj) { + uniCallbackData(obj, callback); + } + + @Override + public void onFailure(HDLException e) { + uniCallbackData(null, e.getCode(), e.getMsg(), callback); + } + }); + } + + /** + * 鍚戜簯绔幏鍙栥�愬綋鍓嶈澶囬┍鍔ㄣ�戝垪琛� + * 鍓嶆彁鏉′欢:璁惧鑷姩涓婃姤oid淇℃伅缁欎簯绔� + */ + private void uniGetCurrentGatewayDrivers(Object data, DCUniMPJSCallback callback) { + String deviceOid = getKeyValue("oid", getKeyValue("data", data)); + HdlOtaLogic.getInstance().getCurrentGatewayDrivers(deviceOid, new CloudCallBeak<List<GatewayDriverBean>>() { + @Override + public void onSuccess(List<GatewayDriverBean> obj) { + uniCallbackData(obj, callback); + } + + @Override + public void onFailure(HDLException e) { + uniCallbackData(null, e.getCode(), e.getMsg(), callback); + } + }); + } + + /** + * 鍚戜簯绔幏鍙栥�愯澶囨柊椹卞姩銆戝垪琛� + * 鍓嶆彁鏉′欢:瑕侀�氳繃骞冲彴杞欢涓婁紶鏂伴┍鍔� + */ + private void uniGetNewGatewayDrivers(Object data, DCUniMPJSCallback callback) { + String driveCode = getKeyValue("driveCode", getKeyValue("data", data));//椹卞姩缂栧彿鎴栭┍鍔ㄥ悕绉� + String osImageId = getKeyValue("osImageId", getKeyValue("data", data));//椹卞姩绫诲瀷id + HdlOtaLogic.getInstance().getNewGatewayDrivers(driveCode, osImageId, new CloudCallBeak<CloudGatewayDriversBean>() { + @Override + public void onSuccess(CloudGatewayDriversBean obj) { + uniCallbackData(obj, callback); + } + + @Override + public void onFailure(HDLException e) { + uniCallbackData(null, e.getCode(), e.getMsg(), callback); + } + }); + } + + /** + * 鍚戜簯绔彂璧枫�愯澶囬┍鍔ㄣ�戝崌绾TA鎸囦护 + */ + private void uniUpgradeGatewayDriver(Object data, DCUniMPJSCallback callback) { + String deviceOid = getKeyValue("oid", getKeyValue("data", data));//缃戝叧璁惧oid + String driverVersionId = getKeyValue("driverVersionId", getKeyValue("data", data));//椹卞姩鐗堟湰id + HdlOtaLogic.getInstance().upgradeGatewayDriver(deviceOid, driverVersionId, new CloudCallBeak<Boolean>() { + @Override + public void onSuccess(Boolean obj) { + uniCallbackData(obj, callback); + } + + @Override + public void onFailure(HDLException e) { + uniCallbackData(null, e.getCode(), e.getMsg(), callback); + } + }); + } /** * 閫嗗彉鍣ㄦ竻绌轰綇瀹卛d @@ -354,22 +534,17 @@ uniCallbackData(null, -100, "鏈湴鎵句笉鍒扮綉鍏�", callback); return; } - HdlDeviceLogic.getInstance().addInverterDeviceToCloud(mac, - gatewayBean.getGatewayType(), - gatewayBean.getSid(), - gatewayBean.getOid(), - gatewayBean.getDevice_name(), - new CloudCallBeak<Boolean>() { - @Override - public void onSuccess(Boolean obj) { - uniCallbackData(null, callback); - } + HdlDeviceLogic.getInstance().addInverterDeviceToCloud(mac, gatewayBean.getGatewayType(), gatewayBean.getSid(), gatewayBean.getOid(), gatewayBean.getDevice_name(), new CloudCallBeak<Boolean>() { + @Override + public void onSuccess(Boolean obj) { + uniCallbackData(null, callback); + } - @Override - public void onFailure(HDLException e) { - uniCallbackData(null, e.getCode(), e.getMsg(), callback); - } - }); + @Override + public void onFailure(HDLException e) { + uniCallbackData(null, e.getCode(), e.getMsg(), callback); + } + }); } @Override @@ -461,11 +636,19 @@ /** * 鍙戦�乵odbus鍗忚鏁版嵁 + * 閫忎紶鍗忚 + * 涓嬪彂涓婚锛�/user/${gw_id}/custom/native/${driver}/down; + * 閫嗗彉鍣ㄥ洖澶嶄富棰橈細/user/${gw_id}/custom/native/${driver}/down_reply; + * Modbus ECU鍗忚锛氫簨浠禝D(2涓猙yte)->鍗忚[鍥哄畾:0,0](2涓猙yte)->闀垮害(2byte)->鏍囪瘑绗oid鐨刟ddresses鍊糫(4涓猙yte)->鍔熻兘鐮�(1涓猙yte)->璐熻浇鏁版嵁(N涓猙yte); + * 闀垮害(2涓猙yte)=鏍囪瘑绗�(4涓猙yte)+鍔熻兘鐮�(1涓猙yte)+璐熻浇鏁版嵁(N涓猙yte); + * 璐熻浇鏁版嵁=瀵勫瓨鍣ㄥ湴鍧�(2涓猙yte)+瀵勫瓨鍣ㄩ暱搴�(2涓猙yte)+鍐呭闀垮害(1涓猙yte)+鍐呭鏁版嵁(N涓猙yte)銆愭敞鎰�:鍗曚釜鍐欏叆瀵勫瓨鍣�-->鍘绘帀<瀵勫瓨鍣ㄩ暱搴�>鍜�<鍐呭闀垮害>銆�; + * 瀵勫瓨鍣ㄩ暱搴�=(鍐呭鏁版嵁/2); + * 渚嬪瓙:new byte[]{00,01,00,00,00,0x09,00,00,00,01,03,00,00,00,01}; * * @param data modbus鏁版嵁 * @param callback 鍥炶皟 */ - void sendModBus(Object data, DCUniMPJSCallback callback) { + private void sendModBus(Object data, DCUniMPJSCallback callback) { String tempData = getKeyValue("data", data); if (TextUtils.isEmpty(tempData)) { HdlLogLogic.print("data鍐呭涓虹┖", false); @@ -506,11 +689,11 @@ /** * 缁勮uni鍙戦�佹暟鎹牸寮� * - * @param data -闄勪欢鏁版嵁(娌℃湁鏁版嵁濉玭ull) + * @param data 闄勫姞鏁版嵁(娌℃湁鏁版嵁濉玭ull) * @param isTokenAndRefreshToken (true=搴曞眰榛樿娣诲姞token鍜宺efreshToken;false=涓嶅姞) - * @return JSONObject + * @return JSONObject uni鏂规硶鍚嶉噷闈㈠弬鏁伴渶瑕佺殑JSONObject瀵硅薄 */ - private JSONObject createdJsonDate(JSONObject data, boolean isTokenAndRefreshToken) { + private JSONObject createdJSONObject(JSONObject data, boolean isTokenAndRefreshToken) { HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); try { if (data == null) { @@ -604,6 +787,7 @@ } catch (Exception e) { return ""; } + } //endregion diff --git a/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java b/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java index 82f9b4a..c6adc55 100644 --- a/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java +++ b/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java @@ -42,6 +42,17 @@ public final static String UNI_EVENT_REPLY_DEVICE_UPLOADING_DATA = "uploading_data";//璁惧涓婁紶鏁版嵁 public final static String UNI_EVENT_REPLY_DEVICE_MODBUS_SEND = "modbus_send";//modbus鍗忚 + /*********OTA妯″潡*********/ + public final static String UNI_EVENT_REPLY_OTA_MODEL = "uni_ota_model";//鍗囩骇妯″潡(澶х被) + public final static String UNI_EVENT_REPLY_OTA_CLOUD_OID_LIST = "cloud_oid_list";//鍚戜簯绔幏鍙杘id鍒楄〃 + public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_LIST = "firmwares_list";//褰撳墠璁惧鍥轰欢鍒楄〃 + public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_NEW_LIST = "firmwares_new_list";//璁惧鏂板浐浠跺垪琛� + public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_UPGRADE = "firmwares_upgrade";//璁惧鍥轰欢鍗囩骇 + public final static String UNI_EVENT_REPLY_OTA_DRIVER_LIST = "driver_list";//褰撳墠璁惧椹卞姩鍒楄〃 + public final static String UNI_EVENT_REPLY_OTA_DRIVER_NEW = "driver_new";//璁惧鏂伴┍鍔ㄥ垪琛� + public final static String UNI_EVENT_REPLY_OTA_DRIVER_UPGRADE = "driver_upgrade";//璁惧椹卞姩鍗囩骇 + + /*********Wifi妯″潡*********/ //鍗敠瀹氫箟 public final static String UNI_EVENT_REPLY_WIFI_MODEL = "uni_wifi_model";//wifi妯″潡(澶х被) public final static String UNI_EVENT_REPLY_WIFI_LIST = "list";//鑾峰彇wifi鍒楄〃 diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/LocalManageUtil.java b/app/src/main/java/com/hdl/photovoltaic/utils/LocalManageUtil.java index f3909c2..955fd3d 100644 --- a/app/src/main/java/com/hdl/photovoltaic/utils/LocalManageUtil.java +++ b/app/src/main/java/com/hdl/photovoltaic/utils/LocalManageUtil.java @@ -1,238 +1,23 @@ package com.hdl.photovoltaic.utils; import android.content.Context; +import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.os.LocaleList; +import android.text.TextUtils; +import android.util.DisplayMetrics; + + import java.util.Locale; /** - * Created by hxb on 2022/6/7. - * desc : 澶氳瑷�閫傞厤鏂规锛岄�傞厤鍚勭鐗堟湰锛屾牳蹇冩湭鏇挎崲涓婁笅鏂嘋ontext涓殑Local + * 澶氳瑷�閫傞厤 */ public class LocalManageUtil { -// private static final String TAG = "LanguageUtil"; -// -// /** -// * 榛樿鏀寔鐨勮瑷�锛岃嫳璇�佹硶璇�侀樋鎷変集璇� -// */ -// private static HashMap<String, Locale> supportLanguage = new HashMap<String, Locale>(4) {{ -// put(Language.ENGLISH, Locale.ENGLISH); -// }}; -// -// /** -// * 搴旂敤澶氳瑷�鍒囨崲锛岄噸鍐橞aseActivity涓殑attachBaseContext鍗冲彲 -// * 閲囩敤鏈湴SP瀛樺偍鐨勮瑷� -// * -// * @param context 涓婁笅鏂� -// * @return context -// */ -// public static Context attachBaseContext(Context context) { -// String language = LanguageSp.getLanguage(context); -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { -// return createConfigurationContext(context, language); -// } else { -// return updateConfiguration(context, language); -// } -// } -// -// /** -// * 搴旂敤澶氳瑷�鍒囨崲锛岄噸鍐橞aseActivity涓殑attachBaseContext鍗冲彲 -// * -// * @param context 涓婁笅鏂� -// * @param language 璇█ -// * @return context -// */ -// public static Context attachBaseContext(Context context, String language) { -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { -// return createConfigurationContext(context, language); -// } else { -// return updateConfiguration(context, language); -// } -// } -// -// /** -// * 鑾峰彇Local,鏍规嵁language -// * -// * @param language 璇█ -// * @return Locale -// */ -// private static Locale getLanguageLocale(String language) { -// if (supportLanguage.containsKey(language)) { -// return supportLanguage.get(language); -// } else { -// Locale systemLocal = getSystemLocal(); -// for (String languageKey : supportLanguage.keySet()) { -// if (TextUtils.equals(supportLanguage.get(languageKey).getLanguage(), systemLocal.getLanguage())) { -// return systemLocal; -// } -// } -// } -// return Locale.ENGLISH; -// } -// -// /** -// * 鑾峰彇褰撳墠鐨凩ocal锛岄粯璁よ嫳璇� -// * -// * @param context context -// * @return Locale -// */ -// public static Locale getCurrentLocale(Context context) { -// String language = LanguageSp.getLanguage(context); -// if (supportLanguage.containsKey(language)) { -// return supportLanguage.get(language); -// } else { -// Locale systemLocal = getSystemLocal(); -// for (String languageKey : supportLanguage.keySet()) { -// if (TextUtils.equals(supportLanguage.get(languageKey).getLanguage(), systemLocal.getLanguage())) { -// return systemLocal; -// } -// } -// } -// return Locale.ENGLISH; -// } -// -// /** -// * 鑾峰彇绯荤粺鐨凩ocal -// * -// * @return Locale -// */ -// private static Locale getSystemLocal() { -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { -// return Resources.getSystem().getConfiguration().getLocales().get(0); -// } else { -// return Locale.getDefault(); -// } -// } -// -// /** -// * Android 7.1 浠ヤ笅閫氳繃 updateConfiguration -// * -// * @param context context -// * @param language 璇█ -// * @return Context -// */ -// private static Context updateConfiguration(Context context, String language) { -// Resources resources = context.getResources(); -// Configuration configuration = resources.getConfiguration(); -// Locale locale = getLanguageLocale(language); -// Log.e(TAG, "updateLocalApiLow==== " + locale.getLanguage()); -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { -// // apply locale -// configuration.setLocales(new LocaleList(locale)); -// } else { -// // updateConfiguration -// configuration.locale = locale; -// DisplayMetrics dm = resources.getDisplayMetrics(); -// resources.updateConfiguration(configuration, dm); -// } -// return context; -// } -// -// /** -// * Android 7.1浠ヤ笂閫氳繃createConfigurationContext -// * N澧炲姞浜嗛�氳繃config.setLocales鍘讳慨鏀瑰璇█ -// * -// * @param context 涓婁笅鏂� -// * @param language 璇█ -// * @return context -// */ -// @RequiresApi(api = Build.VERSION_CODES.N_MR1) -// private static Context createConfigurationContext(Context context, String language) { -// Resources resources = context.getResources(); -// Configuration configuration = resources.getConfiguration(); -// Locale locale = getLanguageLocale(language); -// Log.d(TAG, "current Language locale = " + locale); -// LocaleList localeList = new LocaleList(locale); -// configuration.setLocales(localeList); -// return context.createConfigurationContext(configuration); -// } -// -// /** -// * 鍒囨崲璇█ -// * -// * @param language 璇█ -// * @param activity 褰撳墠鐣岄潰 -// * @param cls 璺宠浆鐨勭晫闈� -// */ -// public static void switchLanguage(String language, Activity activity, Class<?> cls) { -// LanguageSp.setLanguage(activity, language); -// Intent intent = new Intent(activity, cls); -// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); -// activity.startActivity(intent); -// activity.finish(); -// } -// -// /** -// * 鍒囨崲璇█锛屾惡甯︿紶閫掓暟鎹� -// * -// * @param language 璇█ -// * @param activity 褰撳墠鐣岄潰 -// * @param cls 璺宠浆鐨勭晫闈� -// */ -// public static void switchLanguage(String language, Activity activity, Class<?> cls, Bundle bundle) { -// LanguageSp.setLanguage(activity, language); -// Intent intent = new Intent(activity, cls); -// if (bundle != null) { -// intent.putExtras(bundle); -// } -// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); -// activity.startActivity(intent); -// activity.finish(); -// } -// -// /** -// * 鑾峰彇鏂拌瑷�鐨� Context,淇浜哸ndroidx.appCompact 1.2.0鐨勯棶棰� -// * -// * @param newBase newBase -// * @return Context -// */ -// public static Context getNewLocalContext(Context newBase) { -// try { -// // 澶氳瑷�閫傞厤 -// Context context = LanguageUtil.attachBaseContext(newBase); -// // 鍏煎appcompat 1.2.0鍚庡垏鎹㈣瑷�澶辨晥闂 -// final Configuration configuration = context.getResources().getConfiguration(); -// return new ContextThemeWrapper(context, R.style.Theme_AppCompat_Empty) { -// @Override -// public void applyOverrideConfiguration(Configuration overrideConfiguration) { -// if (overrideConfiguration != null) { -// overrideConfiguration.setTo(configuration); -// } -// super.applyOverrideConfiguration(overrideConfiguration); -// } -// }; -// } catch (Exception e) { -// e.printStackTrace(); -// } -// return newBase; -// } -// -// /** -// * 鏇存柊Application鐨凴esource local锛屽簲鐢ㄤ笉閲嶅惎鐨勬儏鍐垫墠璋冪敤锛屽洜涓洪儴鍒嗕細鐢ㄥ埌application涓殑context -// * 鍒囪涓嶈兘璧版柊api createConfigurationContext锛屼翰娴� -// * -// * @param context context -// * @param newLanguage newLanguage -// */ -// public static void updateApplicationLocale(Context context, String newLanguage) { -// Resources resources = context.getResources(); -// Configuration configuration = resources.getConfiguration(); -// Locale locale = getLanguageLocale(newLanguage); -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { -// // apply locale -// configuration.setLocales(new LocaleList(locale)); -// } else { -// configuration.setLocale(locale); -// } -// DisplayMetrics dm = resources.getDisplayMetrics(); -// resources.updateConfiguration(configuration, dm); -// } - - private static Locale locale; - +// private static Locale mLocale; /** * 鑾峰彇绯荤粺鐨刲ocale @@ -248,28 +33,106 @@ } return locale; } +// +// public static Context setLocal(Context context) { +// return updateResources(context, mLocale); +// } +// +// public static Context updateResources(Context context, Locale locale) { +// if (locale == null) { +// return context; +// } +// LocalManageUtil.mLocale = locale; +// Locale.setDefault(locale); +// +// Resources res = context.getResources(); +// Configuration config = new Configuration(res.getConfiguration()); +// config.setLocale(locale); +// context = context.createConfigurationContext(config); +// return context; +// } - public static Context setLocal(Context context) { - return updateResources(context, locale); + + /** + * 搴旂敤鍐呭垏鎹㈣瑷� + * + * @param language language (zh锛氭眽璇�;en锛氳嫳璇�) + * @param context 涓婁笅鏂� + */ + public static void changeAppLanguage(String language, Context context) { + Locale locale = getLocale(language); + updateResources(locale, context); } - public static Context updateResources(Context context, Locale locale) { - if (locale == null) { - return context; - } - LocalManageUtil.locale = locale; - Locale.setDefault(locale); - Resources res = context.getResources(); - Configuration config = new Configuration(res.getConfiguration()); - if (Build.VERSION.SDK_INT >= 17) { - config.setLocale(locale); - context = context.createConfigurationContext(config); + /** + * 鑾峰彇绯荤粺褰撳墠璇█ + * + * @return _ + */ + public static Locale getDefaultLocale() { + return Resources.getSystem().getConfiguration().locale; + } + + /** + * 鑾峰彇Locale + * + * @param language (zh锛氭眽璇�;en锛氳嫳璇�) + * @return Locale + */ + public static Locale getLocale(String language) { + try { + if (TextUtils.isEmpty(language)) { + return getDefaultLocale(); + } + return new Locale(language); + } catch (Exception e) { + return getDefaultLocale(); + } + + + } + + /** + * 鏇存柊璧勬簮鏁版嵁 + * + * @param locale 璇█瀹炰綋绫� + * @param context 涓婁笅鏂� + * @return - + */ + private static void updateResources(Locale locale, Context context) { + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + //7.0浠ヤ笅绯荤粺 + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + Configuration configuration = context.getResources().getConfiguration(); + configuration.setLocale(locale); + context.getResources().updateConfiguration(configuration, metrics); +// Locale.setDefault(locale); } else { - config.locale = locale; - res.updateConfiguration(config, res.getDisplayMetrics()); + //7.0鍙婁互涓婄郴缁� + Configuration configuration = context.getResources().getConfiguration(); + configuration.setLocale(locale); + configuration.setLocales(new LocaleList(locale)); + context.createConfigurationContext(configuration); } - return context; + } + + /** + * 璁剧疆褰撳墠APP鐨勮瑷�妯″紡 + * + * @param context 涓婁笅鏂� + */ + private static void setCurrLanguageMode(Context context) { + String language = SharedPreUtils.getSharedPreferencesKey("languege", context); + Locale local = getLocale(language); + Resources res = context.getResources(); + DisplayMetrics dm = res.getDisplayMetrics(); + Configuration conf = res.getConfiguration(); + conf.locale = local; + res.updateConfiguration(conf, dm); + } + } diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index e18dc60..4feae6e 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -19,10 +19,10 @@ <string name="home_login_input_phone">璇疯緭鍏ユ墜鏈哄彿</string> <string name="home_login_email_address">閭鍙�</string> <string name="home_login_input_psw">璇疯緭鍏ュ瘑鐮�</string> - <string name="home_login_register">娉ㄥ唽</string> + <string name="home_login_register">register</string> <string name="home_login_forget_password">蹇樿瀵嗙爜</string> <string name="home_login_change_password">淇敼瀵嗙爜</string> - <string name="home_login_logoin">鐧诲綍</string> + <string name="home_login_logoin">log in</string> <string name="home_login_be_logging_in">鐧诲綍涓��</string> <string name="home_login_power_station">浣撻獙鐢电珯</string> <string name="home_login_consent_service_agreement">鍚屾剰銆婃湇鍔″崗璁�嬪拰銆婄敤鎴蜂俊鎭繚鎶よ瀹氥��</string> @@ -65,7 +65,7 @@ <!--鎴戠殑鐢电珯--> <string name="power_station">鐢电珯</string> - <string name="power_station_me">鎴戠殑</string> + <string name="power_station_me">my</string> <string name="my_power_station">鎴戠殑鐢电珯</string> <string name="power_station_generated_power">鍙戠數鍔熺巼:</string> <string name="power_station_Power_generation_today">浠婃棩鍙戠數</string> -- Gitblit v1.8.0