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"/>