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

做网站的公司怎样收费二级域名搭wordpress

做网站的公司怎样收费,二级域名搭wordpress,芜湖百度seo,海南省海口市最早的博客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/14414993/

相关文章:

  • 大型门户网站建设哪专业网站开发发和后台开发有什么区别
  • 郑州哪里教做网站厦门外贸网站建设报价
  • .net做的网站打开速度缓慢WordPress游览器标签
  • 承德优化网站建设有没有做网站的联系方式
  • 搭建网站要什么配置济南网络公司工资排名
  • 网站建设公司70hf360网页设计尺寸
  • 程序员怎么做网站赚钱班级网页设计模板图片
  • 如何在电脑上打开自己做的网站wordpress表单采集
  • 数码印花图案设计网站免费培训网站
  • 长春网站推广优化公司哪家好电子商务网站开发技术
  • 建南沙做网站公司做淘宝网站要安全保障么
  • 如何盗取网站口碑营销的主要手段有哪些
  • 海南网站定制企业网站改版建议
  • 河西做网站网站做好后怎么更新内容
  • 泉州做网站seo的开发网站实时监控
  • 17做网店类似网站110平米三室一厅简装图片
  • 行业网站制作模板网站如何做优化
  • 怎样选择网站的关键词网站建设与维护学什么科目
  • 二手网站排名wordpress 发卡插件
  • 新开传奇网站发布网孞seo按天计费系统定制
  • 在建设银行网站申请完信用卡吗做装修效果图的网站有哪些软件下载
  • 自己做网站需要什么软件聚享游网站如何做推广
  • 扁平式网站模板上海小程序开发定制
  • 个人静态网站wordpress实例网站
  • 网站开发培训学校十堰小程序开发
  • 二手书哪个网站做的好淘客网站做的好的
  • 软件公司网站模版做机械配件的网站
  • 老干支部网站建设方案怎样做医院网站
  • 庆阳市建设局网站设计一个网站报价
  • 中卫网站定制开发价格it培训