From c58d15f77723da3e05835d16833881a0d5dc55b9 Mon Sep 17 00:00:00 2001 From: YJJ <15950590667@163.com> Date: Thu, 27 Jun 2024 09:36:25 +0800 Subject: [PATCH] =?UTF-8?q?[author]=20yjj=20[desc]=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E4=BB=AA4G=E6=A8=A1=E5=9D=97=E8=B0=83?= =?UTF-8?q?=E8=AF=95=201=E3=80=81=E6=8E=A5=E8=A7=A6wifiHelper=E5=92=8CSimH?= =?UTF-8?q?elper=E4=B9=8B=E9=97=B4=E7=9A=84=E8=80=A6=E5=90=88=E5=85=B3?= =?UTF-8?q?=E8=81=94=202=E3=80=81=E6=96=B0=E5=A2=9ENetWorkHelper=EF=BC=8C?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E7=AE=A1=E7=90=86wifi=E5=92=8C4G=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E7=9B=B8=E5=85=B3=203=E3=80=81=E4=BF=AE=E6=94=B9http?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E6=9C=8D=E5=8A=A1=E5=99=A8ip=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=204=E3=80=81=E5=A2=9E=E5=8A=A0=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=9A=84log=E6=98=BE=E7=A4=BAview=205?= =?UTF-8?q?=E3=80=814G=E6=B5=81=E9=87=8F=E4=BD=BF=E7=94=A8=E6=83=85?= =?UTF-8?q?=E5=86=B5=E5=8F=82=E6=95=B0=E4=BF=AE=E6=94=B9=E6=9C=AAmobile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../watcher/base/BaseActivity.kt | 33 ++++ .../interfaces/NetworkStateCallback.kt | 8 + .../watcher/log/LogPrintListener.kt | 5 + .../safetywatcher/watcher/net/DevicesApi.kt | 20 ++- .../watcher/services/HeartbeatService.kt | 4 - .../safetywatcher/watcher/ui/CloudActivity.kt | 8 +- .../safetywatcher/watcher/ui/HomeActivity.kt | 13 +- .../watcher/ui/NetSettingActivity.kt | 1 + .../watcher/ui/view/CommonTopBar.kt | 78 ++++------ .../watcher/utils/NetworkHelper.kt | 74 +++++++++ .../watcher/utils/NetworkStatsHelper.java | 4 +- .../safetywatcher/watcher/utils/SimHelper.kt | 145 ++++++++---------- .../safetywatcher/watcher/utils/WifiHelper.kt | 37 +++-- app/src/main/res/layout/activity_base.xml | 45 ++++++ app/src/main/res/layout/layout_topbar.xml | 7 +- buildCommon/commonLibConfig.gradle | 2 +- .../src/main/assets/baseUrl.properties | 3 +- .../commonlib/net/manager/RequestManager.kt | 2 +- 19 files changed, 312 insertions(+), 178 deletions(-) create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/interfaces/NetworkStateCallback.kt create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/log/LogPrintListener.kt create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/utils/NetworkHelper.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index da55d0e..4a08466 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ + (Api::class.java) { observe(api.heartBeat(sosReq), object : RequestNoResultCallBack() { override fun onResult(result: BaseResponse) { super.onResult(result) - SimHelper.setNetStatus(true) + NetworkHelper.printLog("heartbeat success") } override fun onError(error: String?) { - if (error?.contains("网络") == true) { - SimHelper.setNetStatus(false) - } + NetworkHelper.printLog("heartbeat fail : $error") } override fun onComplete() { @@ -46,13 +44,13 @@ class DevicesApi : BaseObserve(Api::class.java) { } fun getPushUrl(sn: String, callBack: RequestResultCallBack) { - if (SimHelper.isNetOk()) { + if (NetworkHelper.isNetworkAvailable()) { observe(api.getPushUrl(sn), callBack) } } fun updateTrafficInfo() { - if (SimHelper.isNetOk()) { + if (NetworkHelper.isNetworkAvailable()) { val trafficReqInfo = TrafficReqInfo() observe(api.updateTrafficInfo(trafficReqInfo), null) } @@ -61,7 +59,7 @@ class DevicesApi : BaseObserve(Api::class.java) { suspend fun uploadGasData( gasList: List = emptyList() ): BaseResponse? { - if (SimHelper.isNetOk()) { + if (NetworkHelper.isNetworkAvailable()) { try { val gasReq = GasRequest(detections = gasList) return api.uploadGasData(gasReq) @@ -73,7 +71,7 @@ class DevicesApi : BaseObserve(Api::class.java) { } suspend fun getDetectionLastTime(): LastTimeResponse? { - if (SimHelper.isNetOk()) { + if (NetworkHelper.isNetworkAvailable()) { try { return api.getDetectionLastTime(LztekUtil.getSn()) } catch (e: Exception) { @@ -84,7 +82,7 @@ class DevicesApi : BaseObserve(Api::class.java) { } suspend fun getVideoLastTime(): LastTimeResponse? { - if (SimHelper.isNetOk()) { + if (NetworkHelper.isNetworkAvailable()) { try { return api.getVideoLastTime(LztekUtil.getSn()) } catch (e: Exception) { @@ -95,7 +93,7 @@ class DevicesApi : BaseObserve(Api::class.java) { } fun sendSosAlarm() { - if (SimHelper.isNetOk()) { + if (NetworkHelper.isNetworkAvailable()) { // 1sos关闭 2sos打开 val sosStatus = if (LztekUtil.isSosing()) 2 else 1 val sosReq = SosSnReq(LztekUtil.getSn(), sosStatus) diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/services/HeartbeatService.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/services/HeartbeatService.kt index b4cbe5e..e162ae4 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/services/HeartbeatService.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/services/HeartbeatService.kt @@ -11,7 +11,6 @@ import com.yinuo.safetywatcher.watcher.bean.GetRtspUrlResponse import com.yinuo.safetywatcher.watcher.constant.HEARTBEAT_TIME import com.yinuo.safetywatcher.watcher.net.DevicesApi import com.yinuo.safetywatcher.watcher.utils.LztekUtil -import com.yinuo.safetywatcher.watcher.utils.SimHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -45,7 +44,6 @@ class HeartbeatService : IntentService("HeartbeatService") { private fun handleActionStart(intent: Intent) { while (true) { heartConter++ -// SimHelper.setNetStatus(isOnline()) // 心跳 devicesApi.heartBeat(LztekUtil.getSn()) // 获取推流地址 @@ -54,8 +52,6 @@ class HeartbeatService : IntentService("HeartbeatService") { checkAndUpdateTrafficInfo() // 睡眠30s Thread.sleep(HEARTBEAT_TIME) -// // 重新轮回 -// handleActionStart(intent) } } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/CloudActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/CloudActivity.kt index 1e09593..33ba629 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/CloudActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/CloudActivity.kt @@ -14,7 +14,7 @@ import com.yinuo.safetywatcher.watcher.bean.GasReqBean import com.yinuo.safetywatcher.watcher.constant.GAS_CLOUD_UPLOAD_SIZE_ONCE import com.yinuo.safetywatcher.watcher.net.DevicesApi import com.yinuo.safetywatcher.watcher.net.UploadFileApi -import com.yinuo.safetywatcher.watcher.utils.SimHelper +import com.yinuo.safetywatcher.watcher.utils.NetworkHelper import com.yinuo.safetywatcher.watcher.utils.showToast import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers @@ -53,7 +53,7 @@ class CloudActivity : NoOptionsActivity() { showToast(getString(R.string.repeat_click_sync_tip)) return@setOnClickListener } - if (!SimHelper.isNetOk()){ + if (!NetworkHelper.isNetworkAvailable()){ showToast(getString(R.string.net_off)) return@setOnClickListener } @@ -68,7 +68,7 @@ class CloudActivity : NoOptionsActivity() { showToast(getString(R.string.repeat_click_sync_tip)) return@setOnClickListener } - if (!SimHelper.isNetOk()){ + if (!NetworkHelper.isNetworkAvailable()){ showToast(getString(R.string.net_off)) return@setOnClickListener } @@ -83,7 +83,7 @@ class CloudActivity : NoOptionsActivity() { showToast(getString(R.string.repeat_click_sync_tip)) return@setOnClickListener } - if (!SimHelper.isNetOk()){ + if (!NetworkHelper.isNetworkAvailable()){ showToast(getString(R.string.net_off)) return@setOnClickListener } 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 74fed9b..de28c5a 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 @@ -28,10 +28,8 @@ import com.yinuo.safetywatcher.watcher.utils.BatteryHelper import com.yinuo.safetywatcher.watcher.utils.GPIOUtils import com.yinuo.safetywatcher.watcher.utils.LztekUtil import com.yinuo.safetywatcher.watcher.utils.RecordHelper -import com.yinuo.safetywatcher.watcher.utils.SimHelper import com.yinuo.safetywatcher.watcher.utils.SoundUtils import com.yinuo.safetywatcher.watcher.utils.SpeedUtils -import com.yinuo.safetywatcher.watcher.utils.WifiHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -299,16 +297,17 @@ class HomeActivity : NoOptionsActivity() { private fun initTopbarHelper() { BatteryHelper.init(this@HomeActivity) - WifiHelper.init(this@HomeActivity) - SimHelper.init(this@HomeActivity) + // 测试用log打印 + com.yinuo.safetywatcher.watcher.utils.NetworkHelper.setLogPrinter(baseLogListener) + // 注意两个NetworkHelper的区别 + com.yinuo.safetywatcher.watcher.utils.NetworkHelper.init(this) } override fun onDestroy() { super.onDestroy() BatteryHelper.release(this@HomeActivity) - WifiHelper.release(this@HomeActivity) - SimHelper.release(this@HomeActivity) - mBinding.root?.removeCallbacks(reStartCamera) + com.yinuo.safetywatcher.watcher.utils.NetworkHelper.release(this) + mBinding.root.removeCallbacks(reStartCamera) warnDialog?.dismiss() Process.killProcess(Process.myPid()) } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/NetSettingActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/NetSettingActivity.kt index f345110..11aaeb9 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/NetSettingActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/NetSettingActivity.kt @@ -42,6 +42,7 @@ class NetSettingActivity : NoOptionsActivity() { val systemService = getSystemService(NETWORK_STATS_SERVICE) as NetworkStatsManager val statsHelper = NetworkStatsHelper(systemService) val info = statsHelper.getAllDay_MonthMobileInfo(this, false) + printLog("流量使用情况:${info.totalData} ==== 下载字节: ${info.rxBytes} ===== 上传字节:${info.txBytes}") val showStr = if (info != null) TrafficFormat.formatByte(info.totalData) else "0B" mBinding.tvUsed.text = "流量使用情况:$showStr" } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt index 7d63469..fcd4553 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt @@ -9,6 +9,7 @@ import android.util.TypedValue import android.view.Gravity import android.view.LayoutInflater import android.view.View +import android.view.View.OnClickListener import android.widget.LinearLayout import android.widget.Space import android.widget.TextView @@ -16,9 +17,10 @@ import androidx.appcompat.content.res.AppCompatResources import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.LayoutTopbarBinding import com.yinuo.safetywatcher.watcher.AppData +import com.yinuo.safetywatcher.watcher.interfaces.NetworkStateCallback +import com.yinuo.safetywatcher.watcher.log.LogPrintListener import com.yinuo.safetywatcher.watcher.utils.BatteryHelper -import com.yinuo.safetywatcher.watcher.utils.SimHelper -import com.yinuo.safetywatcher.watcher.utils.WifiHelper +import com.yinuo.safetywatcher.watcher.utils.NetworkHelper import com.yinuo.safetywatcher.watcher.utils.trySetCommonBg class CommonTopBar : LinearLayout { @@ -30,6 +32,8 @@ class CommonTopBar : LinearLayout { defStyleAttr ) + var logListener : LogPrintListener? = null + var mBinding: LayoutTopbarBinding? = null init { @@ -51,10 +55,8 @@ class CommonTopBar : LinearLayout { mBinding?.fourG?.setImageLevel(100) post { - // watch battery watchBattery() - watchWifi() - watchSim() + watchNetWork() } } @@ -63,8 +65,7 @@ class CommonTopBar : LinearLayout { Log.i(this@CommonTopBar.javaClass.name, "batteryCallback onLevel = $level charging = $charging") mBinding?.root?.post { mBinding?.battery?.setImageLevel(if (charging) 200 else level) - mBinding?.batteryTxt?.text = "${level.toString()}%" - dealForNet4() + mBinding?.batteryTxt?.text = "${level}%" } } } @@ -73,54 +74,44 @@ class CommonTopBar : LinearLayout { BatteryHelper.addCallBack(batteryCallback) } - private val wifiCallback = object : WifiHelper.OnWifiLevelCallback { + /** + * wifi状态和信号 + * **/ + private val wifiCallback = object : NetworkStateCallback { override fun onEnable(enable: Boolean) { Log.i(this@CommonTopBar.javaClass.name, "wifiCallback onEnable = $enable") + logListener?.log("wifiCallback onEnable = $enable") mBinding?.root?.post { - if (!enable || isVirtuallyNet4()) { - mBinding?.wifi?.visibility = GONE - } else { -// mBinding?.wifi?.visibility = VISIBLE - } - dealForNet4() + mBinding?.wifi?.visibility = if (enable) View.VISIBLE else View.GONE } } override fun onLevel(level: Int) { Log.i(this@CommonTopBar.javaClass.name, "wifiCallback onLevel = $level") + logListener?.log("wifiCallback onLevel = $level") mBinding?.root?.post { - mBinding?.wifi?.visibility = if (level > 0 && !isVirtuallyNet4()) VISIBLE else GONE + mBinding?.wifi?.visibility = if (level > 0) VISIBLE else GONE val showLevel = (level + 1) * 20 mBinding?.wifi?.setImageLevel(showLevel) - dealForNet4() } } } - private fun watchWifi() { - WifiHelper.addCallBack(wifiCallback) - } - - - private val simCallback = object : SimHelper.OnSimLevelCallback { + /** + * sim卡状态和信号 + * **/ + private val simCallback = object : NetworkStateCallback { override fun onEnable(enable: Boolean) { Log.i(this@CommonTopBar.javaClass.name, "simCallback onEnable = $enable") + logListener?.log("sim enable callback : $enable") mBinding?.root?.post { - if (enable) { - if (mBinding?.fourG?.visibility != VISIBLE) { - mBinding?.fourG?.visibility = VISIBLE - } - } else { - if (mBinding?.fourG?.visibility != GONE) { - mBinding?.fourG?.visibility = GONE - } - } - dealForNet4() + mBinding?.fourG?.visibility = if (enable) View.VISIBLE else View.GONE } } override fun onLevel(level: Int) { Log.i(this@CommonTopBar.javaClass.name, "simCallback onLevel = $level") + logListener?.log("simCallback onLevel = $level") mBinding?.root?.post { var showLevel = if (AppData.hasCameraData()) (level / 15 + 1) * 20 else (level + 1) * 20 @@ -128,25 +119,15 @@ class CommonTopBar : LinearLayout { showLevel = 100 } mBinding?.fourG?.setImageLevel(showLevel) - dealForNet4() } } } - private fun dealForNet4() { - if (!isVirtuallyNet4()) { - mBinding?.fourG?.visibility = GONE - } else { - mBinding?.fourG?.visibility = VISIBLE - mBinding?.wifi?.visibility = GONE - } - } - - private fun watchSim() { - SimHelper.addCallBack(simCallback) + private fun watchNetWork(){ + NetworkHelper.watch(wifiCallback, simCallback) } - open fun setTitle(title: String) { + fun setTitle(title: String) { mBinding?.backArea?.visibility = VISIBLE mBinding?.title?.text = title } @@ -202,8 +183,7 @@ class CommonTopBar : LinearLayout { override fun onDetachedFromWindow() { super.onDetachedFromWindow() BatteryHelper.removeCallback(batteryCallback) - WifiHelper.removeCallback(wifiCallback) - SimHelper.removeCallback(simCallback) + NetworkHelper.removeNetworkCallback(wifiCallback, simCallback) } fun tryFocusBackArea() { @@ -213,8 +193,4 @@ class CommonTopBar : LinearLayout { fun getBackArea(): View? { return mBinding?.backArea } - - fun isVirtuallyNet4(): Boolean { - return WifiHelper.getConnectedWifiSSID()?.contains("4G-UFI") ?: false; - } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/NetworkHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/NetworkHelper.kt new file mode 100644 index 0000000..f418381 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/NetworkHelper.kt @@ -0,0 +1,74 @@ +package com.yinuo.safetywatcher.watcher.utils + +import android.content.Context +import com.common.commonlib.CommonApplication +import com.yinuo.safetywatcher.watcher.interfaces.NetworkStateCallback +import com.yinuo.safetywatcher.watcher.log.LogPrintListener +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch + +object NetworkHelper { + + private var lastNetworkState : Boolean = false + + private var logPrinter : LogPrintListener? = null + + fun init(context: Context){ + WifiHelper.init(context) + SimHelper.init(context) + } + + fun setLogPrinter(logPrinter: LogPrintListener?){ + this.logPrinter = logPrinter + SimHelper.logListener = logPrinter + WifiHelper.logListener = logPrinter + } + + fun release(context: Context){ + WifiHelper.release(context) + SimHelper.release(context) + } + + fun watch(wifiCallback: NetworkStateCallback, simCallback: NetworkStateCallback){ + WifiHelper.addCallBack(wifiCallback) + SimHelper.addCallBack(simCallback) + } + + fun removeNetworkCallback(wifiCallback: NetworkStateCallback, simCallback: NetworkStateCallback){ + SimHelper.removeCallback(simCallback) + WifiHelper.removeCallback(wifiCallback) + } + + /** + * 网络是否可用 + * **/ + fun isNetworkAvailable() : Boolean{ + return WifiHelper.isWifiAvailable() || SimHelper.is4GAvailable() + } + + /** + * 通知网络变化 + */ + @Synchronized + fun notifyNetworkChange(){ + // 当前网络状态 + val currentNetworkState = isNetworkAvailable() + logPrinter?.log("网络发生变化 curr = $currentNetworkState last = $lastNetworkState") + if (currentNetworkState == lastNetworkState) { + // 网络状态无变化 + return + } + // 网络状态有变化 + lastNetworkState = currentNetworkState + val str = if (!currentNetworkState) "网络链接断开!" else "网络已连接!" + GlobalScope.launch(Dispatchers.Main) { + CommonApplication.getContext()?.showToast(str) + } + } + + fun printLog(msg : String){ + logPrinter?.log(msg) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/NetworkStatsHelper.java b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/NetworkStatsHelper.java index bd79db7..1f11740 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/NetworkStatsHelper.java +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/NetworkStatsHelper.java @@ -55,8 +55,8 @@ public class NetworkStatsHelper { TrafficBean trafficBean = new TrafficBean(); NetworkStats.Bucket bucket; try { - bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI, - getSubscriberId(context, ConnectivityManager.TYPE_WIFI), + bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, + getSubscriberId(context, ConnectivityManager.TYPE_MOBILE), isDayAndMonth ? TrafficFormat.getTimesmorning() : TrafficFormat.getTimesMonthmorning(), System.currentTimeMillis()); } catch (RemoteException e) { diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/SimHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/SimHelper.kt index eb33aa1..fe93fd0 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/SimHelper.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/SimHelper.kt @@ -13,17 +13,17 @@ import android.telephony.SubscriptionInfo import android.telephony.SubscriptionManager import android.telephony.TelephonyManager import android.util.Log -import com.common.commonlib.CommonApplication -import com.common.commonlib.utils.LogUtils -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch +import com.yinuo.safetywatcher.watcher.interfaces.NetworkStateCallback +import com.yinuo.safetywatcher.watcher.log.LogPrintListener object SimHelper { - private var callbacks = mutableListOf() - private var mSimState = -1; - private var mRssi = -1; + private var callbacks = mutableListOf() + private var mSimState = -1 + private var mRssi = -1 + private val TAG = javaClass.simpleName + + var logListener : LogPrintListener? = null private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { @@ -33,17 +33,18 @@ object SimHelper { callbacks.forEach { it.onEnable(mSimState == TelephonyManager.SIM_STATE_READY) } + // 通知网络发生变化,可能需要提示用户 + NetworkHelper.notifyNetworkChange() } - Log.i( - this@SimHelper.javaClass.name, - "onReceive action = ${intent?.action}, mSimState = $mSimState" - ) + Log.i(TAG, "onReceive action = ${intent?.action}, mSimState = $mSimState") + + logListener?.log("onReceive action = ${intent?.action}, mSimState = $mSimState") } } fun init(context: Context) { -// watchSimState(context) -// watchSimRssi(context) + watchSimState(context) + watchSimRssi(context) } private fun watchSimRssi(context: Context) { @@ -58,9 +59,10 @@ object SimHelper { callbacks.forEach { it.onLevel(mRssi) } - Log.i( - this@SimHelper.javaClass.name, "onSignalStrengthsChanged mRssi = $mRssi" - ) + // 通知网络发生变化,可能需要提示用户 + NetworkHelper.notifyNetworkChange() + Log.i(TAG, "onSignalStrengthsChanged mRssi = $mRssi") + logListener?.log("onSignalStrengthsChanged mRssi = $mRssi") } }, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS) } @@ -70,7 +72,7 @@ object SimHelper { context.registerReceiver(receiver, filter) } - fun addCallBack(callBack: OnSimLevelCallback) { + fun addCallBack(callBack: NetworkStateCallback) { callbacks.add(callBack) if (mSimState != -1) { callBack.onEnable(mSimState == TelephonyManager.SIM_STATE_READY) @@ -80,7 +82,7 @@ object SimHelper { } } - fun removeCallback(callBack: OnSimLevelCallback) { + fun removeCallback(callBack: NetworkStateCallback) { callbacks.remove(callBack) } @@ -89,12 +91,6 @@ object SimHelper { context.unregisterReceiver(receiver) } - interface OnSimLevelCallback { - fun onEnable(enable: Boolean) - fun onLevel(level: Int) - } - - @SuppressLint("MissingPermission") @Synchronized fun getNewerSlotSubscriptionInfo(context: Context, slot: Int): SubscriptionInfo? { @@ -102,10 +98,7 @@ object SimHelper { if (list != null) { for (info in list) { if (slot == info.simSlotIndex) { - Log.i( - this@SimHelper.javaClass.name, - "SlotIndex : " + info.simSlotIndex + " displayName : " + info.displayName - ) + Log.i(TAG, "SlotIndex : " + info.simSlotIndex + " displayName : " + info.displayName) return info } } @@ -113,49 +106,33 @@ object SimHelper { return null } - private var isNetOK = false - private var counter = 0 - - fun setNetStatus(status: Boolean) { - LogUtils.w("setNetStatus before=$isNetOK now =$status") - tryNoifyUser(status) - isNetOK = status - // UI刷新要慢 - if (counter % 6 == 0) { - counter = 0 - val netSpeed = getNetSpeed() - callbacks.forEach { - it.onEnable(status) - mSimState = if (status) { - TelephonyManager.SIM_STATE_READY - } else { - -1 - } - it.onLevel(netSpeed) - mRssi = netSpeed - } - } - counter++ - } - - /** - * 尝试通知用户 - * @param status - */ - private fun tryNoifyUser(status: Boolean) { - if (isNetOK == status) { - // 状态无变化 - return - } - val str = if (isNetOK && !status) "网络链接断开!" else "网络已连接!" - GlobalScope.launch(Dispatchers.Main) { - CommonApplication.getContext()?.showToast(str) - } - } + // 4G模块开发去除方法 +// private var isNetOK = false +// private var counter = 0 +// +// fun setNetStatus(from : String, status: Boolean) { +// LogUtils.w("setNetStatus before=$isNetOK now =$status") +// tryNoifyUser(status) +// isNetOK = status +// // UI刷新要慢 +// if (counter % 6 == 0) { +// counter = 0 +// val netSpeed = getNetSpeed() +// callbacks.forEach { +// logListener?.log("setNetStatus : onEnable : $status from : $from") +// it.onEnable(status) +// mSimState = if (status) { +// TelephonyManager.SIM_STATE_READY +// } else { +// -1 +// } +// it.onLevel(netSpeed) +// mRssi = netSpeed +// } +// } +// counter++ +// } - fun isNetOk(): Boolean { - return isNetOK - } private var lastTime = 0L private var lastTxBytes = 0L @@ -182,11 +159,23 @@ object SimHelper { return ret } - fun onWifiSwitch(open: Boolean) { - if (!open){ - setNetStatus(false) - }else{ - // TODO - } + /** + * 2024年6月26日之前,无4G模块时,sim状态无法实现,所以跟随wifi状态, + * 4G模块上线后,需要单独监听sim状态,本方法失效 + * **/ +// fun onWifiSwitch(open: Boolean) { +// if (!open){ +// setNetStatus("wifi switch", false) +// }else{ +// // TODO +// } +// } + + fun is4GAvailable() : Boolean{ + logListener?.log("4G state = $mSimState , enable = ${mSimState == TelephonyManager.SIM_STATE_READY} , mRssi = $mRssi") + return mSimState == TelephonyManager.SIM_STATE_READY && mRssi > 0 } -} \ 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 index aa3b9a0..23ae037 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/WifiHelper.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/WifiHelper.kt @@ -10,12 +10,17 @@ import android.net.NetworkInfo import android.net.wifi.WifiManager import android.util.Log import com.common.commonlib.CommonApplication +import com.yinuo.safetywatcher.watcher.interfaces.NetworkStateCallback +import com.yinuo.safetywatcher.watcher.log.LogPrintListener object WifiHelper { - private var callbacks = mutableListOf() + private var callbacks = mutableListOf() private var mWifiState = -1; private var mRssi = -1; + private val TAG = javaClass.simpleName + + var logListener : LogPrintListener? = null private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { @@ -25,13 +30,16 @@ object WifiHelper { callbacks.forEach { it.onEnable(mWifiState == WifiManager.WIFI_STATE_ENABLED) } - SimHelper.onWifiSwitch(mWifiState == WifiManager.WIFI_STATE_ENABLED) + // 通知网络发生变化,可能需要提示用户 + NetworkHelper.notifyNetworkChange() } else if (intent?.action.equals(WifiManager.RSSI_CHANGED_ACTION)) { val rssi = intent?.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -1) mRssi = WifiManager.calculateSignalLevel(rssi!!, 5) callbacks.forEach { it.onLevel(mRssi) } + // 通知网络发生变化,可能需要提示用户 + NetworkHelper.notifyNetworkChange() } else if (intent?.action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { val networkInfo = intent?.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO) as NetworkInfo? @@ -46,14 +54,12 @@ object WifiHelper { callbacks.forEach { it.onEnable(mWifiState == WifiManager.WIFI_STATE_ENABLED) } - SimHelper.onWifiSwitch(mWifiState == WifiManager.WIFI_STATE_ENABLED) + // 通知网络发生变化,可能需要提示用户 + NetworkHelper.notifyNetworkChange() } } } - Log.i( - this@WifiHelper.javaClass.name, - "onReceive action = ${intent?.action}, wifiState = $mWifiState, mRssi = $mRssi" - ) + Log.i(TAG, "onReceive action = ${intent?.action}, wifiState = $mWifiState, mRssi = $mRssi") } } @@ -74,7 +80,7 @@ object WifiHelper { context.registerReceiver(receiver, filter) } - fun addCallBack(callBack: OnWifiLevelCallback) { + fun addCallBack(callBack: NetworkStateCallback) { callbacks.add(callBack) if (mWifiState != -1) { callBack.onEnable(mWifiState == WifiManager.WIFI_STATE_ENABLED) @@ -84,7 +90,7 @@ object WifiHelper { } } - fun removeCallback(callBack: OnWifiLevelCallback) { + fun removeCallback(callBack: NetworkStateCallback) { callbacks.remove(callBack) } @@ -93,14 +99,17 @@ object WifiHelper { context.unregisterReceiver(receiver) } - interface OnWifiLevelCallback { - fun onEnable(enable: Boolean) - fun onLevel(level: Int) - } - fun getConnectedWifiSSID(): String? { val wifiManager = CommonApplication.getContext()?.getSystemService(WIFI_SERVICE) as WifiManager? return wifiManager?.connectionInfo?.ssid } + + /** + * wifi是否可用 + * **/ + fun isWifiAvailable() : Boolean{ + logListener?.log("wifi state = $mWifiState , enable = ${mWifiState == WifiManager.WIFI_STATE_ENABLED} , mRssi = $mRssi") + return mWifiState == WifiManager.WIFI_STATE_ENABLED && mRssi > 0 + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_base.xml b/app/src/main/res/layout/activity_base.xml index 37deb6a..f1e4d37 100644 --- a/app/src/main/res/layout/activity_base.xml +++ b/app/src/main/res/layout/activity_base.xml @@ -89,4 +89,49 @@ android:textColor="@color/white" android:textSize="@dimen/_36dp" /> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_topbar.xml b/app/src/main/res/layout/layout_topbar.xml index 39a5427..642d393 100644 --- a/app/src/main/res/layout/layout_topbar.xml +++ b/app/src/main/res/layout/layout_topbar.xml @@ -47,8 +47,8 @@ @@ -89,8 +89,7 @@ android:layout_width="@dimen/_33dp" android:layout_height="@dimen/_33dp" android:layout_marginStart="@dimen/_40dp" - android:src="@drawable/net" - android:visibility="gone"/> + android:src="@drawable/net"/>