我正在使用 Cling 1.0.5
每次remoteDeviceAdded
调用我都会填充视图。
在调试期间,我看到deviceAdded
首先调用,然后remoteDeviceAdded
有时,remoteDeviceAdded
不会被调用,但deviceAdded
仍会被调用。
那么哪个用于发现远程媒体渲染器?
我正在使用 Cling 1.0.5
每次remoteDeviceAdded
调用我都会填充视图。
在调试期间,我看到deviceAdded
首先调用,然后remoteDeviceAdded
有时,remoteDeviceAdded
不会被调用,但deviceAdded
仍会被调用。
那么哪个用于发现远程媒体渲染器?
首先,请注意以下内容与 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()
所以现在回答你的问题,这真的取决于你想在你的应用程序中执行什么:
localDeviceAdded()
remoteDeviceAdded()
.就我个人而言,我会选择第三种选择,即我开始使用 LocalDevice 操作(可能将其缓存在某处,或显示它)并等待设备成为完全水合的 RemoteDevice 以读取其状态并执行操作。