我正在使用Cling 1.0.5
每次调用remoteDeviceAdded
时,我都会填充视图。
在调试期间,我看到首先调用deviceAdded
,然后调用remoteDeviceAdded
有时,remoteDeviceAdded
未被调用,但仍会调用deviceAdded
。
那么用于发现远程媒体渲染器?
答案 0 :(得分:2)
首先,请注意以下内容属于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()
remoteDeviceAdded()
的RemoteDevice。就个人而言,我会选择第三个选项,我开始使用LocalDevice进行操作(可能将其缓存到某处或显示它)并等待设备成为完全水合的RemoteDevice以读取其状态并执行操作。