您的位置:首页 > 移动开发 > Android开发

Android Studio 简单串口操作

2016-04-05 17:18 615 查看
最近由于公司的需要,需要对代码的操作 ,因为以前没有接触过串口 ,所以上网查了很多的资料,但是那些资料都是有点太老,因为现在大多是android studio 所以我也用AS开发,但是在开发过程中都没有办法调用到.so文件,经过我一番努力,终于在AS上成功运行,和雷达串口交互。闲话少说,直接上方法。

首先 AS是正式版,我用的是AS-1.51正式版,其他版本我也试过,其中测试版的不行,所以最好用正式版。

1、首先是配置gradle

distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip

gradle必须是2.10的版本,其他版本应该不行,所以要注意。



2、配置项目中的build.gradle

dependencies {

classpath ‘com.android.tools.build:gradle-experimental:0.7.0-alpha3’

// NOTE: Do not place your application dependencies here; they belo
4000
ng
// in the individual module build.gradle files
}




这个版本就是谷歌用来测试ndk的 这个必须要改的 不然怎么编译都不会通过的

3、接下来要配置module里面的build.gradle

这个改的有点多

apply plugin: ‘com.android.model.application’

model {

android {

compileSdkVersion 23

buildToolsVersion “23.0.3”

defaultConfig {
applicationId "项目的包名"
minSdkVersion.apiLevel 15
targetSdkVersion.apiLevel 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles.add(file('proguard-rules.pro'))
}
}
ndk {
moduleName "SerialPort" //生成.so的名字
ldLibs.add('log')
}
}


}

dependencies {

compile fileTree(include: [‘*.jar’], dir: ‘libs’)

testCompile ‘junit:junit:4.12’

compile ‘com.android.support:appcompat-v7:23.2.1’

}



红线标注的是要注意的地方

4、ndk的配置 直接上图

在工程中

local.properties中配置ndk,ndk应该没什么要求 我用的是AS自动下载的,下载速度还是很快的,也可以自行下载,在网上搜android-ndk-r10d 这个版本也行 我试过了

ndk.dir=D:\sdk\ndk-bundle


sdk.dir=D:\sdk

5、剩下的就非常简单了,就是复制粘贴了,因为我们要用到,不用修改,直接复制到你的java文件夹下



然后把jni那个文件夹也拷贝到java文件夹下



这时候可以构建一下



构建后直接把3个文件夹



放入lib和obj中覆盖原来的



到现在已经配置完毕

6、代码调用

public class RadarActivity extends Activity {
private static final int msgKey = 2;
private FileInputStream mInputStream;
private SerialPort mSerialPort;
private  ReadThread mThread;
private  StringBuffer mSb;
private boolean flag = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.radar);
mSerialPort = new SerialPort(new File("/dev/ttyMT2"), 9600,0);
mThread = new ReadThread();
mThread.start();
mInputStream = (FileInputStream)mSerialPort.getInputStream();
}
public class ReadThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
while (!isInterrupted()) {
int size;
try {
byte[] buffer = new byte[4];
Log.d("RadarActivity", "----ReadThread start----");
if (mInputStream == null) {
return;
}
Log.d("RadarActivity", "----read(buffer)----");
size = mInputStream.read(buffer);
Log.d("RadarActivity", "----size----" + String.valueOf(size));
if (size > 0) {
Log.d("RadarActivity", "----ReadThread size>0----");
mSb = new StringBuffer();
for (int i = 0; i < buffer.length; i++) {
mSb.append(buffer[i]);
}
Log.d("RadarActivity", "shuju=" + mSb.toString());

Message msg = new Message();
msg.what = msgKey;
mHandler.sendMessage(msg);
}
} catch (IOException e) {
Log.d("RadarActivity", "----ReadThread printStackTrace----");
e.printStackTrace();
return;
}
}
}

}
private Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case msgKey:
Log.e("RadarActivity", mSb.toString());
}
}
break;
default:
break;
}
}
};
}


至此结束 ,我调用的结果



数据的处理可以根据的自己的需要,不知道对你有没有帮助。

相关文件下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AS串口操作