android串口通信——电子扫描枪

android串口通信——电子扫描枪
我们这里开始介绍电子扫描枪(串口的),在开发中我们可能用到电子扫描枪这么一个玩意。比如,我们在做一个可以说扫描条码的app的时候,就会用到,这种情况一般都是运行在终端上,往往不是我们手机上,那么我们来看看扫描枪这个玩意吧。串口的调用我们是基于android-serialport-api的,如有疑问,请看 android串口通信——android-serialport-api

一、扫描枪基础

1.基础指令

下面介绍的只是其中一种,具体使用的是哪一种看具体的文档。

指令 说明
02820383 扫描指令
06 成功的标志(这个是一个坑,实际在用的时候,有可能只返回06,就不返回数据了,所以不能把它当做唯一成功的标志)
15 失败的标志
0d0a 结束标志,如果一个返回的数据中,是个字符串结尾,那么说明数据读取结束
2.基本操作说明

当我们需要扫描条码时候,发送 02820383 指令即可启动扫描枪扫描条码,然后我们根据上面的状态说明,来操作放回的数据。特此说明,串口的数据可能不是一次读完的,有时一个数据可能分好几次来读才读完,有时候一次就读完了,由此应该知道我们结束标志是多么的重要了。 所以我们在读完时,需要不数据先保存下来,等到读取完了了,再返回数据。

二、扫描工具类的实现

主要说明:
1.读取数据的线程我们必须只能使用一个线程,不然会造成数据读取不正确。
2.我们发送和读取到得数据都是十六进制。
3.读取到数据是ascii值,我们需要自己转换为对应的值。

package com.qiwenming.scandemo.utils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.InvalidParameterException;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;
import android_serialport_api.SerialPort;
import android_serialport_api.SerialPortFinder;

import com.qiwenming.scandemo.MainActivity;
import com.qiwenming.scandemo.bean.SerialPortSendData;


/**
 * @author qiwenming
 * @date 2015-11-2 下午2:00:12 
 * @ClassName ScanUtils 
 * @Package com.qiwenming.scandemo.utils 
 * @Description: 串口工作类
 */
public class ScanUtils {
   
    protected static OutputStream mOutputStream=null;
    private static InputStream mInputStream = null;
    private ReadThread mReadThread;
    public SerialPortFinder mSerialPortFinder = new SerialPortFinder();
    private SerialPort mSerialPort;
    private Context context;
    public static ReadThread thread = null;
    /**
     * @author qiwenming
     * @creation 2015-6-18 下午4:38:54
     * @instruction 读取类
     */
    private class ReadThread extends Thread {
   
        private ScanReciverListener listener;
        private SerialPortSendData sendData;
        public ReadThread() {
        }

        public void setDataListener(SerialPortSendData sendData, ScanReciverListener listener) {
            this.listener = listener;
            this.sendData = sendData;
        }


        @Override
        public void run() {
            thread = this;
            StringBuffer sb = new StringBuffer();
            super.run();
            while (!isInterrupted()) {
                int size;
                try {
                    byte[] buff
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值