Cling:getBaseURL在某些设备上返回null,而在其他设备上运行

时间:2013-01-26 17:15:27

标签: java android upnp

我正在开发一款使用Cling应用程序扫描网络设备的应用。我试图修改它,以便我也可以使用getBaseURL方法查看设备的IP地址。但是,当我扫描设备时,其中一些显示IP,其他返回null。有没有办法解决这个问题?

        @Override
    public String toString() {

        String name =
                device.getDetails() != null && device.getDetails().getFriendlyName() != null
                        ? device.getDetails().getFriendlyName() +device.getDetails().getBaseURL()
                        : device.getDisplayString();

1 个答案:

答案 0 :(得分:0)

有趣的是,org.teleal.cling.model.meta.DeviceDetails有许多构造函数,但只有两种类型:获得friendlyName但没有baseURL(因此它保留为null)和其他(只有两个)得到的类型都。 baseURL是最终私密的,因此您之后无法设置它。我个人不理解设计决策(为什么friendlyName的知识被认为取代了baseURL的知识),但IMO存在问题。在DeviceDetails的最后一个构造函数中放置一个断点(唯一一个设置私有成员的构造函数)并观察它从哪里被调用(以及通过哪个特定的构造函数重载)。每个UPnP设备都有一个baseURL,它在LOCTIF标题中告诉它NOTIFY消息。因此DeviceDetails不提供它的事实是Cling对它不感兴趣的问题(即不调用接受它的构造函数)。