public SerialPort(File device, int baudrate, int flags) throws SecurityException, IOException {
//检查访问权限,如果没有读写权限,进行文件操作,修改文件访问权限
if (!device.canRead() || !device.canWrite()) {
try {
//通过挂载到linux的方式,修改文件的操作权限
Process su = Runtime.getRuntime().exec("/system/bin/su");
String cmd = "chmod 777 " + device.getAbsolutePath() + "\n" + "exit\n";
su.getOutputStream().write(cmd.getBytes());
if ((su.waitFor() != 0) || !device.canRead() || !device.canWrite()) {
//device.canRead() device.canWrite() 返回都flase 估计就是串口权限问题了 我是找开发商 开权限的
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);
}
执行 /system/xbin/su这个进程,是获取root权限。这个返回的process,是一个root过的shell,可以在process的输入流中,以root权限执行其他命令了。