From 725640f1b944cc8e08b3a9bbb12c65dc3ab6aa45 Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Tue, 17 Oct 2023 16:27:22 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E6=96=B0=E5=B9=B3=E5=8F=B0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=20to=20rtsp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Conflicts: # app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt --- .../java/com/yinuo/safetywatcher/TestUtils.kt | 13 ++++ .../com/yinuo/safetywatcher/watcher/App.kt | 27 +++++--- .../safetywatcher/watcher/port/ParseHelper.kt | 3 +- .../safetywatcher/watcher/ui/HomeActivity.kt | 4 ++ .../watcher/ui/TimeSettingActivity.kt | 4 +- .../safetywatcher/watcher/utils/LztekUtil.kt | 34 +++++----- .../watcher/utils/PlatformUtils.kt | 62 ++++++++++++++++++ .../safetywatcher/watcher/utils/SnUtils.java | 17 +++++ .../watcher/wifi/ui/GlobalMonitorActivity.kt | 5 +- app/src/main/res/values/colors.xml | 2 +- buildCommon/commonLibConfig.gradle | 4 +- sbc3566.jks | Bin 0 -> 2375 bytes 12 files changed, 143 insertions(+), 32 deletions(-) create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/utils/PlatformUtils.kt create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/utils/SnUtils.java create mode 100644 sbc3566.jks diff --git a/app/src/main/java/com/yinuo/safetywatcher/TestUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/TestUtils.kt index 2386aea..e417c0c 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/TestUtils.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/TestUtils.kt @@ -2,10 +2,12 @@ package com.yinuo.safetywatcher import android.content.Context import android.content.Intent +import android.media.MediaCodecList import android.net.Uri import android.os.Build import android.os.FileUtils import android.provider.Settings +import android.util.Log import com.common.commonlib.db.DBUtils import com.common.commonlib.db.entity.Gas import com.common.commonlib.db.entity.Video @@ -29,6 +31,7 @@ object TestUtils { fun insertData() { + getSupportCodec() PushHelper.setPushUrl("rtsp://192.168.5.17:554/123") GlobalScope.launch() { // 构造气体数据 @@ -187,4 +190,14 @@ object TestUtils { } loadingDialog?.dismiss() } + + fun getSupportCodec() { + val list = MediaCodecList(MediaCodecList.ALL_CODECS) + val codecs = list.codecInfos + Log.d("cyy", "Decoders:") + for (i in codecs.indices) { + val codec = codecs[i] + Log.d("cyy", codec.name) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/App.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/App.kt index fe39b05..ac37ad0 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/App.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/App.kt @@ -9,10 +9,11 @@ import com.yinuo.safetywatcher.watcher.constant.CAMERA_GATEWAY import com.yinuo.safetywatcher.watcher.constant.CAMERA_IP import com.yinuo.safetywatcher.watcher.constant.CAMERA_NETMASK import com.yinuo.safetywatcher.watcher.port.cmd.GasPortStatus -import com.yinuo.safetywatcher.watcher.utils.LztekUtil +import com.yinuo.safetywatcher.watcher.utils.PlatformUtils import com.yinuo.safetywatcher.watcher.wifi.WiFiConfig import com.yinuo.safetywatcher.watcher.wifi.WiFiModule import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.async import kotlinx.coroutines.launch @@ -38,14 +39,17 @@ class App : CommonApplication() { } private fun ipConfig() { - LztekUtil.getLztek() - ?.setEthIpAddress(CAMERA_IP, CAMERA_NETMASK, CAMERA_GATEWAY, CAMERA_DNS) +// LztekUtil.getLztek() +// ?.setEthIpAddress(CAMERA_IP, CAMERA_NETMASK, CAMERA_GATEWAY, CAMERA_DNS) + PlatformUtils.setEthIpAddress(CAMERA_IP, CAMERA_NETMASK, CAMERA_GATEWAY, CAMERA_DNS) + PlatformUtils.hideNavigation() + PlatformUtils.hideStatusBar() } private fun tryFixDbData() { - GlobalScope.launch { + GlobalScope.launch(Dispatchers.IO) { // 修复告警数据 - async { + val warningAsync = async(Dispatchers.IO) { val warningDao = DBUtils.warningDao() val warningList = warningDao.queryWarningsNoEndTime() warningList?.apply { @@ -54,10 +58,10 @@ class App : CommonApplication() { } warningDao.updateAll(warningList) } - }.await() + } // 修复视频数据 - async { + val videoAsync = async(Dispatchers.IO) { val videoDao = DBUtils.videoDao() val videoList = videoDao.getAll() videoList.onEach { video -> @@ -65,17 +69,20 @@ class App : CommonApplication() { videoDao.delete(video) } } - }.await() + } // 初始时,所以串口连接状态都应该是未连接 - async { + val gasAsync = async(Dispatchers.IO) { val gasTypeDao = DBUtils.gasTypeDao() val all = gasTypeDao.getAll() all.onEach { gasType -> gasType.status = GasPortStatus.OUTLINE gasTypeDao.insert(gasType) } - }.await() + } + warningAsync.await() + videoAsync.await() + gasAsync.await() } } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt index e3fa558..513b934 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt @@ -18,6 +18,7 @@ import com.yinuo.safetywatcher.watcher.port.cmd.O2 import com.yinuo.safetywatcher.watcher.port.cmd.ResponseHelper import com.yinuo.safetywatcher.watcher.port.cmd.getGasTypeByCode import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import org.easydarwin.TxtOverlay @@ -148,7 +149,7 @@ object ParseHelper { * 插入气体数据 */ private fun insertGasData(gasType: String, value: Float, unit: String) { - GlobalScope.launch { + GlobalScope.launch(Dispatchers.IO) { // 阈值范围 val min = getGasLowThreshold(gasType, unit) val max = getGasHighThreshold(gasType, unit) diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt index 46ab4bb..9a32d08 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt @@ -279,4 +279,8 @@ class HomeActivity : NoOptionsActivity() { super.onResume() mClient?.resume() } + + override fun onBackPressed() { +// super.onBackPressed() + } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/TimeSettingActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/TimeSettingActivity.kt index 4d7ebb8..e7d7e1e 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/TimeSettingActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/TimeSettingActivity.kt @@ -7,6 +7,7 @@ import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivityTimeSettingBinding import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity import com.yinuo.safetywatcher.watcher.utils.LztekUtil +import com.yinuo.safetywatcher.watcher.utils.PlatformUtils import java.text.SimpleDateFormat import java.util.Locale @@ -44,7 +45,8 @@ class TimeSettingActivity : NoOptionsActivity() { } mBingding.tvConfirm.setOnClickListener { if (changeTime > 0) { - LztekUtil.getLztek()?.setSystemTime(changeTime) +// LztekUtil.getLztek()?.setSystemTime(changeTime) + PlatformUtils.setSystemTime(changeTime) } onBackPressed() } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt index 9a4a174..2e0a9ef 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt @@ -25,22 +25,24 @@ object LztekUtil { fun getSn(): String { if (sn == null) { - val mac = getLztek()?.ethMac ?: "unKnow" - val md = MessageDigest.getInstance("MD5") // 生成一个MD5加密计算摘要 - md.update(mac.toByteArray()) // 计算md5函数 - /** - * digest()最后确定返回md5 hash值,返回值为8位字符串。 - * 因为md5 hash值是16位的hex值,实际上就是8位的字符 - * BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 - * 一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) - */ - /** - * digest()最后确定返回md5 hash值,返回值为8位字符串。 - * 因为md5 hash值是16位的hex值,实际上就是8位的字符 - * BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 - * 一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) - */ - sn = BigInteger(1, md.digest()).toString(16) // 16是表示转换为16进制数 +// val mac = getLztek()?.ethMac ?: "unKnow" +// val md = MessageDigest.getInstance("MD5") // 生成一个MD5加密计算摘要 +// md.update(mac.toByteArray()) // 计算md5函数 +// /** +// * digest()最后确定返回md5 hash值,返回值为8位字符串。 +// * 因为md5 hash值是16位的hex值,实际上就是8位的字符 +// * BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 +// * 一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) +// */ +// /** +// * digest()最后确定返回md5 hash值,返回值为8位字符串。 +// * 因为md5 hash值是16位的hex值,实际上就是8位的字符 +// * BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 +// * 一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方) +// */ +// sn = BigInteger(1, md.digest()).toString(16) // 16是表示转换为16进制数 + val deviceSN = SnUtils.getDeviceSN() + sn = deviceSN } return sn!! } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/PlatformUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/PlatformUtils.kt new file mode 100644 index 0000000..28aa923 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/PlatformUtils.kt @@ -0,0 +1,62 @@ +package com.yinuo.safetywatcher.watcher.utils + +import android.content.Intent +import com.common.commonlib.CommonApplication +import java.text.SimpleDateFormat +import java.util.Locale + + +object PlatformUtils { + + val format: SimpleDateFormat by lazy { + SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.ROOT) + } + + fun setEthIpAddress(ip: String, netmask: String, gateway: String, dns: String) { + val intent = Intent("android.ido.intent.action.ethernet") + intent.putExtra("mode", "Static") + intent.putExtra("iface", "eth0") + intent.putExtra("ipAddr", ip) + intent.putExtra("netmask", netmask) + intent.putExtra("gateway", gateway) + intent.putExtra("dns1", dns) + intent.putExtra("dns2", dns) //如果只有一个dns,可将dns2设置为和dns1一样 + CommonApplication.getContext()?.sendBroadcast(intent) + } + + fun operateWifi(enable: Boolean) { + val intent = Intent("android.ido.intent.action.wifionoff") + intent.putExtra("enable", enable) //true,开启; false,关闭 + CommonApplication.getContext()?.sendBroadcast(intent) + } + + fun setSystemTime(timeMs: Long) { + val formatTime = format.format(timeMs) + val strings = formatTime.split("-") + val times = strings.map { + it.toInt() + }.toTypedArray().toIntArray() +// val time = intArrayOf(2022, 9, 30, 18, 0, 0) + val intent = Intent("android.ido.intent.action.settime") + intent.putExtra("time", times) + CommonApplication.getContext()?.sendBroadcast(intent) + } + + fun hideStatusBar(hide: Boolean = true) { + val action = + if (hide) "android.ido.intent.action.statusbar.HIDE" + else "android.ido.intent.action.statusbar.HIDE" + val intent = Intent(action) + intent.putExtra("save", true) //true,断电保存;false,断电不保存 + CommonApplication.getContext()?.sendBroadcast(intent) + } + + fun hideNavigation(hide: Boolean = true) { + val action = + if (hide) "android.ido.intent.action.navigation.HIDE" + else "android.ido.intent.action.navigation.SHOW" + val intent = Intent(action) + intent.putExtra("save", true) //true,断电保存;false,断电不保存 + CommonApplication.getContext()?.sendBroadcast(intent) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/SnUtils.java b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/SnUtils.java new file mode 100644 index 0000000..ad98a88 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/SnUtils.java @@ -0,0 +1,17 @@ +package com.yinuo.safetywatcher.watcher.utils; + +import java.lang.reflect.Method; + +public class SnUtils { + public static String getDeviceSN() { + String serial = null; + try { + Class c = Class.forName("android.os.SystemProperties"); + Method get = c.getMethod("get", String.class); + serial = (String) get.invoke(c, "ro.serialno"); + } catch (Exception e) { + e.printStackTrace(); + } + return serial; + } +} diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/wifi/ui/GlobalMonitorActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/wifi/ui/GlobalMonitorActivity.kt index 3f1f6d6..db92c6e 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/wifi/ui/GlobalMonitorActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/wifi/ui/GlobalMonitorActivity.kt @@ -13,6 +13,7 @@ import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivityMonitorBinding import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity import com.yinuo.safetywatcher.watcher.ui.view.ConfirmDialog +import com.yinuo.safetywatcher.watcher.utils.PlatformUtils import com.yinuo.safetywatcher.watcher.wifi.WiFiModule import com.yinuo.safetywatcher.watcher.wifi.info.WiFiRemoveStatusInfo import com.yinuo.safetywatcher.watcher.wifi.info.WiFiScanInfo @@ -56,9 +57,11 @@ class GlobalMonitorActivity : NoOptionsActivity() { private fun initEvents() { mBinding.wifiSwitch!!.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { + PlatformUtils.operateWifi(true) WiFiModule.getInstance().startScan(scanActionListener) } else { - WiFiModule.getInstance().disableWifi() +// WiFiModule.getInstance().disableWifi() + PlatformUtils.operateWifi(false) mData!!.clear() mAdapter?.setData(mData!!) mBinding.tvStatus.text = "WiFi已关闭" diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 537d65a..944c857 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,7 +7,7 @@ #ffffff #33ffffff #4Cffffff - #1ED5CA + #242F4D #66000000 diff --git a/buildCommon/commonLibConfig.gradle b/buildCommon/commonLibConfig.gradle index 4ef5b2a..d4764e8 100644 --- a/buildCommon/commonLibConfig.gradle +++ b/buildCommon/commonLibConfig.gradle @@ -1,8 +1,8 @@ project.ext { sign = [ - keystore_path : "../innovationapp.jks", + keystore_path : "../sbc3566.jks", keystore_pwd : "123456", - keystore_alias: "yinuo" + keystore_alias: "sbc3566" ] compileOptions = [ diff --git a/sbc3566.jks b/sbc3566.jks new file mode 100644 index 0000000000000000000000000000000000000000..f8fcbe583c6c6d1ba80bc934be4c36b5c1d694c8 GIT binary patch literal 2375 zcmd5-`8U)H8=vnCgJBp()(9cd@SRQFP`0sUsgNaPUlN9hvK);uqL64R$=cXyY-PLl zJ=yoNCZa^#u5n4P?t9<&z305|AMpP0oacN#&-0w~oX>gA=hH(&fH0>rsAnXv3!nOzU!VyYvfDKTD@&f=ngpI=Xao=lhP~TwcE43qf#?)Ka z2X|wQphstye*?8Bb;mlidv+Y{|CMfi1+Ddhu?z6X`tfsDwNuwR@=v^TRu!vDtcd9v zH%(kFWEAL!JRI}P_WWk<9F-4gTgf z!P4w(jB%!JNjH9*_ox_8SSN>_jk>%R*h4FtTMd?;oAlOHh_$``C53{<{W6>fDMJc7 zUAQGIjo-Yi!z+))o|d-3@7H>Y0Oa$>t`o?mHK?pll^_JHk5N{P-YJXQ`ND&~>^=*ZGyCpgVYso=Q`W;zVyqaFvD( zUG?*D_8<}*L%SFr?T2cwCe0SYmK^s?drfoi6xFS3;*(DlCP0Q| z9B1du}?L@K5z?Zn&zt3iS6*t}{c zcDI2=M3rvmV?Kz;!w-8nIulijhLf~kEWS)1hz!k;_7*(kX|l{!Pcw4G^;dlFe3l9H zkloyEM-iB1a=Z~wflSDl+b~izNkI~dX$>D`Ek1OKRap>y9?=Ko3kA-g6-ENi7o?;| zU!Pj9MIEPDyoN1Jw|v_cF=tm5|BTDjx#tw~;22Yw`Y@EgG3g@j<>>ku1?@<9Vj`*S zqONS-$cU1HLcv{D=IdMECq73OUfsI#9asJ-+EM81?>e{Y-}TY~{;F`j)h%`(!f0CS zwO%3w=FXj0p@jE8*&U3r;7`4)b2h(Ri7)3B%E3xK|7o0c1ewyc&`gJ%33;qyoUPN8 zb4O?jF`<2Oc=lJDG0o47!JUI{mr!HPjvLUrf^<|_dZ?K;;~Pa=L-zNnNCm}kTFtZ8 zL|QTO%ZFHcr=S%4w;_fjsisLn zyl+_JPF9wtcXw()h}Y(irMzhgWgd?{zJ5>P0W?n^pdwTqs~f+)(ovF^98O$lg76Cn z7b&X_49lAgJZVktH3@a0q~3lqT1%y~`Pq=R`=KMgjo$fotAQ!E%FKaF`_<91XQJ z$D%?0pMaAGq2qMT%iS-)*UJej1PcBnIe3sJenGy0PF}uJm%QA9v8V&XJ>U^M99q7v z0e)Vt|6;iRi-G-zkpZRty#p5@gm(Jptma=?*~QNXloUo{30NEs52_OI1gxzvl7It= zSnx0S|GG8>kovp82QLUl0gwm33E+fM005FTv0)QppSB{;;>h|uksum(X8Y=I*vFRr z?^RYf3mHDS*?K*aip#&Y^3Q%m8)MaO0-zz zPlsvazHPw){%w{s;D)Sh1q-(mA`qz>{*<9fgdTvn_ z%jHuuM@F41#Hi=BFz5^)?Mt%rB^M-j@np#4yg=3A1}ZS+dsYL1sa4p;B-@b#{LX(k zvb+yUKMIrm$UA*;qu0DqQf&32Y6fEG`0-O?n^gJ3Rrn=e0v(GMF<8~fREBY-hFI)# zaDGGTJ&szbgQ+r(xkpw8Sq)gNkqn^#EayCE3Q8QDjRY^75SyS3t6IFvYRo8_;=>nj zfemqe-j4u}{45`369I)H|91n=&jvIbI|u`SAAeW;;G_=}2O#=m+Ng(8F7{|;t+6N- zCGW5FSi7j8!wAPoh`P5b%5Jfd!y&W9w}hP)6xewBMB{F&nJ0c|vay|6#S^WH*Z8tK z(4dzf>i5N0tmm}J{zhQuedCafvOlVBCt#-BZB}){1gSy`8%4#1;>Dte#zUoY8kjrU z9gO3JyaY!$%lb1OSzRh03L