Java 在Android上获取CommPortIdentifier的实例

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

我正在使用Jamod 1.2在Android设备和PLC之间建立Modbus TCP连接。一切都很好,直到我被要求迁移到Modbus RTU(通过USB连接)。Jamod有一些类可以使用Modbus RTU,但我遇到了一个特殊的问题。 要建立Modbus RTU连接,必须进行以下简单操作:

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包装。其基本实现可在以下位置找到: