1.开发工具:Android Studio
2.所用资源:谷歌开源 serialPort api (下载地址:https://download.csdn.net/download/qq_30297763/10900944 )

开发:

  1. 将文件copy到相应位置:(注意:因为用的谷歌原生so库,所以SerialPort类的包名一定要是android_serialport_api,如果想修改这个包名,就需要重新生成对应的so库

2.

  buildTypes {sourceSets {main {jni.srcDirs = []}}}

3.串口操作类:

import android.util.Log;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android_serialport_api.SerialPort;public class SerialPortUtils {private final String TAG = "SerialPortUtils";private String path = "/dev/ttyS4";  // 可根据设备不同修改private int baudrate = 9600; //波率public boolean serialPortStatus = false; //是否打开串口标志public boolean threadStatus; //线程状态,为了安全终止线程public SerialPort serialPort = null;public InputStream inputStream = null;public OutputStream outputStream = null;/*** 打开串口** @return serialPort串口对象*/public SerialPort openSerialPort() {try {serialPort = new SerialPort(new File(path), baudrate, 0);this.serialPortStatus = true;threadStatus = false; //线程状态//获取打开的串口中的输入输出流,以便于串口数据的收发inputStream = serialPort.getInputStream();outputStream = serialPort.getOutputStream();new ReadThread().start(); //开始线程监控是否有数据要接收} catch (IOException e) {Log.e(TAG, "openSerialPort: 打开串口异常:" + e.toString());return serialPort;}Log.d(TAG, "openSerialPort: 打开串口");return serialPort;}/*** 关闭串口*/public void closeSerialPort() {try {inputStream.close();outputStream.close();this.serialPortStatus = false;this.threadStatus = true; //线程状态serialPort.close();} catch (IOException e) {Log.e(TAG, "closeSerialPort: 关闭串口异常:" + e.toString());return;}Log.d(TAG, "closeSerialPort: 关闭串口成功");}/*** 发送串口指令(字符串)* @param data String数据指令*/public void sendSerialPort(String data) {if (!data.isEmpty()){Log.d(TAG, "sendSerialPort: 发送数据");data = data.toUpperCase();int len = data.length()/2;byte[] sendData = new byte[len];char[] hc = data.toCharArray();for (int i=0; i<len; i++){int p=2*i;sendData[i] = (byte) (charToByte(hc[p]) << 4 | charToByte(hc[p+1]));}try {outputStream.write(sendData);//outputStream.write('\n');  //outputStream.write('\r'+'\n');outputStream.flush();Log.d(TAG, "sendSerialPort: 串口数据发送成功 "+data+"  sendData:"+ sendData.toString()  );} catch (IOException e) {Log.e(TAG, "sendSerialPort: 串口数据发送失败:" + e.toString());}}else {return;}}/*** 单开一线程,来读数据*/private class ReadThread extends Thread {@Overridepublic void run() {super.run();//判断进程是否在运行,更安全的结束进程while (!threadStatus) {Log.d(TAG, "进入线程run");//64   1024byte[] buffer = new byte[64];int size; //读取数据的大小try {size = inputStream.read(buffer);if (size > 0) {Log.d(TAG, "run: 接收到了数据大小:" + String.valueOf(size));onDataReceiveListener.onDataReceive(buffer, size);}} catch (IOException e) {Log.e(TAG, "run: 数据读取异常:" + e.toString());}}}}//监听接收数据public OnDataReceiveListener onDataReceiveListener = null;public static interface OnDataReceiveListener {public void onDataReceive(byte[] buffer, int size);}public void setOnDataReceiveListener(OnDataReceiveListener dataReceiveListener) {onDataReceiveListener = dataReceiveListener;}/*** 字符转换为字节*/private static byte charToByte(char c) {return (byte) "0123456789ABCDEF".indexOf(c);}
}

简单运用:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;public class MainActivity extends AppCompatActivity {private SerialPortUtils serialPortUtils;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);serialPortUtils = new SerialPortUtils();serialPortUtils.openSerialPort();  //打开串口serialPortUtils.sendSerialPort("01010101");//发送指令//串口数据监听事件serialPortUtils.setOnDataReceiveListener(new SerialPortUtils.OnDataReceiveListener() {@Overridepublic void onDataReceive(byte[] buffer, int size) {Log.d("SerialPort", "监听到的数据: " + new String(buffer));}});serialPortUtils.closeSerialPort();//关闭串口}}

简单demo: ( https://download.csdn.net/download/qq_30297763/10901105 )

Android串口开发相关推荐

  1. android 串口开发第二篇:利用jni实现android和串口通信

    一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...

  2. QT for Android串口开发

    QT for Android 思路 一.所用到的头文件 1.打开串口 2.配置串口 3.接收数据 3.发送数据 最近在搞QT for Android开发,在网上搜了下解决方案发现都是需要java库的支 ...

  3. android 串口开发_详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印...

    01 写在前面: 上篇关于如何在内置仅1M的Esp8285做到 OTA 升级的同步到微信公众号,竟然被安信可的某些运维人员看到了,想要转载,我很欣慰,竟然自己的笔记可以被这么大型的公司员工认可! 我是 ...

  4. Android 串口开发,发送串口命令,读卡,反扫码,USB通讯,实现demo。——持续更新

    应用场景:APP发送串口命令到打印机,打印相应数据小票 // 串口 implementation 'com.github.licheedev.Android-SerialPort-API:serial ...

  5. Android 串口开发

    1. 主板型号:AIO-3399J 2. 芯片型号:RK3399 3. 操作系统版本:Android 7.1 4. Linux版本:v4.4.103 RPLIDAR A3M1 激光雷达通讯接口采用 3 ...

  6. android串口开发!一年后斩获腾讯T3,附面试题答案

    开头 互联网时代的到来,让我们获取知识变得更加简单,理论上讲只要你想学,便会有不尽的知识等你,只要方法得当,够努力,任何人都可以都有可能成为大牛. 自己在努力的基础上,还学习了一些高效的学习方法,让我 ...

  7. Android 串口开发——粘包解决方法,定时查询心跳数据,解析心跳数据。——持续更新中

    粘包解决方法 方法1 getXOR--是校验方法 /*** 最小数据包的长度(除开数据的N个字节)* 帧头 保留字节 协议控制字 地址字段 命令长度 命令码 命令数据 校验和* 2字节 3字节 1字节 ...

  8. Android USB串口开发

    因为第一次接触Android下的串口开发,在网上找了很多例子都不能满足自己的需要以及不能正常使用,于是结合网上的资源以及查阅资料,终于完成了关于这个串口的开发,在此记录下usb转串口通信开发的过程. ...

  9. 快速使用Android串口

    天下武功,唯快不破 有多快?只需要一招!引入第三方库就可以快速开发和使用Android串口,毕竟我们站在了巨人的肩膀上. 第一步导包,也就只有这一步了 // 在项目根目录的build.gradle文件 ...

  10. 【Android 应用开发】Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载

    . 最新下载 : 2017年 8 月 28 日 : 平台 Android Studio 软件包 大小 SHA-1 校验和 Windows (64 位) android-studio-bundle-16 ...

最新文章

  1. 2022-2028年中国电熔镁行业市场研究及发展趋势分析报告
  2. 如何根据keras的fit后返回的history绘制loss acc曲线
  3. 文件上传服务器保存形式,78.上传文件及在服务器保存文件到任意路径
  4. java变量及进制问题 —(4)
  5. Python小白的数学建模课-23.数据拟合全集
  6. 音乐无界限,听见好时光—网易云音乐Linux版震撼来袭!
  7. 【译】介绍 Consul 新的学习平台和新资源:Kubernetes, AWS Cloud Map 及更多
  8. libevent的问题
  9. elk日志分析系统_ELK 日志分析系统
  10. 【jq练习】层次选择器
  11. 网络分层和对应的协议列表
  12. 因果故事:偷不走的命运!
  13. linux工作中软件运行安装常见问题
  14. iphone6 越狱教程
  15. zabbix学习4: 监控Java原理-zabbix性能优化-低级自动发现-zabbix api
  16. python日历模块_Python日历模块总结
  17. SpringBoot集成MyBatis(微服务)
  18. 2. Java并发编程-互斥锁、死锁
  19. **什么是架构师-架构师的定义**
  20. 你随身携带的录音工作室:录音机HD“录音工作室”9.0.4评测

热门文章

  1. MacOS自带ssh+XQuartz连接OpenBSD6.5
  2. CDH之Cloudera Manager使用
  3. 计算机视觉三大国际会议ICCV、ECCV、CVPR
  4. 华为AR路由器配置导出
  5. 压缩access数据库
  6. WOai wojiao
  7. 多个分析视角的数据多维分析图表该如何制作?
  8. md5在线转换计算机,已解付费MD5在线解密查询
  9. 2014微软open day 51CTO讲师、博主、版主~
  10. 移动硬盘格式化后还能恢复数据吗 格式化的移动硬盘数据能恢复吗