desc:首页增加mHasCameraData、mHasSensorData分别判断是否有摄像头数据或传感器数据

main
xiaowusky 2 years ago
parent aa3a9f5c18
commit 2880db4d61

@ -75,6 +75,11 @@ abstract class BaseActivity : AppCompatActivity() {
loadingDialog!!.show(supportFragmentManager, "loading") loadingDialog!!.show(supportFragmentManager, "loading")
} }
fun isLoadingShowing(): Boolean {
val fragment = supportFragmentManager.findFragmentByTag("loading")
return fragment?.isVisible ?: false
}
fun closeLoadingDialog() { fun closeLoadingDialog() {
loadingDialog?.dismiss() loadingDialog?.dismiss()
loadingDialog = null loadingDialog = null

@ -18,6 +18,9 @@ const val DELAY_TIME_OPEN_CAMERA = 10
//检测重连摄像头延时 //检测重连摄像头延时
const val DELAY_TIME_CHECK_CAMERA = 5 const val DELAY_TIME_CHECK_CAMERA = 5
//检测重连传感器延时
const val DELAY_TIME_CHECK_SENSOR = 5
const val NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android" const val NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android"
// 云同步时20条数据一上传 // 云同步时20条数据一上传

@ -4,6 +4,7 @@ import android.os.Handler
import android.os.Looper import android.os.Looper
import com.common.commonlib.db.DBUtils import com.common.commonlib.db.DBUtils
import com.common.commonlib.db.entity.GasType import com.common.commonlib.db.entity.GasType
import com.yinuo.library.vlc.TxtOverlay
import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
@ -35,6 +36,9 @@ object GasUtils {
val gasUnit = it[2] val gasUnit = it[2]
val gasValue: Double = (it[4] * 256 + it[5]) / 100.00 val gasValue: Double = (it[4] * 256 + it[5]) / 100.00
setFlag(0, gasName, "/dev/tyyS0") setFlag(0, gasName, "/dev/tyyS0")
// TODO
TxtOverlay.setShowTip("")
} }
} }
} }

