android串口读取12个字节,Android 对接硬件串口篇

//这是没有指令直接获取硬件数据的方法,假如需要发送指令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 QueueList = new LinkedList();

@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();

}

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值