在2个不同的活动中打开串行端口时遇到问题

问题描述

我在Android上的2种不同活动中未能成功打开串行端口。在主要活动上打开一个串行端口,一切正常。我关闭它,然后在新活动中将其重新打开,它下载约370个字节并停止。我正在使用Mik3y库,并且在两个活动中都使用完全相同的连接和接收代码。在第二个活动中我缺少什么吗?这是这两个活动的代码

            val mListener: SerialInputOutputManager.Listener =
            object : SerialInputOutputManager.Listener {

                override fun onNewData(data: ByteArray) {
//                    LED.setTextColor(Color.parseColor("#FFFF00"))
//                    mainLooper.post(() -> {

                    for (i in 0 until data.size) rsdash[len + i] = data[i]
                    len = len + data.size
                        Air2.setText(len.toString())
                    if (len >= 387){  // && (efitable==0 || efitable==2)) {
                        _serial.setRTS(false)
                        len=0
                        chksum = 0
                        for (i in 0 until 384) chksum = chksum + (rsdash[i].toInt() and 0xFF)
                        chksum = (chksum and 0xFFFF)
                        chktst= (rsdash[385].toInt() and 0xFF shl 8 or (rsdash[384].toInt() and 0xFF)).toInt()
                        if (chksum == chktst) {
                             _serial.write("R".toByteArray(),4) //82
                            if(exit>1) {
                                if (con == true) {
                                    _serial.setRTS(false)
                                    _serial.close()
                                    _connected = false
                                    con = false
                                }
                            }
                             display(rsdash)
//                                    Thread.sleep(51)
                            _serial.setRTS(true)
                            }
                        } else {
                            _serial.purgeHwBuffers(true,true)
                            _serial.write("R".toByteArray(),4)
                            //                            ++cnt
                            //                            Air2.setText(cnt.toString())
//                                Thread.sleep(200)
                            _serial.setRTS(true)
                            //                        display(rsdash)
                            //LED.setTextColor(Color.parseColor("#00FFFF"))
                            //                        _serial.purgeHwBuffers(true,true)
                        }
                    }

                override fun onRunError(e: Exception) {
                    _serial.setRTS(false)
                    len=0
                    _serial.purgeHwBuffers(true,true)
//                    Thread.sleep(200)
                    _serial.setRTS(true)
                }


            }



        fun connect(): Boolean {
            val drivers = UsbSerialProber.getDefaultProber().findAllDrivers(_usbManager)
            if (drivers.isEmpty()) {
                return false
            }
//                LED.setTextColor(Color.parseColor("#3F3F3F"))

            val driver = drivers[0]
            val _connection = _usbManager.openDevice(driver.device)
            if (_connection == null) {
                _connected = false
                return false
            }
//                LED.setTextColor(Color.parseColor("#FFFFFF"))

            val port = driver.ports[0]
            if (port == null) {
                _connected = false
                return false
            }
//                LED.setTextColor(Color.parseColor("#0000FF"))

            try {
                port.open(_connection)
                port.setParameters(
                    115200,8,UsbSerialPort.STOPBITS_1,UsbSerialPort.PARITY_NONE
                )
                port.purgeHwBuffers(true,true)
                _serial = port
                _connected = true

//                if (withIoManager) {
//                    usbIoManager = SerialInputOutputManager(usbSerialPort)
//                    Executors.newSingleThreadExecutor().submit(usbIoManager)
//                }
                //usbIoManager = SerialInputOutputManager(_serial,this)
                usbIoManager = SerialInputOutputManager(_serial,mListener)
                Executors.newSingleThreadExecutor().submit(usbIoManager)
//                val submit = Executors.newSingleThreadExecutor().submit(usbIoManager)
//                Executors.newSingleThreadExecutor().asCoroutinedispatcher(usbIoManager)

                _serial.setRTS(true)
                return true

            } catch (e: IOException) {
                //e.printstacktrace()

                if(_connected==true){port.close()}
                _connected = false
                return false
            }
        }
//        mainLooper = Handler(Looper.getMainLooper())

        broadcastReceiver = object : broadcastReceiver() {
            override fun onReceive(context: Context,intent: Intent) {
                if (intent.action == INTENT_ACTION_GRANT_USB) {
                    usbPermission = if (intent.getBooleanExtra(
                            UsbManager.EXTRA_PERMISSION_GRANTED,false
                        )
                    ) UsbPermission.Granted else UsbPermission.Denied
                    con=connect()
                }
            }
        }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)