@ -5,20 +5,26 @@ import android.os.Build
import android.os.Process import android.os.Process
import android.view.View import android.view.View
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.lifecycle.lifecycleScope
import com.common.commonlib.utils.NetworkHelper import com.common.commonlib.utils.NetworkHelper
import com.yinuo.library.vlc.IFrameCallBack import com.yinuo.library.vlc.IFrameCallBack
import com.yinuo.library.vlc.RtspSurfaceRender2 import com.yinuo.library.vlc.RtspSurfaceRender2
import com.yinuo.library.vlc.TxtOverlay
import com.yinuo.library.vlc.utils.LogUtils import com.yinuo.library.vlc.utils.LogUtils
import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.R
import com.yinuo.safetywatcher.databinding.ActivityHomeBinding import com.yinuo.safetywatcher.databinding.ActivityHomeBinding
import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity
import com.yinuo.safetywatcher.watcher.constant.CAMERA_URL import com.yinuo.safetywatcher.watcher.constant.CAMERA_URL
import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_CHECK_CAMERA import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_CHECK_CAMERA
import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_CHECK_SENSOR
import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_OPEN_CAMERA import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_OPEN_CAMERA
import com.yinuo.safetywatcher.watcher.port.GasUtils
import com.yinuo.safetywatcher.watcher.services.HeartbeatService import com.yinuo.safetywatcher.watcher.services.HeartbeatService
import com.yinuo.safetywatcher.watcher.utils.BatteryHelper import com.yinuo.safetywatcher.watcher.utils.BatteryHelper
import com.yinuo.safetywatcher.watcher.utils.SimHelper import com.yinuo.safetywatcher.watcher.utils.SimHelper
import com.yinuo.safetywatcher.watcher.utils.WifiHelper import com.yinuo.safetywatcher.watcher.utils.WifiHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class HomeActivity : NoOptionsActivity() { class HomeActivity : NoOptionsActivity() {
@ -28,6 +34,9 @@ class HomeActivity : NoOptionsActivity() {
private var mRender: RtspSurfaceRender2? = null private var mRender: RtspSurfaceRender2? = null
private var mHasCameraData = false
private var mHasSensorData = false
override val isHome: Boolean override val isHome: Boolean
get() = true get() = true
@ -44,6 +53,7 @@ class HomeActivity : NoOptionsActivity() {
initTopbarHelper() initTopbarHelper()
HeartbeatService.actionStart(this@HomeActivity) HeartbeatService.actionStart(this@HomeActivity)
setForCamera() setForCamera()
setForSensor()
mBinding.apply { mBinding.apply {
itemSetting.setOnClickListener { itemSetting.setOnClickListener {
startActivity(Intent(this@HomeActivity, SettingActivity::class.java)) startActivity(Intent(this@HomeActivity, SettingActivity::class.java))
@ -70,24 +80,53 @@ class HomeActivity : NoOptionsActivity() {
} }
} }
/**
* 设置摄像头
*/
private fun setForCamera() { private fun setForCamera() {
mRender = RtspSurfaceRender2(mBinding.surface) mRender = RtspSurfaceRender2(mBinding.surface)
mRender?.setRtspUrl(CAMERA_URL) mRender?.setRtspUrl(CAMERA_URL)
mRender?.setFrameCallBack(object : IFrameCallBack { mRender?.setFrameCallBack(object : IFrameCallBack {
override fun onFrame() { override fun onFrame() {
mHasCameraData = true
changeViewStatus()
closeLoadingDialog() closeLoadingDialog()
watchCamera(DELAY_TIME_CHECK_CAMERA) watchCamera(DELAY_TIME_CHECK_CAMERA)
} }
}) })
// 第一次很慢所以10秒 // 第一次很慢所以10秒
watchCamera(DELAY_TIME_OPEN_CAMERA) watchCamera(DELAY_TIME_OPEN_CAMERA)
showLoadingDialog(R.string.connecting_camera, false) showLoadingDialog(R.string.connecting_camera)
}
/**
* 改变View状态
*/
private fun changeViewStatus() {
lifecycleScope.launch(Dispatchers.Main) {
//mHasSensorData = true
mBinding.errorView.visibility =
if (!mHasCameraData) View.VISIBLE else View.GONE
val errorRes = if (!mHasCameraData && !mHasSensorData) R.drawable.ic_nosingal else R.drawable.ic_icon
mBinding.errorView.setImageResource(errorRes)
// tipView
mBinding.tipView.visibility = if (!mHasCameraData && mHasSensorData) View.VISIBLE else View.GONE
mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap())
}
} }
/**
* 重启摄像头Runnable
*/
private val reStartCamera: Runnable = Runnable { private val reStartCamera: Runnable = Runnable {
if (NetworkHelper.isNetworkConnect(this@HomeActivity)) {
LogUtils.w("reStartCamera Runnable start") LogUtils.w("reStartCamera Runnable start")
showLoadingDialog(R.string.connecting_camera, false) mHasCameraData = false
changeViewStatus()
if (NetworkHelper.isNetworkConnect(this@HomeActivity)) {
if (!isLoadingShowing() && !mHasSensorData) {
showLoadingDialog(R.string.connecting_camera)
}
mRender?.reStart() mRender?.reStart()
watchCamera(DELAY_TIME_OPEN_CAMERA) watchCamera(DELAY_TIME_OPEN_CAMERA)
} else { } else {
@ -95,11 +134,47 @@ class HomeActivity : NoOptionsActivity() {
} }
} }
/**
* 监视摄像头
*/
private fun watchCamera(time: Int) { private fun watchCamera(time: Int) {
mBinding.root.removeCallbacks(reStartCamera) mBinding.root.removeCallbacks(reStartCamera)
mBinding.root.postDelayed(reStartCamera, (time * 1000).toLong()) mBinding.root.postDelayed(reStartCamera, (time * 1000).toLong())
} }
// 设置传感器
private fun setForSensor() {
TxtOverlay.setTipChangeListener {
// 有传感器数据回调
mHasSensorData = true
closeLoadingDialog()
changeViewStatus()
watchSensor(DELAY_TIME_CHECK_SENSOR)
}
watchSensor(DELAY_TIME_CHECK_SENSOR)
GasUtils.initPort()
}
/**
* 监视传感器
*/
private fun watchSensor(delayTime: Int) {
mBinding.root.removeCallbacks(watchSensorRunnable)
mBinding.root.postDelayed(watchSensorRunnable, (delayTime * 1000).toLong())
}
/**
* 监视传感器执行Runnable
*/
private val watchSensorRunnable: Runnable = Runnable {
LogUtils.w("watchSensorRunnable start")
mHasSensorData = false
changeViewStatus()
GasUtils.initPort()
watchSensor(DELAY_TIME_CHECK_SENSOR)
}
private fun initTopbarHelper() { private fun initTopbarHelper() {
BatteryHelper.init(this@HomeActivity) BatteryHelper.init(this@HomeActivity)
WifiHelper.init(this@HomeActivity) WifiHelper.init(this@HomeActivity)

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 471 B

After

Width:  |  Height:  |  Size: 471 B

Before

Width:  |  Height:  |  Size: 685 B

After

Width:  |  Height:  |  Size: 685 B

Before

Width:  |  Height:  |  Size: 502 B

After

Width:  |  Height:  |  Size: 502 B

Before

Width:  |  Height:  |  Size: 943 B

After

Width:  |  Height:  |  Size: 943 B

Before

Width:  |  Height:  |  Size: 924 B

After

Width:  |  Height:  |  Size: 924 B

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -8,6 +8,20 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
<ImageView
android:id="@+id/error_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/ic_nosingal"/>
<ImageView
android:id="@+id/tip_View"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_100dp"
android:layout_marginStart="@dimen/_100dp"/>
<LinearLayout <LinearLayout
android:id="@+id/setting_area" android:id="@+id/setting_area"
android:layout_width="@dimen/_288dp" android:layout_width="@dimen/_288dp"

@ -10,6 +10,9 @@ import java.text.SimpleDateFormat
* Created by John on 2017/2/23. * Created by John on 2017/2/23.
*/ */
object TxtOverlay { object TxtOverlay {
// 提示变化的监听
private var mTipChangeListener: (() -> Unit)? = null;
// 上一次展示的提示文字 // 上一次展示的提示文字
private var mLastShowTip = "" private var mLastShowTip = ""
@ -20,6 +23,7 @@ object TxtOverlay {
fun setShowTip(string: String) { fun setShowTip(string: String) {
mToDoShowTip = string mToDoShowTip = string
buildOverlayBitmap() buildOverlayBitmap()
mTipChangeListener?.invoke()
} }
// 上一次展示的时间 // 上一次展示的时间
@ -41,6 +45,8 @@ object TxtOverlay {
// 记录更新时间和上一次的文字 // 记录更新时间和上一次的文字
lastTipUpdateTime = currentTimeMillis lastTipUpdateTime = currentTimeMillis
mLastShowTip = mToDoShowTip mLastShowTip = mToDoShowTip
// 回收内存
bmp?.recycle()
// 文字转bitmap // 文字转bitmap
bmp = YUVUtils.generateBitmap( bmp = YUVUtils.generateBitmap(
dateFormat.format(lastTipUpdateTime) + "@" + mToDoShowTip, 40, Color.WHITE dateFormat.format(lastTipUpdateTime) + "@" + mToDoShowTip, 40, Color.WHITE
@ -54,4 +60,8 @@ object TxtOverlay {
fun getOverlayBitmap(): Bitmap? { fun getOverlayBitmap(): Bitmap? {
return bmp; return bmp;
} }
fun setTipChangeListener(onChange: () -> Unit) {
mTipChangeListener = onChange
}
} }
Loading…
Cancel
Save