0

我正在使用 Cling 1.0.5

每次remoteDeviceAdded调用我都会填充视图。

在调试期间,我看到deviceAdded首先调用,然后remoteDeviceAdded

有时,remoteDeviceAdded不会被调用,但deviceAdded仍会被调用。

那么哪个用于发现远程媒体渲染器?

4

1 回答 1

2

首先,请注意以下内容与 Cling 2.0.1 有关,但我认为逻辑是相同的。

在 Cling 中,LocalDevice 和 RemoteDevice 都扩展了 Device 类。LocalDevice 和 RemoteDevice 之间的主要区别之一是 RemoteDevice 很可能是完全水合的——它的所有服务 XML 定义都被解析并且 UPnP 操作和状态被填充到 RemoteDevice 对象中。

在对设备执行 LAN 搜索时,Cling 不会等待发现的 Device 对象完全水合,localDeviceAdded()然后调用deviceAdded(). 完成后,它将调用remoteDeviceDiscoveryStarted()并尝试对搜索中找到的设备进行完全水合。如果设备已成功补水,则 Cling 将调用remoteDeviceAdded()它进而调用deviceAdded(). 如果设备无法完全补水,则 Cling 将改为调用remoteDeviceDiscoveryFailed().

只是为了使它更图形化:

                         Start search
                              +
                              |
                              | Device discovered
                              |
                              v
                            calls
                      LocalDeviceAdded()
                              +
                              |             calls
                              | remoteDeviceDiscoveryStarted()
                              |
                              v
                     Attempt to hydrate
                              +
                              |
                              |
       calls          Success | Failure               calls
remoteDeviceAdded() <---------+---------> remoteDeviceDiscoveryFailed()

所以现在回答你的问题,这真的取决于你想在你的应用程序中执行什么:

  • 如果只需要列出发现的设备的基本信息,可以使用你获取的LocalDevicelocalDeviceAdded()
  • 如果您需要对设备执行操作,则需要来自remoteDeviceAdded().

就我个人而言,我会选择第三种选择,即我开始使用 LocalDevice 操作(可能将其缓存在某处,或显示它)并等待设备成为完全水合的 RemoteDevice 以读取其状态并执行操作。

于 2015-07-11T22:13:46.190 回答