Android(安卓)串口通讯 获取卡号
16lz
2021-01-24
首先你的andoridstudio 需要配置ndk 环境
然后在去下载谷歌的的demo
下载地址
把这些直接复制到代码中
一般 jni C语言调用java 是指定包名调用的 所有android_serialport_api的包名不要改变
直接复制过去就行
对了 jniLibs 需要指向下,如果不想指向可以把里面的内容复制到 libs里面
我写的指向
sourceSets { main { jni.srcDirs = [] jniLibs.srcDirs = ['src/main/jniLibs'] } }
准备好之后就可以开始写了,,为了更好的了解串口我拍了一张我们机器上的图片如下
这个名字不要弄错了
完整的demo如下
package com.hly.main;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.Toast;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android_serialport_api.SerialPort;public class Good extends AppCompatActivity { protected SerialPort mSerialPort; protected InputStream mInputStream; protected OutputStream mOutputStream; private ReadThread mReadThread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.text_layout); try { //临时卡 mSerialPort = new SerialPort(new File("/dev/ttyS4"), 19200, 0); mInputStream = mSerialPort.getInputStream(); mOutputStream = mSerialPort.getOutputStream(); mReadThread = new ReadThread(); Toast.makeText(Good.this, "串口已经打开", Toast.LENGTH_SHORT).show(); mReadThread.start(); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { Log.v("test", "启动失败"); e.printStackTrace(); } } private class MReadThread extends Thread { @Override public void run() { super.run(); while (!isInterrupted()) { try { if (mInputStream == null) return; byte[] buffer = new byte[64]; int mcount; if (mInputStream.available() <= 0) { continue; } else { Thread.sleep(300); } mcount = mInputStream.read(buffer); if (mcount > 8) { //根据自己的情况添加 onDataReceived(buffer, mcount, 1);//根据自己需要的情况添加内容 } } catch (IOException e) { e.printStackTrace(); return; } catch (InterruptedException e) { e.printStackTrace(); return; } } } } protected void onDataReceived(final byte[] buffer, final int size) { runOnUiThread(new Runnable() { public void run() { String msg = new String(buffer); Toast.makeText(Good.this, msg, Toast.LENGTH_SHORT).show(); //这个是需要截取的卡号// byte[] bytes = buffer;// String mealCardData = HexUtils.bytes2Hex(bytes);// //截取餐卡卡号,临时餐卡为AA55打头// if (mealCardData != null && mealCardData.length() >= 14) {// String cardNo = mealCardData.substring(10, 12);// cardNo = cardNo + mealCardData.substring(8, 10);// cardNo = cardNo + mealCardData.substring(6, 8);// cardNo = cardNo + mealCardData.substring(4, 6);// Toast.makeText(Good.this, cardNo, Toast.LENGTH_SHORT).show(); } }); }}
需要注意的地方就是 地址与波特率 不要弄错了
这样就拿到卡号了,如果项目需要截取卡号之类的,自己在处理就行了 。。。
如果有不懂的可以提问,谢谢。。。。
更多相关文章
- Android(安卓)Studio编译出来的APK无法安装如何解决?
- android ListView添加checkbox注意事项
- android 驱动(6)---DTS 分析
- android studio适配器Adapter
- Android获取串口路径
- Android当前版本使用分布情况
- Edittext 取消长按 复制和粘糊等操作
- android实时监听网络状态并在断网的情况下打开网络设置
- Fragment 中的onConfigurationChanged 在切换语言的情况下不被回