Java dbus 调制解调器管理器

Posted

技术标签:

【中文标题】Java dbus 调制解调器管理器【英文标题】:Java dbus ModemManager 【发布时间】:2021-06-09 16:57:53 【问题描述】:

我正在尝试从 Java 中为 ModemManager 访问没有运气的 dbus。 我使用来自https://github.com/hypfvieh/dbus-java 的 dbus-java。 到目前为止我所做的是:

    获取到总线的连接

DBusConnection conn = DBusConnection.getConnection(DBusConnection.DBusBusType.SYSTEM);

    导入的 Introspection xml,在设备上生成(但我不确定这项工作是否正常).. 尝试连接到特定总线以处理信息:
Modem modem = conn.getRemoteObject("org.freedesktop.ModemManager1", "/org/freedesktop/ModemManager1/Modem", Modem.class)
    连接处理程序以获取信息:
conn.addSigHandler(Modem.StateChanged.class, new DBusSigHandler<Modem.StateChanged>() 
                    @Override
                    public void handle(Modem.StateChanged s) 
                        System.out.println("State" + s._new);
                    
                ); 

结果.. 没有事件被触发。在设备上,我看到(使用 dbus-monitor --system)在我运行的所有时间都会触发事件。

例如,在 dbus-monitor 中我看到:

signal time=1615482074.152996 sender=:1.5 -> destination=(null destination) serial=478 path=/org/freedesktop/ModemManager1/Modem/0; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
   string "org.freedesktop.ModemManager1.Modem"
   array [
      dict entry(
         string "SignalQuality"
         variant             struct 
               uint32 80
               boolean true
            
      )
   ]
   array [
   ]

有人能指出我正确的方向吗?我确定我做错了什么。 谢谢 吉安玛丽亚

【问题讨论】:

【参考方案1】:

此设置中的第二个字符串是错误的:

Modem modem = conn.getRemoteObject("org.freedesktop.ModemManager1", "/org/freedesktop/ModemManager1/Modem", Modem.class)

应该是完整的对象路径;例如对于索引 0 处的调制解调器:

Modem modem = conn.getRemoteObject("org.freedesktop.ModemManager1", "/org/freedesktop/ModemManager1/Modem/0", Modem.class)

【讨论】:

以上是关于Java dbus 调制解调器管理器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 c++ linux 中获取 3g 调制解调器信号强度?

如何在 Windows 中获取 COM 端口的友好名称?

读《利用振幅型空间光调制器作相移器的相移干涉术》有感

Linux系统管理员修炼三层次

如何查看手机端口号?

我的电脑是thinkpad的 重装系统之后旁边那些热键就没用了 怎么办