当前位置: 首页 > news >正文

网站设计包括哪些步骤网站前台功能介绍

网站设计包括哪些步骤,网站前台功能介绍,企业网站帮助中心,k大原画培训班官网最早的博客Android 模拟串口通信过程_launch virtual serial port driver pro-CSDN博客里就是用过 Google 提供的 demo#xff0c;最近想再写个其他的demo发现用起来有点麻烦#xff0c;还需要导入其他 module#xff0c;因此在网上找到了Android-SerialPort-API: https://g… 最早的博客Android 模拟串口通信过程_launch virtual serial port driver pro-CSDN博客里就是用过 Google 提供的 demo最近想再写个其他的demo发现用起来有点麻烦还需要导入其他 module因此在网上找到了Android-SerialPort-API: https://github.com/licheedev/Android-SerialPort-API.git 也是Fork自Google开源的Android串口通信Demo。 话不多说直接开搞。 目录 一、简单说明 1、添加依赖 2、创建串口通讯工具类 SerialPortUtil 3、示例 MainActivity 4、通过logcat验证app 二、注意 三、总结 四、demo地址 一、简单说明 1、添加依赖 dependencies {...//添加依赖implementation (com.licheedev:android-serialport:2.1.3)} 2、创建串口通讯工具类 SerialPortUtil class SerialPortUtil {companion object {private const val TAG SerialPortUtilval sInstances by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {SerialPortUtil()}}private lateinit var mIOpenSerialPortListener: IOpenSerialPortListenerprivate lateinit var mISerialPortDataListener: ISerialPortDataListenerprivate lateinit var mSendingHandlerThread: HandlerThreadprivate lateinit var mSendingHandler: Handlerprivate lateinit var mSerialPortReceivedThread: SerialPortReceivedThreadprivate lateinit var mFileInputStream: FileInputStreamprivate lateinit var mFileOutputStream: FileOutputStreamprivate lateinit var serialPort: SerialPort/*** 打开串口方法*/fun open(path: File) {try {serialPort SerialPort.newBuilder(path, 9600) // 校验位0:无校验位(NONE默认)1:奇校验位(ODD);2:偶校验位(EVEN).build()mFileInputStream serialPort.inputStream as FileInputStreammFileOutputStream serialPort.outputStream as FileOutputStream} catch (e: SecurityException) {mIOpenSerialPortListener.onFail(path, Status.NO_READ_WRITE_PERMISSION)return} catch (e: Exception) {mIOpenSerialPortListener.onFail(path, Status.OPEN_FAIL)return}mIOpenSerialPortListener.onSuccess(path)startSendThread()startReceivedThread()}/*** 发送数据*/fun sendBytes(bytes: ByteArray?): Boolean {try {Runnable {val message Message.obtain()message.obj bytesmSendingHandler.sendMessage(message)Thread.sleep(100)}.run()} catch (e: Exception) {Log.e(TAG, sendBytes: 发送数据失败 e.message)return false}return true}/*** 开启发送消息线程*/private fun startSendThread() {Log.d(TAG, startSendThread: 开启发送消息线程)mSendingHandlerThread HandlerThread(mSendingHandlerThread)mSendingHandlerThread.start()mSendingHandler object : Handler(mSendingHandlerThread.looper) {override fun handleMessage(msg: Message) {val sendBytes: ByteArray? msg.obj as ByteArray?if ((null ! sendBytes) (sendBytes.isNotEmpty())) {try {mFileOutputStream.write(sendBytes)mISerialPortDataListener.onDataSend(sendBytes)} catch (e: java.io.IOException) {e.printStackTrace()}}}}}/*** 停止发送消息线程*/fun stopSendThread() {Log.d(TAG, stopSendThread: 停止发送消息线程)mSendingHandlerThread.interrupt()mSendingHandlerThread.quit()}/*** 开启接收消息的线程*/private fun startReceivedThread() {Log.d(TAG, startReceivedThread: 开启接受消息线程)mSerialPortReceivedThread object : SerialPortReceivedThread(mFileInputStream) {override fun onDataReceived(bytes: ByteArray?) {mISerialPortDataListener.onDataReceived(bytes)}}mSerialPortReceivedThread.start()}/*** 停止接收消息的线程*/fun stopReceivedThread() {Log.d(TAG, stopReceivedThread: 停止接收消息的线程)mSerialPortReceivedThread.release()serialPort.tryClose()}/*** 设置串口打开的监听*/fun setIOpenSerialPortListener(iOpenSerialPortListener: IOpenSerialPortListener) {mIOpenSerialPortListener iOpenSerialPortListener}/*** 设置串口数据收发的监听*/fun setISerialPortDataListener(iSerialPortDataListener: ISerialPortDataListener) {mISerialPortDataListener iSerialPortDataListener}} 在这里简单介绍些在开启串口通讯后开启两个线程分别处理send及received步骤。 3、示例 MainActivity class MainActivity : Activity(), IOpenSerialPortListener, ISerialPortDataListener {companion object {private const val TAG MainActivityprivate val FIND_CARD byteArrayOf(0x20, 0x00, 0x80.toByte(), 0x04, 0x03, 0x03, 0x01, 0x00, 0x7a, 0x03)}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)CrashHandler.sInstance.init(this)//0、设置su位置SerialPort.setSuPath(/system/xbin/su)//1、首先设置open监听SerialPortUtil.sInstances.setIOpenSerialPortListener(this)//2、设置串口监听SerialPortUtil.sInstances.setISerialPortDataListener(this)//3、open串口SerialPortUtil.sInstances.open(File(/dev/ttyS3))//4、模拟发送命令SerialPortUtil.sInstances.sendBytes(FIND_CARD)}override fun onDestroy() {super.onDestroy()SerialPortUtil.sInstances.stopSendThread()SerialPortUtil.sInstances.stopReceivedThread()}override fun onSuccess(device: File?) {Log.d(TAG, onSuccess: open成功)}override fun onFail(device: File?, status: Status?) {Log.d(TAG, onFail: open失败原因 $status)}override fun onDataReceived(bytes: ByteArray?) {Log.d(TAG, onDataReceived: 接受数据: Arrays.toString(bytes))}override fun onDataSend(bytes: ByteArray?) {Log.d(TAG, onDataSend: 发送数据: Arrays.toString(bytes))}} 4、通过logcat验证app 09:52:48.349 serial_port D Opening serial port /dev/ttyS3 with flags 0x2 09:52:48.349 serial_port D open() fd 45 09:52:48.349 serial_port D Configuring serial port 09:52:48.359 MainActivity D onSuccess: open成功 09:52:48.359 SerialPortUtil D startSendThread: 开启发送消息线程 09:52:48.359 SerialPortUtil D startReceivedThread: 开启接受消息线程 09:52:48.359 SerialPortReceivedThread I run: available 0 09:52:48.359 MainActivity D onDataSend: 发送数据: [32, 0, -128, 4, 3, 3, 1, 0, 122, 3] 09:52:48.529 BufferQueue E [com.lichang.source/com.lichang.source.MainActivity] connect: already connected (cur1, req1) 09:52:48.529 mali_winsys D EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000 09:52:48.529 OpenGLRenderer D Enabling debug mode 0 09:52:51.609 SerialPortReceivedThread I run: size 14 09:52:51.609 SerialPortReceivedThread I run: bytes [32, 0, 0, 8, 4, 0, 8, 4, 28, 37, -117, -5, -74, 3] 09:52:51.609 MainActivity D onDataReceived: 接受数据: [32, 0, 0, 8, 4, 0, 8, 4, 28, 37, -117, -5, -74, 3] 09:52:51.609 SerialPortReceivedThread I run: available 0 09:52:53.729 SerialPortReceivedThread I run: size 22 09:52:53.729 SerialPortReceivedThread I run: bytes [32, 0, 0, 16, 32, 17, 35, 69, 103, -113, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, 3] 09:52:53.729 MainActivity D onDataReceived: 接受数据: [32, 0, 0, 16, 32, 17, 35, 69, 103, -113, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, 3] 09:52:53.729 SerialPortReceivedThread I run: available 0 09:53:03.239 dalvikvm D Debugger has detached; object registry had 1 entries 09:53:03.249 dalvikvm D GC_CONCURRENT freed 222K, 15% free 2334K/2744K, paused 1ms1ms, total 12ms 09:53:12.419 SerialPortUtil D stopSendThread: 停止发送消息线程 09:53:12.419 SerialPortUtil D stopReceivedThread: 停止接收消息的线程 09:53:12.419 serial_port D close(fd 45) 二、注意 为了在Android上读/写串行端口你需要在设备上安装su binary(这可以通过root设备来完成)。通常具有串口通信能力的Android设备已将su安装在默认路径下。 默认的 su 路径使用的是 “/system/bin/su” 三、总结 在新项目中快速应用可以先导入依赖然后copy示例中的 com/lichang/source/serialport文件夹即可按照 3、示例 MainActivity 钓箱串口工具类。 四、demo地址 serialport-demo_kt: 使用 implementation (com.licheedev:android-serialport:2.1.3)
http://www.w-s-a.com/news/911352/

