desc:软件层面添加传感器通道开关

main
xiaowusky 1 year ago
parent 45fdacbb43
commit 841f27e6de

@ -32,7 +32,7 @@ import com.yinuo.safetywatcher.watcher.utils.trySetCommonBg
abstract class BaseActivity : AppCompatActivity() { abstract class BaseActivity : AppCompatActivity() {
private val baseBinding: ActivityBaseBinding by lazy { val baseBinding: ActivityBaseBinding by lazy {
ActivityBaseBinding.inflate(layoutInflater) ActivityBaseBinding.inflate(layoutInflater)
} }

@ -14,8 +14,17 @@ object GasPortUtils {
private const val READ_MSG_INTERVAL = 180L private const val READ_MSG_INTERVAL = 180L
private var mInitFlag = false private var mInitFlag = false
private var readGasMsgThread: Thread? = null; private var readGasMsgThread: Thread? = null;
private var toDoCmdList: ArrayList<ByteArray> = ArrayList<ByteArray>() private var toDoCmdList: ArrayList<ByteArray> = ArrayList()
private val listeners: ArrayList<(ByteArray) -> Unit> = ArrayList<(ByteArray) -> Unit>() private val listeners: ArrayList<(ByteArray) -> Unit> = ArrayList()
private val switchStatus = booleanArrayOf(true, true, true, true, true)
fun setSwitch(index: Int, status: Boolean) {
switchStatus[index] = status
}
fun isSwitchOpen(index: Int): Boolean {
return switchStatus[index]
}
fun addListener(listener: (ByteArray) -> Unit) { fun addListener(listener: (ByteArray) -> Unit) {
listeners.add(listener) listeners.add(listener)
@ -61,16 +70,26 @@ object GasPortUtils {
gasTypeDao.deleteAll() gasTypeDao.deleteAll()
while (true) { while (true) {
// 延时一段时间后,发送指令读取气体数据 // 延时一段时间后,发送指令读取气体数据
Thread.sleep(READ_MSG_INTERVAL) if (isSwitchOpen(0)) {
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_1) Thread.sleep(READ_MSG_INTERVAL)
Thread.sleep(READ_MSG_INTERVAL) ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_1)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_2) }
Thread.sleep(READ_MSG_INTERVAL) if (isSwitchOpen(1)) {
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_3) Thread.sleep(READ_MSG_INTERVAL)
Thread.sleep(READ_MSG_INTERVAL) ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_2)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_4) }
Thread.sleep(READ_MSG_INTERVAL) if (isSwitchOpen(2)) {
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_5) Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_3)
}
if (isSwitchOpen(3)) {
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_4)
}
if (isSwitchOpen(4)) {
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_5)
}
if (toDoCmdList.isNotEmpty()) { if (toDoCmdList.isNotEmpty()) {
toDoCmdList.forEach { toDoCmdList.forEach {
Thread.sleep(READ_MSG_INTERVAL) Thread.sleep(READ_MSG_INTERVAL)

@ -26,7 +26,7 @@ import kotlin.math.pow
object ParseHelper { object ParseHelper {
private val mPortRunnable = hashMapOf<Int, FlagRunnable>() private val mPortRunnable = hashMapOf<Int, FlagRunnable?>()
private val mHandler = Handler(Looper.getMainLooper()) private val mHandler = Handler(Looper.getMainLooper())
private val tempGasData = mutableListOf<GasReqBean>() private val tempGasData = mutableListOf<GasReqBean>()
private val devicesApi by lazy { private val devicesApi by lazy {
@ -294,13 +294,22 @@ object ParseHelper {
var flagRunnable = mPortRunnable[index] var flagRunnable = mPortRunnable[index]
if (flagRunnable != null) { if (flagRunnable != null) {
mHandler.removeCallbacks(flagRunnable) mHandler.removeCallbacks(flagRunnable)
} else {
flagRunnable = FlagRunnable(type, index)
mPortRunnable[index] = flagRunnable
} }
flagRunnable = FlagRunnable(type, index)
mPortRunnable[index] = flagRunnable
// 如果一段时间内没有收到消息,认为连接断开 // 如果一段时间内没有收到消息,认为连接断开
mHandler.postDelayed(flagRunnable, GasPortUtils.CHECK_TIME) mHandler.postDelayed(flagRunnable, GasPortUtils.CHECK_TIME)
} }
fun removeOutLineRunnable(index: Int) {
var flagRunnable = mPortRunnable[index]
if (flagRunnable != null) {
mHandler.removeCallbacks(flagRunnable)
mPortRunnable[index] = null
}
}
/** /**
* 离线检查 * 离线检查
*/ */

@ -166,19 +166,23 @@ class HomeActivity : NoOptionsActivity() {
*/ */
private fun changeViewStatus() { private fun changeViewStatus() {
lifecycleScope.launch(Dispatchers.Main) { lifecycleScope.launch(Dispatchers.Main) {
//mHasSensorData = true lifecycleScope.launchWhenResumed {
mBinding.errorView.visibility = //mHasSensorData = true
if (!AppData.hasCameraData()) View.VISIBLE else View.GONE mBinding.errorView.visibility =
if (!AppData.hasCameraData()) View.VISIBLE else View.GONE
// val errorRes = // val errorRes =
// if (!AppData.hasCameraData() && !AppData.hasSensorData()) R.drawable.ic_nosingal else R.drawable.ic_icon // if (!AppData.hasCameraData() && !AppData.hasSensorData()) R.drawable.ic_nosingal else R.drawable.ic_icon
val errorRes = R.drawable.ic_icon val errorRes = R.drawable.ic_icon
mBinding.errorView.setImageResource(errorRes) mBinding.errorView.setImageResource(errorRes)
}
} }
} }
private fun showTipView() { private fun showTipView() {
lifecycleScope.launch(Dispatchers.Main) { lifecycleScope.launch(Dispatchers.Main) {
mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap()) lifecycleScope.launchWhenResumed {
mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap())
}
} }
} }
@ -206,6 +210,7 @@ class HomeActivity : NoOptionsActivity() {
private val warnMap = hashMapOf<String, Warning?>() private val warnMap = hashMapOf<String, Warning?>()
// 设置传感器 // 设置传感器
private fun setForSensor() { private fun setForSensor() {
TxtOverlay.setTipChangeListener { TxtOverlay.setTipChangeListener {
@ -238,11 +243,13 @@ class HomeActivity : NoOptionsActivity() {
} }
} }
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
if (builder.toString().isNotEmpty()) { lifecycleScope.launchWhenResumed {
mBinding.tvWarn.text = builder.toString() if (builder.toString().isNotEmpty()) {
mBinding.tvWarn.visibility = View.VISIBLE mBinding.tvWarn.text = builder.toString()
} else { mBinding.tvWarn.visibility = View.VISIBLE
mBinding.tvWarn.visibility = View.GONE } else {
mBinding.tvWarn.visibility = View.GONE
}
} }
} }
} }

@ -11,6 +11,8 @@ import com.yinuo.safetywatcher.R
import com.yinuo.safetywatcher.databinding.ActivitySensorSettingBinding import com.yinuo.safetywatcher.databinding.ActivitySensorSettingBinding
import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity
import com.yinuo.safetywatcher.watcher.port.GasCache import com.yinuo.safetywatcher.watcher.port.GasCache
import com.yinuo.safetywatcher.watcher.port.GasPortUtils
import com.yinuo.safetywatcher.watcher.port.ParseHelper
import com.yinuo.safetywatcher.watcher.port.UNIT_MGM3 import com.yinuo.safetywatcher.watcher.port.UNIT_MGM3
import com.yinuo.safetywatcher.watcher.port.UNIT_PPM import com.yinuo.safetywatcher.watcher.port.UNIT_PPM
import com.yinuo.safetywatcher.watcher.port.cmd.CH4_H2 import com.yinuo.safetywatcher.watcher.port.cmd.CH4_H2
@ -88,6 +90,30 @@ class SensorSettingActivity : NoOptionsActivity() {
// 设置各种监听 // 设置各种监听
setListener() setListener()
val switchOpen = GasPortUtils.isSwitchOpen(sensorIndex)
switchOp(switchOpen)
mBinding.sensorSwitch.isChecked = switchOpen
mBinding.areaSwitch.setOnClickListener {
mBinding.sensorSwitch.performClick()
}
// 开关
mBinding.sensorSwitch.setOnCheckedChangeListener { _, isChecked ->
switchOp(isChecked)
}
}
private fun switchOp(isChecked: Boolean) {
if (isChecked) {
mBinding.tvStatus.text = getString(R.string.sensor_status_on)
mBinding.layoutOp.visibility = View.VISIBLE
GasPortUtils.setSwitch(sensorIndex, true)
} else {
mBinding.tvStatus.text = getString(R.string.sensor_status_off)
mBinding.layoutOp.visibility = View.GONE
GasPortUtils.setSwitch(sensorIndex, false)
ParseHelper.removeOutLineRunnable(sensorIndex)
}
} }
private fun setListener() { private fun setListener() {
@ -103,13 +129,24 @@ class SensorSettingActivity : NoOptionsActivity() {
startActivity(intent) startActivity(intent)
} }
baseBinding.topBar.getBackArea()?.setOnKeyListener { v, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
if (event.action == KeyEvent.ACTION_DOWN) {
mBinding.areaSwitch.requestFocus()
return@setOnKeyListener true
}
}
return@setOnKeyListener false
}
/** /**
* 昵称edittext按键设置 * 昵称edittext按键设置
*/ */
mBinding.etName.setOnKeyListener { _, keyCode, event -> mBinding.etName.setOnKeyListener { _, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
if (event.action == KeyEvent.ACTION_DOWN) { if (event.action == KeyEvent.ACTION_DOWN) {
tryFocusBackArea() // tryFocusBackArea()
mBinding.areaSwitch.requestFocus()
return@setOnKeyListener true return@setOnKeyListener true
} }
} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {

@ -176,4 +176,8 @@ class CommonTopBar : LinearLayout {
fun tryFocusBackArea() { fun tryFocusBackArea() {
mBinding?.backArea?.requestFocus() mBinding?.backArea?.requestFocus()
} }
fun getBackArea(): View? {
return mBinding?.backArea
}
} }

@ -4,180 +4,213 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:paddingStart="@dimen/_121dp" android:paddingStart="@dimen/_121dp"
android:paddingTop="@dimen/_61dp"> android:paddingTop="@dimen/_40dp">
<EditText
android:id="@+id/et_name"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:textSize="@dimen/_30dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:hint="@string/sensor_name_txt"
android:singleLine="true"
android:paddingStart="@dimen/_30dp"
android:focusable="true"
android:nextFocusDown="@id/et_name"
android:background="@drawable/cloud_sync_btn_bg"/>
<EditText <LinearLayout
android:id="@+id/et_gas_name" android:id="@+id/area_switch"
android:layout_width="@dimen/_600dp" android:layout_width="match_parent"
android:layout_height="@dimen/_100dp" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp"
android:textSize="@dimen/_30dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:hint="@string/gas_name_txt"
android:singleLine="true"
android:paddingStart="@dimen/_30dp"
android:focusable="true" android:focusable="true"
android:nextFocusDown="@id/et_gas_name"
android:background="@drawable/cloud_sync_btn_bg"/>
<TextView
android:id="@+id/et_step"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:textSize="@dimen/_30dp"
android:gravity="center_vertical" android:gravity="center_vertical"
android:textColor="@color/white" android:layout_marginEnd="@dimen/_61dp"
android:textColorHint="@color/white" android:paddingEnd="@dimen/_61dp">
android:hint="@string/sensor_step_txt"
android:paddingStart="@dimen/_30dp"
android:background="@drawable/cloud_sync_btn_bg"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_6dp"
android:layout_marginTop="@dimen/_40dp"
android:text="@string/gas_unit"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
<androidx.appcompat.widget.AppCompatRadioButton <TextView
android:id="@+id/rb_vol" android:id="@+id/tv_status"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp" android:layout_marginVertical="20dp"
android:layout_marginStart="@dimen/_20dp" android:layout_weight="1"
android:paddingHorizontal="@dimen/_6dp" android:textColor="@color/white"
android:checked="true" android:textSize="@dimen/_36dp" />
android:focusable="true"
android:text="@string/unit_vol"
android:textColor="@color/white"
android:textSize="@dimen/_28dp" />
<androidx.appcompat.widget.AppCompatRadioButton <Switch
android:id="@+id/rb_lel" android:id="@+id/sensor_switch"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp" android:layout_margin="10dp" />
android:layout_marginStart="@dimen/_20dp" </LinearLayout>
android:paddingHorizontal="@dimen/_6dp"
android:checked="true"
android:focusable="true"
android:text="@string/unit_lel"
android:textColor="@color/white"
android:textSize="@dimen/_28dp" />
<RadioGroup <LinearLayout
android:id="@+id/rg_unit" android:id="@+id/layout_op"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp" android:layout_marginTop="@dimen/_40dp"
android:layout_marginStart="@dimen/_20dp" android:orientation="vertical">
android:orientation="horizontal">
<EditText
android:id="@+id/et_name"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:background="@drawable/cloud_sync_btn_bg"
android:focusable="true"
android:hint="@string/sensor_name_txt"
android:nextFocusDown="@id/et_name"
android:paddingStart="@dimen/_30dp"
android:singleLine="true"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textSize="@dimen/_30dp" />
<EditText
android:id="@+id/et_gas_name"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:background="@drawable/cloud_sync_btn_bg"
android:focusable="true"
android:hint="@string/gas_name_txt"
android:nextFocusDown="@id/et_gas_name"
android:paddingStart="@dimen/_30dp"
android:singleLine="true"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textSize="@dimen/_30dp" />
<TextView
android:id="@+id/et_step"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:background="@drawable/cloud_sync_btn_bg"
android:gravity="center_vertical"
android:hint="@string/sensor_step_txt"
android:paddingStart="@dimen/_30dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textSize="@dimen/_30dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_6dp"
android:layout_marginTop="@dimen/_40dp"
android:text="@string/gas_unit"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
<androidx.appcompat.widget.AppCompatRadioButton <androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_ppm" android:id="@+id/rb_vol"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/_6dp" android:layout_marginStart="@dimen/_20dp"
android:layout_marginTop="@dimen/_40dp"
android:checked="true"
android:focusable="true" android:focusable="true"
android:text="@string/unit_ppm" android:paddingHorizontal="@dimen/_6dp"
android:text="@string/unit_vol"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="@dimen/_28dp" /> android:textSize="@dimen/_28dp" />
<androidx.appcompat.widget.AppCompatRadioButton <androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_mgm3" android:id="@+id/rb_lel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/_6dp" android:layout_marginStart="@dimen/_20dp"
android:layout_marginTop="@dimen/_40dp"
android:checked="true"
android:focusable="true" android:focusable="true"
android:text="@string/unit_mg_m3" android:paddingHorizontal="@dimen/_6dp"
android:text="@string/unit_lel"
android:textColor="@color/white" android:textColor="@color/white"
android:layout_marginStart="@dimen/_40dp"
android:textSize="@dimen/_28dp" /> android:textSize="@dimen/_28dp" />
</RadioGroup>
<!--<RelativeLayout
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:gravity="center"
android:background="@drawable/cloud_sync_btn_bg">
<EditText <RadioGroup
android:id="@+id/et_type" android:id="@+id/rg_unit"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:textSize="@dimen/_30dp" android:layout_marginStart="@dimen/_20dp"
android:textColor="@color/white" android:layout_marginTop="@dimen/_40dp"
android:textColorHint="@color/white" android:orientation="horizontal">
android:paddingStart="@dimen/_30dp"
android:hint="@string/sensor_type_txt" <androidx.appcompat.widget.AppCompatRadioButton
android:background="#00000000"/> android:id="@+id/rb_ppm"
android:layout_width="wrap_content"
<ImageView android:layout_height="wrap_content"
android:layout_width="@dimen/_31dp" android:focusable="true"
android:layout_height="@dimen/_17dp" android:paddingHorizontal="@dimen/_6dp"
android:src="@mipmap/ic_arrow_down" android:text="@string/unit_ppm"
android:layout_centerVertical="true" android:textColor="@color/white"
android:layout_alignParentEnd="true" android:textSize="@dimen/_28dp" />
android:layout_marginEnd="@dimen/_30dp"/>
</RelativeLayout>--> <androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_mgm3"
<TextView android:layout_width="wrap_content"
android:id="@+id/tv_warn_setting" android:layout_height="wrap_content"
android:layout_width="@dimen/_380dp" android:layout_marginStart="@dimen/_40dp"
android:layout_height="@dimen/_80dp" android:focusable="true"
android:layout_marginTop="@dimen/_40dp" android:paddingHorizontal="@dimen/_6dp"
android:textColor="@color/white" android:text="@string/unit_mg_m3"
android:gravity="center" android:textColor="@color/white"
android:textSize="@dimen/_30dp" android:textSize="@dimen/_28dp" />
android:text="@string/sensor_warn_setting_txt" </RadioGroup>
android:focusable="true"
android:background="@drawable/warn_setting_btn_bg"/> <!--<RelativeLayout
android:layout_width="@dimen/_600dp"
<LinearLayout android:layout_height="@dimen/_100dp"
android:layout_width="wrap_content" android:layout_marginTop="@dimen/_40dp"
android:layout_height="wrap_content" android:gravity="center"
android:layout_marginTop="@dimen/_40dp"> android:background="@drawable/cloud_sync_btn_bg">
<EditText
android:id="@+id/et_type"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="@dimen/_30dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:paddingStart="@dimen/_30dp"
android:hint="@string/sensor_type_txt"
android:background="#00000000"/>
<ImageView
android:layout_width="@dimen/_31dp"
android:layout_height="@dimen/_17dp"
android:src="@mipmap/ic_arrow_down"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/_30dp"/>
</RelativeLayout>-->
<TextView <TextView
android:id="@+id/tv_save" android:id="@+id/tv_warn_setting"
android:layout_width="@dimen/_380dp" android:layout_width="@dimen/_380dp"
android:layout_height="@dimen/_80dp" android:layout_height="@dimen/_80dp"
android:textColor="@color/white" android:layout_marginTop="@dimen/_40dp"
android:gravity="center" android:background="@drawable/warn_setting_btn_bg"
android:text="@string/save"
android:focusable="true" android:focusable="true"
android:textSize="@dimen/_30dp"
android:background="@drawable/save_btn_bg"/>
<TextView
android:id="@+id/tv_sensor_init"
android:layout_width="@dimen/_260dp"
android:layout_height="@dimen/_80dp"
android:layout_marginStart="@dimen/_38dp"
android:textColor="@color/white"
android:gravity="center" android:gravity="center"
android:textSize="@dimen/_30dp" android:text="@string/sensor_warn_setting_txt"
android:focusable="true" android:textColor="@color/white"
android:text="@string/sensor_init_txt" android:textSize="@dimen/_30dp" />
android:background="@drawable/sensor_init_btn_bg"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp">
<TextView
android:id="@+id/tv_save"
android:layout_width="@dimen/_380dp"
android:layout_height="@dimen/_80dp"
android:background="@drawable/save_btn_bg"
android:focusable="true"
android:gravity="center"
android:text="@string/save"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
<TextView
android:id="@+id/tv_sensor_init"
android:layout_width="@dimen/_260dp"
android:layout_height="@dimen/_80dp"
android:layout_marginStart="@dimen/_38dp"
android:background="@drawable/sensor_init_btn_bg"
android:focusable="true"
android:gravity="center"
android:text="@string/sensor_init_txt"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

@ -87,4 +87,7 @@
<string name="calibration_success_txt">校准传感器成功</string> <string name="calibration_success_txt">校准传感器成功</string>
<string name="calibration_fail_txt">校准传感器失败</string> <string name="calibration_fail_txt">校准传感器失败</string>
<string name="calibration_outtime_txt">校准传感器失败, 传感器未响应!</string> <string name="calibration_outtime_txt">校准传感器失败, 传感器未响应!</string>
<string name="sensor_status_on">通道开启</string>
<string name="sensor_status_off">通道关闭</string>
</resources> </resources>

Loading…
Cancel
Save