简介:硬件设备有IC卡片,指压测试仪(测试脉搏信号、心率、血压),经过串口获取硬件设备发送的数据。

正文:第一步:获得硬件设备,应用市场下载串口调适软件,测试一下在Android环境下数据是否能正常获取,

第二步:新建项目,开始开发。

第三步:时间紧任务重,直接上代码。

    private DispQueueThread DispQueue;
private AssistBean AssistData;
private SerialControl ComA;
@Override
public void initView() {
ComA = new SerialControl();//开启串口
DispQueue = new DispQueueThread();//开启线程实时获取数据
DispQueue.start();//线程启动
AssistData = getAssistData();//串口实体类 ComA.setPort("/dev/ttyS5");//串口号,需要向硬件工作人员要
ComA.setBaudRate("115200");//波特率,后台要
OpenComPort(ComA);//发送指令
new Thread() {
@Override
public void run() {
executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
ComA.sendHex("fc0000000000"); }
}, 0, 500, TimeUnit.MILLISECONDS);
}
}.start();
private void endExecutorScan() {
if(executorService != null) {
executorService.shutdownNow();
}
executorService = null;//非单例模式,置空防止重复的任务
}


        //这是没有指令直接获取硬件数据的方法,假如需要发送指令ComA.setHexLoopData(“指令”);
//假如,要求一秒获取多次数据的情况,上面多出来的代码就是,在需要开始发送的地方写线程开启,在需要关闭和OnDestiory里面条用关闭
//还有一种方法是用sleep不推荐使用,一般硬件要求比较严格sleep对于时间有一个累计的过程不提倡使用,在SerialHelper.Java里面有个方法也是做的一个自动发送功能,其原理就是sleep。SO,我这边直接用的这个
    }

    private class SerialControl extends SerialHelper {//工具

        public SerialControl() {
} @Override
protected void onDataReceived(final ComBean ComRecData) {
//数据接收量大或接收时弹出软键盘,界面会卡顿,可能和6410的显示性能有关
//直接刷新显示,接收数据量大时,卡顿明显,但接收与显示同步。
//用线程定时刷新显示可以获得较流畅的显示效果,但是接收数据速度快于显示速度时,显示会滞后。
//最终效果差不多-_-,线程定时刷新稍好一些。
DispQueue.AddQueue(ComRecData);//线程定时刷新显示(推荐)
}
} private class DispQueueThread extends Thread {//线程
private Queue<ComBean> QueueList = new LinkedList<ComBean>(); @Override
public void run() {
super.run();
while (!isInterrupted()) {
final ComBean ComData;
while ((ComData = QueueList.poll()) != null) {
runOnUiThread(new Runnable() {
public void run() {
DispRecData(ComData);
}
});
// try
// {
// Thread.sleep(100);//显示性能高的话,可以把此数值调小。
// } catch (Exception e)
// {
// e.printStackTrace();
// }
break;
}
}
} public synchronized void AddQueue(ComBean ComData) {
QueueList.add(ComData);
}
} private int count = 0; private void DispRecData(ComBean ComRecData) {//获取硬件数据的地方
StringBuilder sMsg = new StringBuilder(); sMsg.append(ComRecData.sRecTime);
sMsg.append("[");
sMsg.append(ComRecData.sComPort);
sMsg.append("]");
sMsg.append(MyFunc.ByteArrToHex(ComRecData.bRec));
count++; String substring = MyFunc.ByteArrToHex(ComRecData.bRec).trim().replaceAll(" ", "").substring(MyFunc.ByteArrToHex(ComRecData.bRec).trim().replaceAll(" ", "").length() - 8);
long i = Long.valueOf(substring, 16);
Log.d("aaaaaaaaaa", "" + i); if (ComA != null) {
ComA.stopSend();
ComA.close();
}
} private AssistBean getAssistData() {
SharedPreferences msharedPreferences = getSharedPreferences("ComAssistant", Context.MODE_PRIVATE);
AssistBean AssistData = new AssistBean();
try {
String personBase64 = msharedPreferences.getString("AssistData", "");
byte[] base64Bytes = Base64.decode(personBase64.getBytes(), 0);
ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
AssistData = (AssistBean) ois.readObject();
return AssistData;
} catch (Exception e) {
e.printStackTrace();
}
return AssistData;
} private void OpenComPort(SerialHelper ComPort) {
try {
ComPort.open();
} catch (SecurityException e) {
ShowMessage("打开串口失败:没有串口读/写权限!");
} catch (IOException e) {
ShowMessage("打开串口失败:未知错误!");
} catch (InvalidParameterException e) {
ShowMessage("打开串口失败:参数错误!");
}
} private void ShowMessage(String sMsg) {
Toast.makeText(this, sMsg, Toast.LENGTH_SHORT).show();
}

  本次串口到此结束,本人技术有限,就不做详细的介绍,怕误人子弟。直接上能直接运行的代码。都能节省时间,至于原理,想了解的我不写也回去了解,不想了解的我写了也没人看

