[author] yjj

[desc]安全检测仪4G模块调试
1、接触wifiHelper和SimHelper之间的耦合关联
2、新增NetWorkHelper,统一管理wifi和4G网络相关
3、修改http请求服务器ip地址
4、增加用于测试的log显示view
5、4G流量使用情况参数修改未mobile
main
YJJ 10 months ago
parent 2e5b1c5676
commit c58d15f777

@ -11,6 +11,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 修改系统屏幕亮度 -->
<uses-permission
android:name="android.permission.WRITE_SETTINGS"

@ -1,6 +1,7 @@
package com.yinuo.safetywatcher.watcher.base
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.AttributeSet
import android.view.KeyEvent
@ -18,12 +19,14 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatRadioButton
import androidx.lifecycle.lifecycleScope
import com.common.commonlib.utils.DateUtils
import com.common.commonlib.utils.LogUtils
import com.common.commonlib.utils.MMKVUtils
import com.loper7.date_time_picker.number_picker.NumberPicker
import com.yinuo.safetywatcher.R
import com.yinuo.safetywatcher.databinding.ActivityBaseBinding
import com.yinuo.safetywatcher.watcher.constant.NAMESPACE_ANDROID
import com.yinuo.safetywatcher.watcher.log.LogPrintListener
import com.yinuo.safetywatcher.watcher.net.DevicesApi
import com.yinuo.safetywatcher.watcher.ui.view.CommonDialog
import com.yinuo.safetywatcher.watcher.ui.view.CommonTopBar
@ -53,10 +56,27 @@ abstract class BaseActivity : AppCompatActivity() {
var lastFocusView: View? = null
var showLog = false
override fun onCreate(savedInstanceState: Bundle?) {
setViewFactory()
super.onCreate(null)
setContentView(baseBinding.root)
// 测试按钮
baseBinding.tvShowLog.setOnClickListener{
showLog = !showLog
baseBinding.scrollview.visibility = if (showLog) View.VISIBLE else View.GONE
}
baseBinding.tvExit.setOnClickListener{
val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_HOME)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivityForResult(intent, 1111)
// finish()
}
initSound()
setChildContent()
initView()
@ -116,7 +136,14 @@ abstract class BaseActivity : AppCompatActivity() {
}
}
public val baseLogListener = object : LogPrintListener {
override fun log(msg: String?) {
printLog(msg)
}
}
private fun setTopBar() {
baseBinding.topBar.logListener = baseLogListener
val title = getTopBarTitle()
title?.let {
baseBinding.topBar.setTitle(it)
@ -334,4 +361,10 @@ abstract class BaseActivity : AppCompatActivity() {
baseBinding.root.removeCallbacks(hideVoiceAreaRunnable)
baseBinding.root.postDelayed(hideVoiceAreaRunnable, delayTime)
}
public fun printLog(msg : String?){
runOnUiThread {
baseBinding.tvLog.text = StringBuilder().append(DateUtils.getNowTimeFormat(DateUtils.DATE_TO_STRING_DETAIL_PATTERN)).append(" ").append(msg).append("\n").append(baseBinding.tvLog.text)
}
}
}

@ -0,0 +1,8 @@
package com.yinuo.safetywatcher.watcher.interfaces
interface NetworkStateCallback {
fun onEnable(enable: Boolean)
fun onLevel(level: Int)
}

@ -0,0 +1,5 @@
package com.yinuo.safetywatcher.watcher.log
interface LogPrintListener {
fun log(msg: String?)
}

@ -11,7 +11,7 @@ import com.yinuo.safetywatcher.watcher.bean.LastTimeResponse
import com.yinuo.safetywatcher.watcher.bean.SosSnReq
import com.yinuo.safetywatcher.watcher.bean.TrafficReqInfo
import com.yinuo.safetywatcher.watcher.utils.LztekUtil
import com.yinuo.safetywatcher.watcher.utils.SimHelper
import com.yinuo.safetywatcher.watcher.utils.NetworkHelper
import io.reactivex.rxjava3.core.Observable
import retrofit2.http.Body
import retrofit2.http.GET
@ -31,13 +31,11 @@ class DevicesApi : BaseObserve<DevicesApi.Api>(Api::class.java) {
observe(api.heartBeat(sosReq), object : RequestNoResultCallBack<BaseResponse>() {
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<DevicesApi.Api>(Api::class.java) {
}
fun getPushUrl(sn: String, callBack: RequestResultCallBack<GetRtspUrlResponse>) {
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<DevicesApi.Api>(Api::class.java) {
suspend fun uploadGasData(
gasList: List<GasReqBean> = 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<DevicesApi.Api>(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<DevicesApi.Api>(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<DevicesApi.Api>(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)

@ -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)
}
}

@ -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
}

@ -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())
}

@ -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"
}

@ -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;
}
}

@ -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)
}
}

@ -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) {

@ -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<OnSimLevelCallback>()
private var mSimState = -1;
private var mRssi = -1;
private var callbacks = mutableListOf<NetworkStateCallback>()
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
}
}
}

@ -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<OnWifiLevelCallback>()
private var callbacks = mutableListOf<NetworkStateCallback>()
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
}
}

@ -89,4 +89,49 @@
android:textColor="@color/white"
android:textSize="@dimen/_36dp" />
</RelativeLayout>
<!--测试用-->
<ScrollView
android:layout_width="@dimen/_1080dp"
android:layout_height="match_parent"
android:id="@+id/scrollview"
android:visibility="gone"
android:layout_marginTop="@dimen/_120dp"
android:background="#80000000">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_log"
android:textColor="@color/white"
android:background="#00000000"/>
</ScrollView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="showLog"
android:id="@+id/tv_showLog"
android:padding="@dimen/_20dp"
android:background="@color/red"
android:visibility="gone"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="exit"
android:id="@+id/tv_exit"
android:layout_marginBottom="@dimen/_20dp"
android:padding="@dimen/_20dp"
android:visibility="gone"
android:layout_above="@id/tv_showLog"
android:background="@color/red"
android:layout_alignParentEnd="true"/>
</RelativeLayout>

@ -47,8 +47,8 @@
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format12Hour="HH.mm"
android:format24Hour="HH.mm"
android:format12Hour="HH:mm"
android:format24Hour="HH:mm"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
@ -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"/>
<Space
android:layout_width="@dimen/_36dp"

@ -14,7 +14,7 @@ project.ext {
compileSdkVersion : 33,
buildToolsVersion : "33.0.3",
minSdkVersion : 28,
targetSdkVersion : 28,
targetSdkVersion : 29,
versionCode : 1,
versionName : "1.0",
jvmTarget : "1.8",

@ -1,2 +1,3 @@
host=http://192.168.1.102:8080
host=http://121.41.168.18:8080
#host=http://192.168.1.102:8080
#host=http://192.168.51.123:8080

@ -78,7 +78,7 @@ object RequestManager {
.client(builder.build())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://139.196.199.45:8080")
.baseUrl("http://121.41.168.18:8080")
.build()
}

Loading…
Cancel
Save