首先你的andoridstudio 需要配置ndk 环境
然后在去下载谷歌的的demo
下载地址
把这些直接复制到代码中
一般jniC语言调用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();
}
});
}
}
需要注意的地方就是 地址与波特率 不要弄错了
这样就拿到卡号了,如果项目需要截取卡号之类的,自己在处理就行了 。。。
如果有不懂的可以提问,谢谢。。。。