android如何读取串口数据 模拟器我没有用过不知道,但是那东西应该模拟不出个串口来吧??java只能写应用层,底层可用linux c 实现fd=open(device,权限);bytes=read(fd,buf,n);封装相应接口传递给java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.linux下对串口的常规操作2.Jni import com.friendlyarm.AndroidSDK.HardwareControler;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;public class MapGuider_Activity extends Activity{ private int serial_fd=0; private byte[] serial_RevBuf=new byte[100]; private byte[] serial_SendBuf="fsjajd".getBytes(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.mapguider); serial_fd=HardwareControler.openSerialPort("/dev/s3c2410_serial1", 115200, 8, 1); if(serial_fd!=-1) { System.out.println("打开串口成功"); HardwareControler.write(serial_fd, serial_SendBuf); lac_handler.post(RevicePosDataThread); } else { System.out.println("指定的串口不存在或在其它进程中已被打开"); } } @Override protected void onDestroy() { // TODO Auto-generated method stub HardwareControler.close(serial_fd); System.out.println("关闭串口"); lac_handler.removeCallbacks(RevicePosDataThread); super.onDestroy(); } Handler lac_handler =new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); } }; Runnable RevicePosDataThread =new Runnable() { int err=0; String s; public void run() { // TODO Auto-generated method stub while(true) { //Looper.prepare(); err=HardwareControler.select(serial_fd, 1, 0); if(err==1)//有数据可读 { HardwareControler.read(serial_fd, serial_RevBuf, 10); s=new String(serial_RevBuf); System.out.println("接收到串口数据"+s); } else if(err==0) //无数据可读 { System.out.println("没有接收到串口数据"); } else //出错 { System.out.println("接收到串口数据出错"); } try { Thread.sleep(2); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } };} 【求解决办法】电脑配置ADT老是出错 Android实现拨号功能的问题 Android 获取其他程序数据 and退出应用程序报异常,请大家帮忙解决 小妹请教如何用代码实现卸载! 手势翻页onfling 为什么一个acitivity已finish,但还会再执行onCreate方法? make all Cannot run program "make": Launching failed android 手机同时连接 wifi 和4g 如何使用 4g进行网络请求 在代码中如果子线程崩溃,如何让主线程不受影响 请教 我先实现 android的 dd命令,镜像备份 adnroid文件系统
2.Jni
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;public class MapGuider_Activity extends Activity{ private int serial_fd=0;
private byte[] serial_RevBuf=new byte[100];
private byte[] serial_SendBuf="fsjajd".getBytes();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.mapguider);
serial_fd=HardwareControler.openSerialPort("/dev/s3c2410_serial1", 115200, 8, 1);
if(serial_fd!=-1)
{
System.out.println("打开串口成功");
HardwareControler.write(serial_fd, serial_SendBuf);
lac_handler.post(RevicePosDataThread);
}
else
{
System.out.println("指定的串口不存在或在其它进程中已被打开");
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
HardwareControler.close(serial_fd);
System.out.println("关闭串口");
lac_handler.removeCallbacks(RevicePosDataThread);
super.onDestroy();
} Handler lac_handler =new Handler(){ @Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}
};
Runnable RevicePosDataThread =new Runnable()
{
int err=0;
String s;
public void run() {
// TODO Auto-generated method stub
while(true)
{
//Looper.prepare();
err=HardwareControler.select(serial_fd, 1, 0);
if(err==1)//有数据可读
{
HardwareControler.read(serial_fd, serial_RevBuf, 10);
s=new String(serial_RevBuf);
System.out.println("接收到串口数据"+s);
}
else if(err==0) //无数据可读
{
System.out.println("没有接收到串口数据");
}
else //出错
{
System.out.println("接收到串口数据出错");
}
try {
Thread.sleep(2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};}