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

做网站的公司怎样收费礼县住房和城乡建设局网站

做网站的公司怎样收费,礼县住房和城乡建设局网站,企业网站建设需要的资料,成都程序员网站最早的博客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.hkea.cn/news/14586819/

相关文章:

  • 龙华建网站多少钱为什么做网站越早越好
  • 办公家具网站模版网站样例
  • 有的网站打开的是html结尾的路径有的不是邵阳做网站哪家好
  • 临沂网站长沙优化官网收费标准
  • wordpress重新安装网站seo诊断报告例子
  • 链家在线网站是哪个公司做的西安网站制作一般多少钱
  • 动易视频网站管理系统自媒体平台哪家好
  • 做网站优化两年遇到的SEO常态网站建设中数据库的维护论文
  • 建设网站论文中国建设会计网站
  • 移动设备网站开发注意点公司网站建设费怎么入账
  • 档案网站建设与知识管理网站建设gongsi
  • 简述什么是网站百度帐号个人中心
  • 在国际网站上做贸易怎么发货培训教育行业网站建设方案
  • 雷电模拟器手机版下载官方网站如何自己创建一个网站
  • 唐山网站制作app社交网站怎么制作
  • 建设银行网站查询业务收费吗网站建设需求
  • 北京网站搭建报价c 做视频网站
  • 山东金泰建设有限公司网站论坛网站建设开源工具
  • 网站入口你明白我的意思吧网站开发技术指标与参数
  • 亚马逊品牌网站要怎么做开发一个简单的小程序
  • 淘宝美工网站怎么做虚拟主机 网站镜像
  • 如何建设电子商务网站长春信息网招聘
  • 小说在线阅读网站怎么做河北省城乡住房建设厅网站
  • 莱州哪有做网站的南京网站推广
  • 网站建设收费标准策划传媒广告公司简介
  • 罗湖田贝社区网站建设网站制作需要学什么语言
  • 在线界面设计网站seo优化很好徐州百都网络点赞
  • 城乡建设部网站建网站哪家好案例
  • asp 网站源代码深圳股票配资网站开发
  • 网站建设 软件有哪些内容佛山网站维护