1、增加网络断连监听及埋点上报
This commit is contained in:
donghongyu
2023-09-05 20:21:29 +08:00
committed by zhongchao
parent 2205fd1f2e
commit c456d4f188
4 changed files with 239 additions and 1 deletions

View File

@@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.mogo.eagle.core.function.hmi">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />

View File

@@ -0,0 +1,205 @@
package com.mogo.eagle.core.function.hmi.ui.widget
import android.content.Context
import android.graphics.Color
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.RelativeLayout
import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.NetworkUtils.OnNetworkStatusChangedListener
import com.mogo.eagle.core.utilcode.util.SpanUtils
import kotlinx.android.synthetic.main.view_connect_status.view.tvADASStatus
import kotlinx.android.synthetic.main.view_connect_status.view.tvNetStatus
/**
* 当前APP的各种连接状态展示
* 网络连接、ADAS、外网
*/
class ConnectStatusView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : RelativeLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener {
companion object {
private const val TAG = "ConnectStatusView"
}
private var onNetworkStatusChangedListener: OnNetworkStatusChangedListener
// 断开网络的次数
private var disconnectNetCount = 0
private var disconnectNetTime = 0L
// 断开ADAS的次数
private var disconnectADASCount = 0
private var disconnectADASTime = 0L
init {
LayoutInflater.from(context).inflate(R.layout.view_connect_status, this, true)
val netSpan = SpanUtils.with(tvNetStatus)
netSpan.append("网络连接:")
if (NetworkUtils.isConnected()) {
netSpan.append("已连接")
.setForegroundColor(Color.GREEN)
} else {
disconnectNetCount++
netSpan.append("已断开")
.setForegroundColor(Color.RED)
netSpan.append(" 断链次数:")
.append("$disconnectNetCount")
.setForegroundColor(Color.RED)
}
netSpan.create()
onNetworkStatusChangedListener = object : OnNetworkStatusChangedListener {
override fun onDisconnected() {
disconnectNetCount++
disconnectNetTime = System.currentTimeMillis()
val netSpan = SpanUtils.with(tvNetStatus)
netSpan.append("网络连接:")
.append("已断开")
.setForegroundColor(Color.RED)
netSpan.append(" 断链次数:")
.append("$disconnectNetCount")
.setForegroundColor(Color.RED)
netSpan.create()
//netSpan.append("断开时常").append("$disconnectNetCount").setForegroundColor(Color.RED)
// 统计代码
val properties: MutableMap<String, Any> = HashMap()
properties["连接状态"] = "已断开"
properties["重连次数"] = "$disconnectNetCount"
MogoAnalyticUtils.track("SYS_NET_STATUS", properties)
}
override fun onConnected(networkType: NetworkUtils.NetworkType?) {
// 统计代码
val properties: MutableMap<String, Any> = HashMap()
properties["连接状态"] = "已连接"
properties["重连次数"] = "$disconnectNetCount"
val netSpan = SpanUtils.with(tvNetStatus)
netSpan.append("网络连接:")
.append("已连接")
.setForegroundColor(Color.GREEN)
netSpan.append(" 断链次数:")
.append("$disconnectNetCount")
.setForegroundColor(Color.RED)
if (disconnectNetTime != 0L) {
netSpan.append(" 断开时常:")
.append("${(System.currentTimeMillis() - disconnectNetTime) / 1000} s")
.setForegroundColor(Color.RED)
properties["断开时常"] =
"${(System.currentTimeMillis() - disconnectNetTime) / 1000} s"
}
netSpan.create()
MogoAnalyticUtils.track("SYS_NET_STATUS", properties)
}
}
}
override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) {
super.onAutopilotIpcConnectStatusChanged(status, reason)
tvADASStatus.post {
when (status) {
IPC_CONNECTION_STATUS.CONNECTED -> {
// 统计代码
val properties: MutableMap<String, Any> = HashMap()
properties["连接状态"] = "已连接"
properties["重连次数"] = "$disconnectADASCount"
val adasSpan = SpanUtils.with(tvADASStatus)
adasSpan.append("ADAS连接")
.append("已连接")
.setForegroundColor(Color.GREEN)
adasSpan.append(" 重连次数:")
.append("$disconnectADASCount")
.setForegroundColor(Color.RED)
if (disconnectADASTime != 0L) {
adasSpan.append(" 断开时常:")
.append("${(System.currentTimeMillis() - disconnectADASTime) / 1000} s")
.setForegroundColor(Color.RED)
properties["断开时常"] =
"${(System.currentTimeMillis() - disconnectADASTime) / 1000} s"
}
adasSpan.create()
MogoAnalyticUtils.track("IPC_CONNECTION_STATUS", properties)
}
IPC_CONNECTION_STATUS.DISCONNECTED -> {
disconnectADASCount++
disconnectADASTime = System.currentTimeMillis()
val adasSpan = SpanUtils.with(tvADASStatus)
// 统计代码
val properties: MutableMap<String, Any> = HashMap()
properties["连接状态"] = "已连接"
properties["重连次数"] = "$disconnectADASCount"
MogoAnalyticUtils.track("IPC_CONNECTION_STATUS", properties)
adasSpan.append("ADAS连接")
.append("已断开")
.setForegroundColor(Color.RED)
adasSpan.append(" 重连次数:")
.append("$disconnectADASCount")
.setForegroundColor(Color.RED)
adasSpan.create()
}
}
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
NetworkUtils.registerNetworkStatusChangedListener(onNetworkStatusChangedListener)
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
NetworkUtils.unregisterNetworkStatusChangedListener(onNetworkStatusChangedListener)
CallerAutoPilotStatusListenerManager.removeListener(TAG)
}
interface IPC_CONNECTION_STATUS {
companion object {
/**
* 已连接
*/
const val CONNECTED = 0x00
/**
* 未连接
*/
const val DISCONNECTED = 0x01
/**
* 正在连接
*/
const val CONNECTING = 0x02
/**
* 正在搜索IP
*/
const val SEARCH_ADDRESS = 0x03
/**
* 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用
*/
const val NOT_FOUND_ADDRESS = 0x04
}
}
}

View File

@@ -37,4 +37,11 @@
android:layout_height="680dp"
android:layout_gravity="bottom" />
<com.mogo.eagle.core.function.hmi.ui.widget.ConnectStatusView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:visibility="gone" />
</FrameLayout>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@color/white"
android:padding="20dp">
<TextView
android:id="@+id/tvNetStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="网络连接获取中断链次数0断开时常0s"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvADASStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ADAS连接获取中断链次数0断开时常0s"
app:layout_constraintTop_toBottomOf="@+id/tvNetStatus" />
</com.mogo.eagle.core.widget.RoundConstraintLayout>