From 12ea3e039b4f873632c00d54d534278240232dbf Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Mon, 29 May 2023 14:21:49 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E7=9B=91=E5=90=AC=E7=94=B5=E6=B1=A0?= =?UTF-8?q?=E7=94=B5=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 8 +-- app/libs/sdkapi.jar | Bin 0 -> 5099 bytes app/src/main/AndroidManifest.xml | 2 + .../com/yinuo/safetywatcher/watcher/App.kt | 13 +++++ .../safetywatcher/watcher/HomeActivity.kt | 7 +++ .../watcher/utils/BatteryHelper.kt | 55 ++++++++++++++++++ .../safetywatcher/watcher/utils/LztekUtil.kt | 16 +++++ .../safetywatcher/watcher/utils/WifiHelper.kt | 49 ++++++++++++++++ .../watcher/view/CommonTopBar.kt | 40 ++++++++++++- 9 files changed, 184 insertions(+), 6 deletions(-) create mode 100644 app/libs/sdkapi.jar create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/App.kt create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/utils/BatteryHelper.kt create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/utils/WifiHelper.kt diff --git a/app/build.gradle b/app/build.gradle index e85e6c5..30ac887 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,10 +12,10 @@ android { defaultConfig { applicationId "com.yinuo.safetywatcher" - ndk { - //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi-v7a", "x86"//, "arm64-v8a", ,"arm64-v8a","x86_64" - } +// ndk { +// //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) +// abiFilters "armeabi-v7a", "x86"//, "arm64-v8a", ,"arm64-v8a","x86_64" +// } } viewBinding { diff --git a/app/libs/sdkapi.jar b/app/libs/sdkapi.jar new file mode 100644 index 0000000000000000000000000000000000000000..c26927666cb16ac0167801b737f20204b8563425 GIT binary patch literal 5099 zcmaJ_2QVDk*I&I88>_5N^cJiZC0U}gh~C!IEmrR}YV?Fv5~4&WdXFBR=nNvPm0761Sz*N9Jb->?@3V;jHRMdkC zsKS(lG@&q6B}H95K~1IG5dh#sbM%vjx`5ymnYsY)_~=CavxhUHYn$jzY=E{p0byMz z_96W*D7s%;`+pNm{v!e7uTyJRq>yufm#veKm#eF@6T(YK<98%z?QH4kS(!l;#GubO z80uO-_8=>xKvkDp6QNkBiW8YGAI3H>PPQUWR2wF5S_AVb8E$A3-5+;Gp~J9=JtF*A z3E_H_4f>hDkxgS<8A)8Bd-w44WS-zPXy4sQ)Mp{>IDZD+%ujG-H=l$aUElr)JXtgK zT_O1+O!BFM##&x#_QBBGZE%*f+0wYP_)3z?Z4s;BWR2?Ad|w+cr<#q^FioWqkctgz z!K`?VfA|gd3$GJL-Hx3}PdjDRCZoJ#o6jOEy0|7LZQgv@&0}85BTZ(#9@6O;&pz|z zCMA~6Q5ZduUY?SC1XZa6(iHWC5e%6jVUV$mhp&h=)2?hi@6&@!A173n;KAZo3j^~( z@k{wH`Yw3ni%VF|30^T?9ZQLwD*vFn}fGNTA% z7~KkGGMk|j&xBqMXcI4NF~m>{c{t@sT(RyJ7t-e(2j_L&5kz*mrR*q{r?Ln&)m`d0 z9OSL1*w4}WzmQQ{MIuSA3h0XivAYOZvpcQm|M< zD)C-A3jt9flC5wpnk*5hYaFld^yE(4e@ET7m&4)C*_>BKHN+IyJxZ(STI-eFx3Dwq zM(*9|(8XE9Bu3=?ylTB8B!Vn9u@CSJ&c^ZOmX{sXzW8cB2AU$ZQRnAWhh)?(BNqqN zf1r|trzH=0v?Y&+gp=h}dbG1a`2u9^zu&Y+_MY5_E$owVt2pzF%Z+)`PB10Uo4hp- z=)gM4xByJdI{1`qj&7GRr%2|O7(CizT(G5Z<`u80;RlsYt1m2z_>aKs>pu{f1{8m7 zJehI6_VSJCJrRzLH_A{tyqDwfCP#~=pE;xDbw9(BXm%J;yii6vL734L4`p1o(r zq9|d;2wtg!(Z}vn!ZW(1by+uHo)){}0#s1@>xqx_?x^Sq-KIk!RLh$*%dWsSy`tSp z3Fp^C>keBQOHRm&VZ#TVeRR|l3;vGhY^w2+H4q-eCh?))I8T3S!#B>JH%0`6Rg2HW#C33cuKI1VitA|7?Jz!riZC#pXf56@9~Gx}W0 z3rg?6lO((CkIcp5GCODf#F0=Q>{P!r*lh7hf=j_Q&Z-h*H3oYNP2^NIK|C~);-lv{ z7fBOund^@RxLJBzv%q@|1cRbG_Q1#My7ishdywq>Z^E(4GqEPA-gHWtcv>nlqIY z>9FPzj-PayOInbeWBb^Q5A={nRfp7X!$gG5L(fg;3SK_=oHKXJiSae4e%CNUlQIxe z%~FU+mP8q+e6k%)&Hug_s@6W@GIhGVC6{LXnb_cBM&bdyw@dZz)mx)MRTEUfxKehl z;WnI&M9PI9{&?feRrT9u<(>?bCOdgG$s;Bcd8hqRbE&r-6_cDXuS+zzx>F^N@0=A_ z^qNgEDq!qn(85qvXSlj3XX<1@E^vN`FG?|y>dUtb$E<+xqiD5~nxMY5wv5t@d;yg&sk?itBB>9Ac_(UfPL|!WtT>L<PDjo@5sOBwpdpvvt@~JYzgdmyP&gGO(u5NbMHh-jW2lUb4c3x*ir*lYeBcgcmHeISA5gHGC#$mQ>&lD%$;$$~>1xGM7&?m$s?RESKw*?!NrG;#^iP{#R${(RdCE%fzPB(I>n7fD5g%izHLy>03_fvIE1wmg#d( zjCt4NiT)om=Q3AviM%sA1dzD*Qxph@V&eH^X^IPrX5kf1;hLq|XWa+>yZ}tCONc8ETg1+N$0{hkBk^-wB5~UlP7ZG@j^wS-k*9+mcEzQ z58$kW=aQ9s;goqn)k#QGbk~^acbk2R z)|lxt=_%kYzJj?X>`>+NO!8QH$|pJ}v1w2M$tgG(M(g_$?y!H4&p1OF-%g1EfI)`; zG(NNa>-el|>w&Oz)^_#q`tKP!YFf+n^Fvzv?}Nz2NeI%=WMDwe^2QYPk!`^J`Q$6k zCsC}RvzjdWiexcl`Rryl4Y~*G0c{MGPuFg9^O`-t3 zRJ6hCgz$@Os@^A@sxk>SllMQz3<{yj8Z3qR88OW=F_#w)=b0H|wM9~u+JZRs@On)Q ziKZNY6ZTlSPs=u?N&By-BvUBpjv1>b{*Z;iNeKK?&F3WtwfB{*F;;Tmm|Z@(7`)y~ z7vOQr1kt-YyU7&Sd^&};Hf{mr+#$cp#+f?HS4AvEHm*k@tO+Q(gPK)i=Rg8-fzF-$ zSkO;#f>V!Jsh4V6$8HyIwYcW?Cj)=pC{Ayk3M zt%Zw-a{>LNHZLpxt65r)z0tCg5U(T1v;0+AN4iG5JHEGCGs7Q?N)##sOt=f=Wq)W< zmX~6IjYPVc^!H5gF0w4NAM2L~>=X0omscVX3qzqC1Y~iA6`X>!o^z4q7hE<>)|ayU z`#5BOikZ%!D)nlJ4a9s^UyPcvq@) za&1coTa@T&P(Elzpm4@YEI&1*I6ZbzA z8q2>H8q~(dL)FF3^?$xjQCX2XfaH-T6^6t};*LUmlc?}i zxLFFvO5K7@ie`t*#VlQL4Sawmcn_5znhndYeaJ3)wG|PXdKT!D@qp}87HU|kYw0q3 z;xhYWDfIT|h8EyHH}B3p+R+Sk#6HR3yo&T@U8CirU5$6zV~hK?c$Q%bzGr~}i_-^I zS0jt&>_>!=_CjN3pnJw)hi~f4J-wEUrz=}2t>A=Dsi{Td7wF1}u!>SEhZ3-B%|z$I zb;S`*GH&CXG|uFsA+?i1E*6Ul+ygV3=KDs^a?9_0 z{*G;BzI;*>tq@Zx$p$E+Ku7{K)r1f`n8FM(hSNezvXx2P0FPqi=$yKflDCdUJ?XH~ z`2K7PT&(DjzIU7v1;H%eHlkHqqxQWmrJWV_lC^St^Y191?Ua&2(bsDEt z{lN@4Q;MPLD6oe9$orBLzxR+2Tc^r-8P+hH9~n%K1NP;_0mnUCPGd`O7ZQDT5~U4I zD%U+1H*|yLbusRm1qZK`DkVd6<4%H*@1J#+t^e!bAv*FX&XgDKeKLglc%Te&-sbm$0QYoyx=JdRF{vlaQOSKEW) z9E%(8ft49;7N{)3L1n9{FSb1nMC9}LEAGr83o@u+Nfq$kknYk zYDXXSRQQ3ES6oM({8qjSj~QP*((Nj^(_u&Si7_FKmlup=;%f0-VldrnlUmxn3KW!@ zWXV!D4g_Us^R-BZyZF^tSvuI*TrqwrMX%Q|S|1j!J4i!(c(T2GbMqLKlrvJl+I)jA zf8;{8*kikYMHjE45lWxN*vi~z8;n1eI*oaZZBiGi;P8YuuT)?k;f6n0f>Pr^SIO{I znEt+qWaynF&)I2!wHL4*cgc;6DVlN9$2Ieu(&L{Pt& z#SxCj0D)8+3ESay^)ZHAgm3BfaN?j{vl~?Id+xgdL02nD{p0tOhyy^EY_iVM)=rkV9x3j$ErlflfdVn5v1=$1+q!n9vMA(y(% zt=;rNz7-`tmN2V#kPy0Kwlg990iL_V`AtqeYM~rjzlcec=r=iGVN(JA(y9I~F#Xo4 z{;&Ois@307ev46m@3X(fsK3nem-`>3seeNKok@Q;=D#eD5 literal 0 HcmV?d00001 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bb4ce33..ebd5a88 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ android:required="true" /> + @@ -18,6 +19,7 @@ android:required="true" /> } } } + + override fun onDestroy() { + super.onDestroy() + BatteryHelper.release(this@HomeActivity) + } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/BatteryHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/BatteryHelper.kt new file mode 100644 index 0000000..6675f65 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/BatteryHelper.kt @@ -0,0 +1,55 @@ +package com.yinuo.safetywatcher.watcher.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.BatteryManager +import android.util.Log + +object BatteryHelper { + private var callbacks = mutableListOf() + private var mLevel = -1; + + private val receiver = object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + val level = intent?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) + mLevel = level!! + Log.i(this@BatteryHelper.javaClass.name, "onReceive level = $level") + callbacks.forEach { + if (level != null) { + it.onLevel(level) + } + } + } + } + + fun init(context: Context) { + watchBattery(context) + } + + private fun watchBattery(context: Context) { + val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED) + context.registerReceiver(receiver, filter) + } + + fun addCallBack(callBack: OnBatteryLevelCallback) { + callbacks.add(callBack) + if (mLevel != -1) { + callBack.onLevel(mLevel) + } + } + + fun removeCallback(callBack: OnBatteryLevelCallback) { + callbacks.remove(callBack) + } + + fun release(context: Context) { + callbacks.clear() + context.unregisterReceiver(receiver) + } + + interface OnBatteryLevelCallback { + fun onLevel(level: Int) + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..162794a --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt @@ -0,0 +1,16 @@ +package com.yinuo.safetywatcher.watcher.utils + +import com.lztek.toolkit.Lztek + +object LztekUtil { + + private var mLztek: Lztek? = null; + + fun setObject(value: Lztek) { + mLztek = value + } + + fun getLztek(): Lztek { + return mLztek!! + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/WifiHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/WifiHelper.kt new file mode 100644 index 0000000..5dc5077 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/WifiHelper.kt @@ -0,0 +1,49 @@ +package com.yinuo.safetywatcher.watcher.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.net.wifi.WifiManager +import android.util.Log + +object WifiHelper { + private var callbacks = mutableListOf() + + private val receiver = object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + val wifiState = intent?.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1) + Log.i(this@WifiHelper.javaClass.name, "onReceive wifiState = $wifiState") + callbacks.forEach { + it.onEnable(wifiState == WifiManager.WIFI_STATE_ENABLED) + } + } + } + + fun init(context: Context) { + watchWifi(context) + } + + private fun watchWifi(context: Context) { + val filter = IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION) + context.registerReceiver(receiver, filter) + } + + fun addCallBack(callBack: OnWifiLevelCallback) { + callbacks.add(callBack) + } + + fun removeCallback(callBack: OnWifiLevelCallback) { + callbacks.remove(callBack) + } + + fun release(context: Context) { + callbacks.clear() + context.unregisterReceiver(receiver) + } + + interface OnWifiLevelCallback { + fun onEnable(enable: Boolean) + fun onLevel(level: Int) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/view/CommonTopBar.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/view/CommonTopBar.kt index 5358f52..d6fa510 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/view/CommonTopBar.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/view/CommonTopBar.kt @@ -2,13 +2,14 @@ package com.yinuo.safetywatcher.watcher.view import android.app.Activity import android.content.Context -import android.graphics.Color -import android.opengl.Visibility import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.widget.LinearLayout import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.LayoutTopbarBinding +import com.yinuo.safetywatcher.watcher.utils.BatteryHelper +import com.yinuo.safetywatcher.watcher.utils.WifiHelper class CommonTopBar : LinearLayout { constructor(context: Context?) : this(context, null) @@ -33,12 +34,47 @@ class CommonTopBar : LinearLayout { (context as Activity).finish() } } + + post { + // watch battery + watchBattery() + watchWifi() + } + } + + private val batteryCallback = object : BatteryHelper.OnBatteryLevelCallback { + override fun onLevel(level: Int) { + Log.i(this@CommonTopBar.javaClass.name, "batteryCallback onLevel = $level") + mBinding?.battery?.visibility = if (level > 80) VISIBLE else GONE + } + } + + private fun watchBattery() { + BatteryHelper.addCallBack(batteryCallback) } + private val wifiCallback = object : WifiHelper.OnWifiLevelCallback { + override fun onEnable(enable: Boolean) { + Log.i(this@CommonTopBar.javaClass.name, "wifiCallback onEnable = $enable") + mBinding?.wifi?.visibility = if (enable) VISIBLE else GONE + } + + override fun onLevel(level: Int) { + Log.i(this@CommonTopBar.javaClass.name, "wifiCallback onEnable = $level") + } + } + + private fun watchWifi() { + WifiHelper.addCallBack(wifiCallback) + } open fun setTitle(title: String) { mBinding?.backArea?.visibility = VISIBLE mBinding?.title?.text = title } + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + BatteryHelper.removeCallback(batteryCallback) + } } \ No newline at end of file