相关文章:

  • 怎么查一个网站是什么程序做的三亚城乡建设局网站
  • 深圳分销网站设计公司做网站一般需要多久
  • 企业网站设计代码丹东seo排名公司
  • 企业网站建设定制开发服务网站建设说课ppt
  • 大连市城乡建设局网站网站免费网站入口
  • 做暧网站网站备案ps
  • 知名网站建设公司电话长子网站建设
  • 网站建设的意义与目的建立什么船籍港
  • 广州注册公司营业执照网站建设代码优化
  • 百度网站官网马克互联网主题 wordpress
  • 网站制作 客户刁难深圳自助建站
  • 怎么去推广一个网站广东餐饮品牌设计
  • 网站代码加密了怎么做兰州最新大事
  • 现在ui做的比较好的网站去年做啥网站致富
  • 广东网站建设咨询电话好牌子网
  • 公司怎样制作网站南阳网站关键词
  • 营销型网站建设与网盟完整php网站开发
  • 网站做微信链接怎么做的石桥铺网站建设公司
  • 济南mip网站建设公司做图书馆网站模板
  • app 门户网站网站项目框架
  • 做网站视频网站备案 新闻审批号
  • 织梦网站怎么居中视频网站开发与制作
  • 网站上海备案佛山网站seo哪家好
  • 品牌形象网站有哪些珠海市区工商年报在哪个网站做
  • 注册域名不建设网站seo外包服务方案
  • 如何进行外贸网站建设wordpress文章输入密码可见
  • 政务网站建设索引常州做网站信息
  • 南宁做网站找哪家好wordpress 更改首页
  • 一个人在家做网站建设品牌策划流程
  • 小网站广告投放wordpress页面添加js