有用请点赞、评论、推荐、关注,三克油

Android 对接硬件串口篇的更多相关文章

  1. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

  2. Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇——开发工具库篇,**主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容 ...

  3. [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...

  4. Android开源项目第一篇——个性化控件(View)篇

    本文为那些不错的Android开源项目第一篇——个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Ga ...

  5. Android核心分析 之十Android GWES之基本原理篇

    Android GWES基本框架篇 我这里的GWES这个术语实际上从Microsoft 的Window上移植过来的,用GWES来表示Android的窗口事件系统不是那么准确,在Android中Wind ...

  6. Android 滑动效果进阶篇(六)—— 倒影效果

    上篇介绍了使用Animation实现3D动画旋转翻页效果,现在介绍图片倒影实现,先看效果图 本示例主要通过自定义Gallery和ImageAdapter(继承自BaseAdapter)实现 1.倒影绘 ...

  7. Android应用开发基础篇(1)-----Button

    Android应用开发基础篇(1)-----Button   一.概述        Button,顾名思义就是按钮的意思,它主要的功能是响应用户按下按钮时的动作. 二.应用      新建一个工程, ...

  8. Android应用开发提高篇(1)-----获取本地IP

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/21/2361802.html 一.概述 习惯了Linux下的网络编程,在还没用智能机之前就一直想 ...

  9. Android JNI开发提高篇

    有关JNI的开发技术,我们继续围绕Android平台进行,JNI可以支持C或C++,从目前为止我们写过的JNI代码均为C实现的,即文件名为.C而C++的和这些有什么不同呢? Android平台上的JN ...

随机推荐

  1. 11、vue-路由

    1.路由: 官方提供一个插件,构建单页面应用,主要实现得功能页面得切换.组件得跳转 2.vue中得路由:vue-router包,如果是脚手架进行搭建得,那么是不需要安装vue-router这个包得,因 ...

  2. 微信小程序-APP生命周期与运行机制

    QQ讨论群:785071190 开发微信小程序之前需要先了解微信小程序运行机制以及其生命周期,小程序APP生命周期需要先从app.js这个文件开始. 阅读过"微信小程序-代码构成" ...

  3. Java工程中各种带有O的对象分类笔记

    在Java工程里面,我们总会碰到各种不同的带有O的对象, 对于一个小白来说,经常会混淆这些对象的使用场景,所以在这里mark一下,让自己的代码更加规范,但这个也是Java被诟病的地方,不同的业务需要给 ...

  4. ElasticSearch中倒排索引和正向索引

    ElasticSearch搜索使用的是倒排索引,但是排序.聚合等不适合倒排索引使用的是正向索引 倒排索引 倒排索引表以字或词为关键字进行索引,表中关键字所对应的记录项记录了出现这个字或词的所有文档,每 ...

  5. 在maven项目中使用Junit进行单元测试(一)

    https://blog.csdn.net/ai_xue_xi/article/details/51819729 这篇文章相当的经典,最好使用的maven生成单元测试报告,不要在使用ant脚本生成单元 ...

  6. 你的 IDEA 是如何配置的?卡不卡?试试这样配置

    本文作者在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响. Don't be a Scrooge and give you ...

  7. Python学习之准备工作

    Python学习之准备工作 编程语言历史 在计算机硬件基础中我们大概介绍了一下计算机的发展历史.了解到在曾经有一段时期里计算机是不存在操作系统这一概念的,所有需要计算机完成的操作都需要当时的程序员来与 ...

  8. java8 Optional 类

    package jdk180reduce; import java.util.ArrayList; import java.util.HashMap; import java.util.List; i ...

  9. JVM的堆内存泄漏排查-性能测试

    JVM异常说明 https://testerhome.com/articles/24259 一文中已介绍了,JVM每个运行时区域--程序计数器 .Java虚拟机栈.本地方法栈.Java堆.方法区.直接 ...

  10. vue基础入门(1)

    1.vue初体验 1.1.vue简介 1.1.1.vue是什么? Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架,什么叫做渐进式呢?通俗的讲就是一层一层的,一步一 ...