Android之串口(serial port)

最近在调试android串口使用,做下笔记。
Google给出了个Demo,网址: http://code.google.com/p/android-serialport-api/  ,这里可以下到APK及对应的源码。上面还有些开发者的提问及问题反馈。
以下是我使用过程中遇到的,也是很多开发者遇到的问题,希望对后来者有帮助。


Bug: java.lang.ClassCastException: android.app.Application
Fixed: 运行时会出现类型转换异常,子类转换为父类,所以报错
在AndroidManifest.xml中配置:
<application 
android:name=".XxxApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
........

</application>


Bug:串口读写权限问题,提示 You do not have read/write permission to the serial port

Fixed: 这里提供两种方法

方法一,修改系统启动初始化文件*.rc

针对target版(MTK平台),可以在mediatek/config/$ProjectName/init.project.rc文件后面添加

    chmod 077

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Android 串口通讯可以通过使用 USB 转串口线连接串口设备,并通过 Android 应用程序与其进行通信。以下是在 Android 应用程序中使用串口通讯的步骤: 1. 获取 USB 权限:在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.USB_PERMISSION" /> ``` 在应用程序中获取 USB 权限: ```java private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; private PendingIntent mPermissionIntent; private UsbManager mUsbManager; private UsbDevice mDevice; mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); registerReceiver(mUsbReceiver, filter); HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList(); Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); while (deviceIterator.hasNext()) { UsbDevice device = deviceIterator.next(); if (device.getVendorId() == VENDOR_ID && device.getProductId() == PRODUCT_ID) { mDevice = device; mUsbManager.requestPermission(mDevice, mPermissionIntent); break; } } private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if(device != null){ // 权限已获取,进行串口通讯 } } else { Log.d(TAG, "permission denied for device " + device); } } } } }; ``` 2. 打开串口:使用 UsbManager 打开串口连接: ```java private UsbDeviceConnection mConnection; private UsbSerialPort mPort; private UsbSerialDriver mDriver; List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager); if (!availableDrivers.isEmpty()) { mDriver = availableDrivers.get(0); mConnection = mUsbManager.openDevice(mDriver.getDevice()); if (mConnection != null) { List<UsbSerialPort> ports = mDriver.getPorts(); mPort = ports.get(0); mPort.open(mConnection); mPort.setParameters(9600, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); } } ``` 3. 读写数据:使用 UsbSerialPort 进行数据读写: ```java private UsbSerialPort mPort; private byte[] mReadBuffer = new byte[4096]; private UsbSerialPort.ReadCallback mCallback = new UsbSerialPort.ReadCallback() { @Override public void onReceivedData(byte[] data) { // 处理收到的数据 } }; public void writeData(byte[] data) { try { if (mPort != null) { mPort.write(data, WRITE_TIMEOUT); } } catch (IOException e) { e.printStackTrace(); } } public void readData() { try { if (mPort != null) { int len = mPort.read(mReadBuffer, READ_TIMEOUT); if (len > 0) { byte[] data = Arrays.copyOf(mReadBuffer, len); // 处理收到的数据 } } } catch (IOException e) { e.printStackTrace(); } } ``` 以上就是在 Android 应用程序中使用串口通讯的基本步骤。需要注意的是,不同的串口设备可能需要不同的参数进行设置,具体的参数需要根据设备的要求进行设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值