Andriod串口通信开发(免ROOT权限)

本文介绍了如何在Android应用中实现串口通信,无需ROOT权限。使用usb-serial-for-android库,支持Android 3.1及更高版本。通过简单步骤配置工程,包括引入库、设备过滤器设置和AndroidManifest.xml修改,实现串口通信功能。示例代码包含MainActivity.java、activity_main.xml、device_filter.xml和AndroidManifest.xml的内容,适用于Android Studio 2.2.3。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在尝试写一个安卓版的无人机地面站,参考了DroidPlanner的代码,发现了一个很好用的串口通信组件usb-serial-for-android,免root权限,不需要NDK,不过只支持Android 3.1+。

github地址:https://github.com/mik3y/usb-serial-for-android

 

关于用法README.md中已经介绍得很详尽了,可以简单归结为以下几点:

1. 把usb-serial-for-android复制到工程中,Eclipse和Android Studio的处理方式各不相同,具体步骤可参考这里

2. 复制device_filter.xml到工程的res/xml目录(没有则自行新建);

3. 配置AndroidManifest.xml;

 1 <activity
 2     android:name="..."
 3     ...>
 4   <intent-filter>
 5     <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
 6   </intent-filter>
 7   <meta-data
 8       android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
 9       android:resource="@xml/device_filter" />
10 </activity>

4. 编写代码。

 1 // Find all available drivers from attached devices.
 2 UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
 3 List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);
 4 if (availableDrivers.isEmpty()) {
 5   return;
 6 }
 7 
 8 // Open a connection to the first available driver.
 9 UsbSerialDriver driver = availableDrivers.get(0);
10 UsbDeviceConnection connection = manager.openDevice(driver.getDevice());
11 if (connection == null) {
12   // You probably need to call UsbManager.requestPermission(driver.getDevice(), ..)
13   return;
14 }
15 
16 // Read some data! Most have just one port (port 0).
17 UsbSerialPort port = driver.getPorts().get(0);
18 try {
19   port.open(connection);
20   port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
21 
22   byte buffer[] = new byte[16];
23   int numBytesRead = port.read(buffer, 1000);
24   Log.d(TAG, "Read " + numBytesRead + " bytes.");
25 } catch (IOException e) {
26   // Deal with error.
27 } finally {
28   port.close();
29 }

 

以下是我修改过的简单的例子(基于Android Studio 2.2.3)。

 

MainActivity.java

  1 package com.stshdz.drone.shdrone;
  2 
  3 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值