Java 在Android上获取CommPortIdentifier的实例
我正在使用Jamod 1.2在Android设备和PLC之间建立Modbus TCP连接。一切都很好,直到我被要求迁移到Modbus RTU(通过USB连接)。Jamod有一些类可以使用Modbus RTU,但我遇到了一个特殊的问题。 要建立Modbus RTU连接,必须进行以下简单操作:Java 在Android上获取CommPortIdentifier的实例,java,android,modbus,securitymanager,Java,Android,Modbus,Securitymanager,我正在使用Jamod 1.2在Android设备和PLC之间建立Modbus TCP连接。一切都很好,直到我被要求迁移到Modbus RTU(通过USB连接)。Jamod有一些类可以使用Modbus RTU,但我遇到了一个特殊的问题。 要建立Modbus RTU连接,必须进行以下简单操作: SerialParameters params = new SerialParameters(); params.setPortName(portname); ... SerialConnection con
SerialParameters params = new SerialParameters();
params.setPortName(portname);
...
SerialConnection connection = new SerialConnection(params);
connection.open();
但由于以下障碍,连接无法打开:
public class SerialConnection implements SerialPortEventListener {
...
public void open() throws Exception {
try {
this.m_PortIdentifier = CommPortIdentifier.getPortIdentifier(this.m_Parameters.getPortName());
} catch (NoSuchPortException var2) {
if(Modbus.debug) {
System.out.println(var2.getMessage());
}
throw new Exception(var2.getMessage());
}
...
}
...
}
在这里,lib试图使用静态方法CommPortIdentifier.getPortIdentifier(String portname)获取CommPortIdentifier的实例。深入研究:
public class CommPortIdentifier {
public static CommPortIdentifier getPortIdentifier(String var0) throws NoSuchPortException {
SecurityManager var1 = System.getSecurityManager();
if(var1 != null) {
var1.checkDelete(propfilename);
}
...
}
...
}
这是邪恶系统的根源。getSecurityManager()。在Android中,它总是返回null
最后,问题是:有没有办法在Android上生成CommPortIdentifier?或者有人能想出另一个解决问题的办法
p.S.我希望避免用其他东西替换Jamod或编写自己的Modbus RTU包装,因为很多代码依赖于lib。除非没有其他选择。最终为Android编写了自己的Modbus RTU包装。其基本实现可在以下位置找到: