【发布时间】:2014-09-26 08:51:04
【问题描述】:
我正在使用 Cling 1.0.5
每次调用 remoteDeviceAdded 时,我都会填充视图。
在调试期间,我看到首先调用了deviceAdded,然后是remoteDeviceAdded
有时,remoteDeviceAdded 不会被调用,但deviceAdded 仍会被调用。
那么哪个用于发现远程媒体渲染器?
【问题讨论】:
标签: android upnp android-cling
我正在使用 Cling 1.0.5
每次调用 remoteDeviceAdded 时,我都会填充视图。
在调试期间,我看到首先调用了deviceAdded,然后是remoteDeviceAdded
有时,remoteDeviceAdded 不会被调用,但deviceAdded 仍会被调用。
那么哪个用于发现远程媒体渲染器?
【问题讨论】:
标签: android upnp android-cling
首先,请注意以下内容与Cling 2.0.1有关,但我认为逻辑是相同的。
在 Cling 中,LocalDevice 和 RemoteDevice 都扩展了 Device 类。 LocalDevice 和 RemoteDevice 之间的主要区别之一是 RemoteDevice 很可能是完全水合的——它的所有服务 XML 定义都被解析,UPnP 动作和状态被填充到 RemoteDevice 对象中。
在执行 LAN 搜索设备时,Cling 不会等待发现的设备对象完全水合,而是调用 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()获取的LocalDevice
remoteDeviceAdded() 的 RemoteDevice。我个人会选择第三种选择,开始使用 LocalDevice 操作(可能将其缓存在某处,或显示它)并等待设备成为完全水合的 RemoteDevice 以读取其状态并执行操作。
【讨论】: