当前位置: 首页 > 编程笔记 >

Android串口操作方法实例

彭博厚
2023-03-14
本文向大家介绍Android串口操作方法实例,包括了Android串口操作方法实例的使用技巧和注意事项,需要的朋友参考一下

1.首先下载一个libserial_port.so,新建目录libs/armeabi,将so文件放到该目录下。
2.定义串口类,在类的构建函数中修改权限,打开设备,创建输入流和输出流,通过native接口访问串口打开关闭函数


public class SerialPort {

 /*Do not remove or rename the field mFd: it is used by native method close();*/

 public SerialPort(File device, int baudrate, int flags) throws SecurityException, IOException, InvalidParameterException{

//如果串口权限不够,改变权限

  /* Check access permission */

  if (!device.canRead() || !device.canWrite()) {

   try {

    /* Missing read/write permission, trying to chmod the file */

    Process su;

    su = Runtime.getRuntime().exec("/system/bin/su");

    String cmd = "chmod 666 " + device.getAbsolutePath() + "\n"

      + "exit\n";

    su.getOutputStream().write(cmd.getBytes());

    if ((su.waitFor() != 0) || !device.canRead()

      || !device.canWrite()) {

     throw new SecurityException();

    }

   } catch (Exception e) {

    e.printStackTrace();

    throw new SecurityException();

   }

  }

  mFd = open(device.getAbsolutePath(), baudrate, flags);//打开串口

  if (mFd == null) {

   Log.e(TAG, "native open returns null");

   throw new IOException();

  }

  mFileInputStream = new FileInputStream(mFd);//串口输入流

  mFileOutputStream = new FileOutputStream(mFd);//串口输出流

 }

 // Getters and setters

 public InputStream getInputStream() {

  return mFileInputStream;

 }

 public OutputStream getOutputStream() {

  return mFileOutputStream;

 }

 // JNI

 private native static FileDescriptor open(String path, int baudrate, int flags);//c文件中的串口open()函数

 public native void close();//c文件中的串口close()函数

 static {

  System.loadLibrary("serial_port");//加载串口库

 }

}

}


3.定义抽象类ServerData

public abstract class ServerData {

 protected SerialPort mSerialPort;

 protected OutputStream mOutputStream;

 private InputStream mInputStream;

 private ReadThread mReadThread;

 private class ReadThread extends Thread {

  @Override

  //在线程中读取数据并处理数据

  public void run() {

   super.run();

   byte[] buffer = new byte[128];

   int size;

   while(true) {

    try {

     if (mInputStream == null) return;

     size = mInputStream.read(buffer);//读取数据

     if (size > 0) {

      onDataReceived(buffer, size);//处理数据

     }

    } catch (IOException e) {

     e.printStackTrace();

     return;

    }

   }

  }

 }

4.实例化串口类,输出流和输入流,实例化读取线程并开始执行该线程

[code]

 public ServerData(String path, int baudrate){

  try {

   mSerialPort = new SerialPort(new File(path), baudrate, 0); 

   mOutputStream = mSerialPort.getOutputStream();

   mInputStream = mSerialPort.getInputStream();

   /* Create a receiving thread */

   mReadThread = new ReadThread();

   mReadThread.start();

  } catch (SecurityException e) {

  } catch (IOException e) {

  } catch (InvalidParameterException e) {

  }

 }

 protected abstract void onDataReceived(final byte[] buffer, final int size);

}


[/code]
5.然后再新建一个类,在新建的类中实现上面的抽象函数,并写一个函数返回读取到的数据。

package View;

//导入R类,所在包不同,不能直接饮用,需要导入才可以使用

import android_serialport_api.sample.R;

/* EtcView类,Etc界面管理 */

public class SerialView {

 private Activity context = null;

 private Serial mEtcServer = null;

 /* Etc界面构造函数 */

 public SerialView(Activity context) {

  this.context = context;

 }

 public void EtcInitView() {

  //这样才可以找到android_serialport_api.sample包下的id

  TextView mytext=(TextView)context.findViewById(R.id.mytext);

  mEtcServer = new Serial("/dev/s3c2410_serial3", 9600);

 }

 public void EtcRefresh() {

  //返回串口线程读取的数据

  byte[] buffer = mEtcServer.getdata();

  String recString=new String(buffer);//将byte[]的数组转换成字符串string

  mytext.setText(recString);//设置字符文本

  buffer = null;

 }

}

 类似资料:
  • 本文向大家介绍Python操作串口的方法,包括了Python操作串口的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python操作串口的方法。分享给大家供大家参考。具体如下: 首先需确保安装了serial模块,如果没安装的话就安装一下python-pyserial。 一个Python实现的串口Echo 希望本文所述对大家的Python程序设计有所帮助。

  • 本文向大家介绍Android串口通信之串口读写实例,包括了Android串口通信之串口读写实例的使用技巧和注意事项,需要的朋友参考一下 在Android串口通信:基本知识梳理的基础上,我结合我项目中使用串口的实例,进行总结; Android使用jni直接进行串口设备的读写网上已经有开源项目了,本文是基于网上的开源项目在实际项目中的使用做的调整和优化; Google串口开源项目 下面是我项目中的相关

  • 本文向大家介绍jQuery队列操作方法实例,包括了jQuery队列操作方法实例的使用技巧和注意事项,需要的朋友参考一下 jQuery核心中, 有一组队列控制方法, 这组方法由queue()/dequeue()/clearQueue()三个方法组成, 它对需要连续按序执行的函数的控制可以说是简明自如, 主要应用于animate ()方法, ajax以及其他要按时间顺序执行的事件中. 先解释一下这组方

  • 本文向大家介绍C#串口通信实现方法,包括了C#串口通信实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#串口通信实现方法。分享给大家供大家参考。具体方法如下: 通过COM1发送数据,COM2接收数据。当COM2接收完本次发送的数据后,向COM1发送信息通知COM1本次数据已发完,COM1接到通知后,再发下一段数据。这样可以确保每次发送的数据都可以被正确接收。 代码如下: 辅助代码

  •  KAG 的操作方法说明如下。 Note  这是通常情况下的操作。虽然根据游戏的不同,也会有些功能不开放,不过把这个直接复制粘贴到游戏说明书里也无所谓吧(汗) 基本的操作 「鼠标左键单击」或「滚轮向下滚动」或「确认键」或「空格键」 显示下一段文字、选择选项、按下按钮、选择勾选框等动作 「鼠标右键单击」或「ESC 键」 打开历史记录,或呼叫右键菜单 「↑」「↓」 或 「←」「→」 或 「TAB」「S

  • 本文向大家介绍JavaScript操作Cookie方法实例分析,包括了JavaScript操作Cookie方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript操作Cookie方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的javascript程序设计有所帮助。