Browse Source

#解决紧急按钮重复呼叫问题

weizhengliang 3 years ago
parent
commit
d203e3239a

+ 36 - 8
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -16,6 +16,7 @@ import com.enation.javashop.net.engine.model.NetState
 import com.google.gson.Gson
 import com.wdkl.app.ncs.conversion_box.BuildConfig
 import com.wdkl.app.ncs.conversion_box.R
+import com.wdkl.app.ncs.conversion_box.bean.SosItem
 import com.wdkl.app.ncs.conversion_box.databinding.MainActivityLayoutBinding
 import com.wdkl.app.ncs.conversion_box.fragment.*
 import com.wdkl.app.ncs.conversion_box.helper.*
@@ -93,6 +94,8 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
     //对方设备id
     var fromId: Int = -1
 
+    private var sosList = ArrayList<SosItem>()
+
 
     override fun getLayId(): Int {
         return R.layout.main_activity_layout;
@@ -407,15 +410,34 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                     }
 
                     "C" -> {
-                        //紧急按钮: 一定时间内重复多次按无效
-                        if (System.currentTimeMillis() - clickSosTime > 10000) {
-                            startSosCall(addr)
-                            //开启门灯
-                            val doorAddr = getDoorLightAddrBySos(addr)
-                            if (!TextUtils.isEmpty(doorAddr)) {
-                                SerialPortHelper.openDoorLight(doorAddr)
+                        synchronized(Unit) {
+                            //紧急呼叫: 同一个按钮一定时间内重复多次按无效
+                            val curTime = System.currentTimeMillis()
+                            if (sosList.size > 0) {
+                                val sosItem = sosList.stream().filter { addr.equals(it.addr) }.findFirst().orElse(null)
+
+                                if (sosItem == null) {
+                                    //该按钮还没有呼叫过
+                                    //Log.e("serialport", "sosclick 111111111: " + addr)
+                                    val item = SosItem(addr, curTime)
+                                    sosList.add(item)
+                                    startSosCall(addr)
+                                } else if (curTime - sosItem.time > 10000) {
+                                    //Log.e("serialport", "sosclick 222222222: " + addr)
+                                    //该紧急按钮按下距上次已超10s,重新呼叫
+                                    sosList.remove(sosItem)
+                                    val newItem = SosItem(addr, curTime)
+                                    sosList.add(newItem)
+                                    startSosCall(addr)
+                                } /*else {
+                                    Log.e("serialport", "sosclick 重复呼叫,不处理: " + addr)
+                                }*/
+                            } else {
+                                //Log.e("serialport", "sosclick 33333333: " + addr)
+                                val item = SosItem(addr, curTime)
+                                sosList.add(item)
+                                startSosCall(addr)
                             }
-                            clickSosTime = System.currentTimeMillis()
                         }
                     }
 
@@ -489,6 +511,12 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                 }
             }
         }
+
+        //开启门灯
+        val doorAddr = getDoorLightAddrBySos(uart)
+        if (!TextUtils.isEmpty(doorAddr)) {
+            SerialPortHelper.openDoorLight(doorAddr)
+        }
     }
 
     private fun cancelSosCall(uart: String) {

+ 27 - 0
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/bean/SosItem.java

@@ -0,0 +1,27 @@
+package com.wdkl.app.ncs.conversion_box.bean;
+
+public class SosItem {
+    private String addr;
+    private long time;
+
+    public SosItem(String addr, long time) {
+        this.addr = addr;
+        this.time = time;
+    }
+
+    public String getAddr() {
+        return addr;
+    }
+
+    public void setAddr(String addr) {
+        this.addr = addr;
+    }
+
+    public long getTime() {
+        return time;
+    }
+
+    public void setTime(long time) {
+        this.time = time;
+    }
+}