From 6d831d327414cb27a27ea1d32233a1d297b04e04 Mon Sep 17 00:00:00 2001 From: liuguijing <123456> Date: Wed, 15 May 2024 20:51:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=8D=E7=85=A7=E6=97=B6=E9=97=B4=E8=A1=A8?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=96=B0=E5=A2=9E=20=E4=BF=AE=E5=A4=8Dudp=20?= =?UTF-8?q?tcp=20=20=E5=8A=A0=E8=A7=A3=E5=AF=86=E7=9F=AD=E4=BF=A1=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E9=94=99=E8=AF=AF=20=E4=BC=98=E5=8C=96=E6=B0=B4?= =?UTF-8?q?=E5=8D=B0=E5=8A=9F=E8=83=BD=20=E6=96=B0=E5=A2=9E=E5=85=A8?= =?UTF-8?q?=E9=80=9A=E5=88=B0=E4=BF=AE=E6=94=B9=E6=B0=B4=E5=8D=B0=E5=88=86?= =?UTF-8?q?=E8=BE=A8=E7=8E=87=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xypower/common/JSONUtils.java | 60 ++++++++ .../com/xypower/common/MicroPhotoContext.java | 8 +- .../com/xypower/mpmaster/MainActivity.java | 19 +-- .../com/xypower/mpmaster/sms/SimUtil.java | 133 +++++++++++++----- .../mpmaster/sms/UpdateSysConfigUtil.java | 69 ++++++--- 5 files changed, 223 insertions(+), 66 deletions(-) diff --git a/common/src/main/java/com/xypower/common/JSONUtils.java b/common/src/main/java/com/xypower/common/JSONUtils.java index bd98c7ef..3179e68e 100644 --- a/common/src/main/java/com/xypower/common/JSONUtils.java +++ b/common/src/main/java/com/xypower/common/JSONUtils.java @@ -8,6 +8,7 @@ import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -75,6 +76,65 @@ public class JSONUtils { } + public static byte[] loadByte(String path) { + ByteArrayOutputStream out = null; + byte[] outbyte = null; + FileInputStream fis = null; + try { + File appCfgFile = new File(path); + if (appCfgFile.exists()) { + fis = new FileInputStream(appCfgFile); + byte[] bytes = new byte[1024 * 4]; + int line = 0; + out = new ByteArrayOutputStream(); + while ((line = fis.read(bytes)) != -1) { + out.write(bytes, 0, line); +// System.out.println("dfsdaf:" + bytes); + } + outbyte = out.toByteArray(); + } + + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (fis != null) { + try { + fis.close(); + out.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + + return outbyte; + } + + public static boolean saveByte(String path, byte[] jsonObject) { + FileOutputStream fos = null; + try { + fos = new FileOutputStream(new File(path)); + fos.write(jsonObject); + return true; + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (fos != null) { + try { + fos.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + + return false; + } + public static boolean saveJson(String path, JSONObject jsonObject) { FileOutputStream fos = null; OutputStreamWriter outputStreamWriter = null; diff --git a/common/src/main/java/com/xypower/common/MicroPhotoContext.java b/common/src/main/java/com/xypower/common/MicroPhotoContext.java index eefe6972..44b2173a 100644 --- a/common/src/main/java/com/xypower/common/MicroPhotoContext.java +++ b/common/src/main/java/com/xypower/common/MicroPhotoContext.java @@ -41,11 +41,12 @@ public class MicroPhotoContext { public String server; public int port; public int protocol; - public int networkProtocol; + public int networkProtocol; //0:tcp 1:udp public int network; // 0: SIM1 1: SIM2 2: WIFI public int heartbeat; public int packetSize; - public int encryption; + public int encryption; //0:不加密 1:明文 2:加密 + public int channelnum; //摄像头通道数目 } public static class MasterConfig { @@ -220,6 +221,7 @@ public class MicroPhotoContext { appConfig.heartbeat = jsonObject.optInt("heartbeat", 0); appConfig.packetSize = jsonObject.optInt("packetSize", 0); appConfig.encryption = jsonObject.optInt("encryption", 0); + appConfig.channelnum = jsonObject.optInt("channelnum", 4); if (appConfig.protocol == 0) { appConfig.protocol = DEFAULT_PROTOCOL; @@ -455,6 +457,4 @@ public class MicroPhotoContext { } - - } diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MainActivity.java b/mpmaster/src/main/java/com/xypower/mpmaster/MainActivity.java index 5404b669..90285c89 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MainActivity.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MainActivity.java @@ -4,20 +4,16 @@ package com.xypower.mpmaster; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; import android.Manifest; -import android.app.ActivityManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.location.Location; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.StrictMode; import android.text.TextUtils; -import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.Switch; @@ -27,13 +23,11 @@ import android.widget.TextView; import com.dev.devapi.api.SysApi; import com.xypower.common.HotspotManager; import com.xypower.common.MicroPhotoContext; -import com.xypower.mpmaster.sms.DownloadUtils; +import com.xypower.mpmaster.sms.UpdateSysConfigUtil; -import java.io.IOException; import java.text.SimpleDateFormat; -import java.util.ArrayList; +import java.util.Base64; import java.util.Date; -import java.util.List; public class MainActivity extends AppCompatActivity { @@ -212,6 +206,15 @@ public class MainActivity extends AppCompatActivity { // intent1.putExtra(EXTRA_PARAM_TIME, 0); // intent1.putExtra(EXTRA_PARAM_TAKING_TIME, ts); // sendBroadcast(intent1); + + +// UpdateSysConfigUtil.getScheduless(1); + byte[] bytes = {1, 1, 2, 0, 0, 0, 23, 59}; + String photoSchedules = UpdateSysConfigUtil.getPhotoSchedules(1); + + byte[] decode = Base64.getDecoder().decode(photoSchedules); + System.out.println(decode); + } }); diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java index 1671439a..86abbce4 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java @@ -18,10 +18,12 @@ import android.text.TextUtils; import androidx.core.app.ActivityCompat; import com.dev.devapi.api.SysApi; +import com.xypower.common.MicroPhotoContext; import com.xypower.common.RegexUtil; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Base64; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -156,7 +158,7 @@ public class SimUtil { if (split1 != null && split1.length > 1) { String s = split1[1]; String[] split2 = StringUtils.splitString2(s); - if (split2 != null && split2.length == 2) { + if (split2 != null && split2.length >= 2) { String ipAddress = split2[0]; String port = split2[1]; boolean b = RegexUtil.checkIpAddress(ipAddress); @@ -197,7 +199,8 @@ public class SimUtil { sendtype = SmsTypeEnum.GET_CMDID.value(); ifmessageCorrect = true; String cmdid = UpdateSysConfigUtil.getCmdid(context); - sendmessage = SmsTypeEnum.GET_CMDID.value() + "=" + cmdid; + String serialNo = SysApi.getSerialNo(context); + sendmessage = SmsTypeEnum.GET_CMDID.value() + "=" + serialNo + "," + cmdid; } else if (content.contains(SmsTypeEnum.SET_IP.value())) { sendtype = SmsTypeEnum.SET_IP.value(); String[] split1 = StringUtils.splitString1(content); @@ -210,16 +213,23 @@ public class SimUtil { server = split2[0]; String port = split2[1]; integer = StringUtils.convert2Int(port); - int utcp = -1; - int encrypto = -1; + Integer utcp = -1; + Integer encrypto = -1; if (integer != null) { ifmessageCorrect = true; if (split2.length == 4) { String s1 = split2[2]; utcp = StringUtils.convert2Int(s1); + utcp = getUtcp(utcp); String s2 = split2[3]; encrypto = StringUtils.convert2Int(s2); + encrypto = getEncrypto(encrypto); + if (utcp == -1 || encrypto == -1) { + ifmessageCorrect = false; + } } + } + if (ifmessageCorrect) { UpdateSysConfigUtil.setIP(context, server, integer, utcp, encrypto); } } @@ -244,41 +254,51 @@ public class SimUtil { String num = split2[0]; Integer integer = StringUtils.convert2Int(num); if (integer != null) { - if (integer == 0) {//所有通道 - ifmessageCorrect = true; - } else { - for (int i = 0; i < spilt2len; i++) { - if (i == 0) { - continue; - } - if (i % 2 == 1) { - if ((i + 1) <= spilt2len) { - String s1 = split2[i]; - Integer position = StringUtils.convert2Int(s1); - if (position != null) { - if (position == 1) { - osdmap.put("leftTop", split2[i + 1]); - } else if (position == 2) { - osdmap.put("rightTop", split2[i + 1]); - } else if (position == 3) { - osdmap.put("leftBottom", split2[i + 1]); - } else if (position == 4) { - osdmap.put("rightBottom", split2[i + 1]); - } else { - ifmessageCorrect = false; - } + for (int i = 0; i < spilt2len; i++) { + if (i == 0) { + continue; + } + if (i % 2 == 1) { + if ((i + 1) <= spilt2len) { + String s1 = split2[i]; + Integer position = StringUtils.convert2Int(s1); + if (position != null) { + if (position == 1) { + osdmap.put(UpdateSysConfigUtil.leftTop, split2[i + 1]); + } else if (position == 2) { + osdmap.put(UpdateSysConfigUtil.rightTop, split2[i + 1]); + } else if (position == 3) { + osdmap.put(UpdateSysConfigUtil.leftBottom, split2[i + 1]); + } else if (position == 4) { + osdmap.put(UpdateSysConfigUtil.rightBottom, split2[i + 1]); } else { ifmessageCorrect = false; } } else { ifmessageCorrect = false; } + } else { + ifmessageCorrect = false; } } } - if (ifmessageCorrect) { - UpdateSysConfigUtil.setChannelOSD(integer, osdmap); + if (integer == 0) {//所有通道 + ifmessageCorrect = true; + MicroPhotoContext.AppConfig mpAppConfig = MicroPhotoContext.getMpAppConfig(context); + int channelnum = mpAppConfig.channelnum; + if (channelnum != 0) { + if (ifmessageCorrect) { + for (int i = 1; i <= channelnum; i++) { + UpdateSysConfigUtil.setChannelOSD(i, osdmap); + } + } + } + } else { + if (ifmessageCorrect) { + UpdateSysConfigUtil.setChannelOSD(integer, osdmap); + } } + } } } @@ -290,10 +310,10 @@ public class SimUtil { ifmessageCorrect = true; Integer channel = StringUtils.convert2Int(split[0]); HashMap channelOSD = UpdateSysConfigUtil.getChannelOSD(channel); - String leftTop = channelOSD.get("leftTop"); - String rightTop = channelOSD.get("rightTop"); - String leftBottom = channelOSD.get("leftBottom"); - String rightBottom = channelOSD.get("rightBottom"); + String leftTop = channelOSD.get(UpdateSysConfigUtil.leftTop); + String rightTop = channelOSD.get(UpdateSysConfigUtil.rightTop); + String leftBottom = channelOSD.get(UpdateSysConfigUtil.leftBottom); + String rightBottom = channelOSD.get(UpdateSysConfigUtil.rightBottom); if (leftTop != null && StringUtils.isNotEmpty(leftTop)) { sendmessage += "1," + leftTop; } @@ -312,14 +332,26 @@ public class SimUtil { String[] split1 = StringUtils.splitString1(content); if (split1 != null && split1.length > 1) { String s = split1[1]; - String[] split2 = StringUtils.splitString1(s); + String[] split2 = StringUtils.splitString2(s); if (split2 != null && split2.length == 2) { + Integer channel = StringUtils.convert2Int(split2[0]); + if (channel != null) { + ifmessageCorrect = true; + String msg = split2[1]; + UpdateSysConfigUtil.setPhotoSchedules(channel, msg); + } } } sendmessage = getSendString(content, ifmessageCorrect); } else if (content.contains(SmsTypeEnum.GET_PHOTO_SCHEDULE_LIST.value())) { sendtype = SmsTypeEnum.GET_PHOTO_SCHEDULE_LIST.value(); ifmessageCorrect = true; + String[] split1 = StringUtils.splitString1(content); + if (split1 != null && split1.length == 2) { + Integer channel = StringUtils.convert2Int(split1[1]); + String photoSchedules = UpdateSysConfigUtil.getPhotoSchedules(channel); + sendmessage = SmsTypeEnum.GET_PHOTO_SCHEDULE_LIST.value() + "=" + photoSchedules; + } } else if (content.contains(SmsTypeEnum.SET_RESOLUTION.value())) { sendtype = SmsTypeEnum.SET_RESOLUTION.value(); String[] split1 = StringUtils.splitString1(content); @@ -438,6 +470,33 @@ public class SimUtil { } + private static int getUtcp(Integer utcp) { + int apputcp = -1; + //短信文档中 0:udp 1:tcp app应用中 0:tcp 1:udp 所以需要转换一下 + if (utcp != null && (utcp == 0 || utcp == 1)) { + if (utcp == 0) { + apputcp = 1; + } else if (utcp == 1) { + apputcp = 0; + } + } + return apputcp; + } + + private static int getEncrypto(Integer encrypto) { + int appencrypto = -1; + //短信文档中 1:密文,2:明文 3:不加密 app应用中 0:不加密 1:明文 2:加密 所以需要转换一下 + if (encrypto != null && (encrypto == 1 || encrypto == 2 || encrypto == 3)) { + if (encrypto == 1) { + appencrypto = 2; + } else if (encrypto == 2) { + appencrypto = 1; + } else if (encrypto == 3) { + appencrypto = 0; + } + } + return appencrypto; + } private static String getSendString(String content, boolean ifmessageCorrect) { String sendmessage; @@ -531,8 +590,7 @@ public class SimUtil { } //指定sim卡位置发送短信 - public static void sendSms(Context mContext, int slot, String sender, String message, String - value, boolean ifmessageCorrect) { + public static void sendSms(Context mContext, int slot, String sender, String message, String value, boolean ifmessageCorrect) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { SubscriptionManager localSubscriptionManager = SubscriptionManager.from(mContext); if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { @@ -636,8 +694,7 @@ public class SimUtil { //申请该权限 - public static void requestOnePermission(Activity activity, String permission, - int permissionCode) { + public static void requestOnePermission(Activity activity, String permission, int permissionCode) { if (activity != null) { activity.requestPermissions(new String[]{permission}, permissionCode); } diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/UpdateSysConfigUtil.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/UpdateSysConfigUtil.java index 0c1a3622..a3c0fcc7 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/UpdateSysConfigUtil.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/UpdateSysConfigUtil.java @@ -3,20 +3,20 @@ package com.xypower.mpmaster.sms; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Environment; -import com.dev.devapi.api.SysApi; +import androidx.annotation.RequiresApi; + import com.xypower.common.FileUtils; import com.xypower.common.JSONUtils; import com.xypower.common.MicroPhotoContext; -import org.json.JSONArray; -import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Base64; import java.util.HashMap; import java.util.List; @@ -35,6 +35,10 @@ public class UpdateSysConfigUtil { public static final String EXTRA_PARAM_TAKING_TIME = "TakingTime"; public static final String EXTRA_PARAM_TIME = "Time"; + public static String leftTop = "leftTop"; + public static String rightTop = "rightTop"; + public static String leftBottom = "leftBottom"; + public static String rightBottom = "rightBottom"; //创建运维配置文件文件夹 public static String buildAppDir(String packageurl) { @@ -59,6 +63,13 @@ public class UpdateSysConfigUtil { return path; } + //获取配置文件地址 + public static String getScheduleDir(int channel) { + String appPath = buildAppDir(PACKAGE_NAME_MPAPP); + String path = appPath + "data/schedules/" + channel; + return path; + } + //修改运维时间表 public static void setAbsHeartbeats(Context context, List list) { MicroPhotoContext.MasterConfig masterConfig = MicroPhotoContext.getMasterConfig(context); @@ -244,10 +255,10 @@ public class UpdateSysConfigUtil { String path = getChannelDir(channel); JSONObject jsonObject = JSONUtils.loadJson(path); try { - jsonObject.put("leftTop", hashMap.get("leftTop")); - jsonObject.put("rightTop", hashMap.get("rightTop")); - jsonObject.put("leftBottom", hashMap.get("leftBottom")); - jsonObject.put("rightBottom", hashMap.get("rightBottom")); + jsonObject.put(UpdateSysConfigUtil.leftTop, hashMap.get(UpdateSysConfigUtil.leftTop)); + jsonObject.put(UpdateSysConfigUtil.rightTop, hashMap.get(UpdateSysConfigUtil.rightTop)); + jsonObject.put(UpdateSysConfigUtil.leftBottom, hashMap.get(UpdateSysConfigUtil.leftBottom)); + jsonObject.put(UpdateSysConfigUtil.rightBottom, hashMap.get(UpdateSysConfigUtil.rightBottom)); } catch (Exception ex) { ex.printStackTrace(); } @@ -260,14 +271,14 @@ public class UpdateSysConfigUtil { String path = getChannelDir(channel); JSONObject jsonObject = JSONUtils.loadJson(path); try { - String leftTop = jsonObject.getString("leftTop"); - String rightTop = jsonObject.getString("rightTop"); - String leftBottom = jsonObject.getString("leftBottom"); - String rightBottom = jsonObject.getString("rightBottom"); - hashMap.put("leftTop", leftTop); - hashMap.put("rightTop", rightTop); - hashMap.put("rightBottom", rightBottom); - hashMap.put("leftBottom", leftBottom); + String leftTop = jsonObject.getString(UpdateSysConfigUtil.leftTop); + String rightTop = jsonObject.getString(UpdateSysConfigUtil.rightTop); + String leftBottom = jsonObject.getString(UpdateSysConfigUtil.leftBottom); + String rightBottom = jsonObject.getString(UpdateSysConfigUtil.rightBottom); + hashMap.put(UpdateSysConfigUtil.leftTop, leftTop); + hashMap.put(UpdateSysConfigUtil.rightTop, rightTop); + hashMap.put(UpdateSysConfigUtil.leftBottom, leftBottom); + hashMap.put(UpdateSysConfigUtil.rightBottom, rightBottom); } catch (Exception ex) { ex.printStackTrace(); } @@ -348,4 +359,30 @@ public class UpdateSysConfigUtil { context.sendBroadcast(intent1); } + + //拍照时间表修改 + public static void setPhotoSchedules(int channel, String msg) { + if (StringUtils.isNotEmpty(msg)) { + byte[] decode = new byte[0]; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + decode = Base64.getDecoder().decode(msg); + } + if (decode != null && decode.length > 0) { + String path = getScheduleDir(channel); + JSONUtils.saveByte(path, decode); + } + } + } + + + //获取拍照时间表 + public static String getPhotoSchedules(int channel) { + String msg = ""; + String path = getScheduleDir(channel); + byte[] bytes = JSONUtils.loadByte(path); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + msg = Base64.getEncoder().encodeToString(bytes); + } + return msg; + } }