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

main
xiaowusky 2 years ago
parent aa3a9f5c18
commit 2880db4d61

@ -75,6 +75,11 @@ abstract class BaseActivity : AppCompatActivity() {
loadingDialog!!.show(supportFragmentManager, "loading")
}
fun isLoadingShowing(): Boolean {
val fragment = supportFragmentManager.findFragmentByTag("loading")
return fragment?.isVisible ?: false
}
fun closeLoadingDialog() {
loadingDialog?.dismiss()
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_SENSOR = 5
const val NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android"
// 云同步时20条数据一上传

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

@ -5,20 +5,26 @@ import android.os.Build
import android.os.Process
import android.view.View
import androidx.annotation.RequiresApi
import androidx.lifecycle.lifecycleScope
import com.common.commonlib.utils.NetworkHelper
import com.yinuo.library.vlc.IFrameCallBack
import com.yinuo.library.vlc.RtspSurfaceRender2
import com.yinuo.library.vlc.TxtOverlay
import com.yinuo.library.vlc.utils.LogUtils
import com.yinuo.safetywatcher.R
import com.yinuo.safetywatcher.databinding.ActivityHomeBinding
import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity
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_SENSOR
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.utils.BatteryHelper
import com.yinuo.safetywatcher.watcher.utils.SimHelper
import com.yinuo.safetywatcher.watcher.utils.WifiHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class HomeActivity : NoOptionsActivity() {
@ -28,6 +34,9 @@ class HomeActivity : NoOptionsActivity() {
private var mRender: RtspSurfaceRender2? = null
private var mHasCameraData = false
private var mHasSensorData = false
override val isHome: Boolean
get() = true
@ -44,6 +53,7 @@ class HomeActivity : NoOptionsActivity() {
initTopbarHelper()
HeartbeatService.actionStart(this@HomeActivity)
setForCamera()
setForSensor()
mBinding.apply {
itemSetting.setOnClickListener {
startActivity(Intent(this@HomeActivity, SettingActivity::class.java))
@ -70,36 +80,101 @@ class HomeActivity : NoOptionsActivity() {
}
}
/**
* 设置摄像头
*/
private fun setForCamera() {
mRender = RtspSurfaceRender2(mBinding.surface)
mRender?.setRtspUrl(CAMERA_URL)
mRender?.setFrameCallBack(object : IFrameCallBack {
override fun onFrame() {
mHasCameraData = true
changeViewStatus()
closeLoadingDialog()
watchCamera(DELAY_TIME_CHECK_CAMERA)
}
})
// 第一次很慢所以10秒
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 {
LogUtils.w("reStartCamera Runnable start")
mHasCameraData = false
changeViewStatus()
if (NetworkHelper.isNetworkConnect(this@HomeActivity)) {
LogUtils.w("reStartCamera Runnable start")
showLoadingDialog(R.string.connecting_camera, false)
if (!isLoadingShowing() && !mHasSensorData) {
showLoadingDialog(R.string.connecting_camera)
}
mRender?.reStart()
watchCamera(DELAY_TIME_OPEN_CAMERA)
}else{
} else {
watchCamera(DELAY_TIME_CHECK_CAMERA)
}
}
/**
* 监视摄像头
*/
private fun watchCamera(time: Int) {
mBinding.root.removeCallbacks(reStartCamera)
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() {
BatteryHelper.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_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
android:id="@+id/setting_area"
android:layout_width="@dimen/_288dp"

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