android串口通信遇到的坑

最近在做人脸识别闸机,人脸识别认证成功后通过android端打开闸机,需要用到串口通信。

这里说一下串口通信实现的步骤及自己踩过的一些坑。

如图,其实所用到的还是谷歌2013年的代码库serialport-api,so库也都是谷歌原库

将下载好的库文件copy到你项目中如图所示的位置即可。

需要特别提出的是,SerialPort、SerialPortFinder必须放在android_serialport_api包下,你需要新建一个包。

下载地址:GitHub-android-serialport-api

现在说说遇到的坑,

public SerialPort(File device, int baudrate, int flags,Context context) throws SecurityException, IOException {
      /* 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) {
            Log.i("SerialPortUtils", "权限异常::"+e.toString());         
            e.printStackTrace();
            throw new SecurityException();
         }
      }
      mFd = open(device.getAbsolutePath(), baudrate, flags);
      if (mFd == null) {
         Log.e(TAG, "native open returns null");
         Log.i("SerialPortUtils", "mFd 为 null");
         Toast.makeText(context,"mFd为空!!!!",Toast.LENGTH_SHORT).show();
         throw new IOException();
      }
      mFileInputStream = new FileInputStream(mFd);
      mFileOutputStream = new FileOutputStream(mFd);
   }

这段代码是调用串口的关键代码,但是在执行su = Runtime.getRuntime().exec("/system/bin/su")时会报错,网上说是因为"/system/bin/su"这个路径不对,需要改成"/system/xbin/su",但依然不行,目前还未找到原因及解决方法。

其实这段代码主要是获取串口的读写权限,需要root设备之后执行su命令。

所以我的解决方法是,直接root设备用adb命令去打开串口的读写权限。

还有就是分享一下串口调试方法,我们可以用模拟器挂载到PC串口上,然后用android串口调试助手模拟出串口。这样调试的话就可以直接通过模拟器给PC串口发消息,省时省力,可以提高效率。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值