Android cling设备添加vs remotedeviceadded

时间:2014-09-26 08:51:04

标签: android upnp android-cling

我正在使用Cling 1.0.5

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

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

有时,remoteDeviceAdded未被调用,但仍会调用deviceAdded

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

1 个答案:

答案 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()
  • 中的LocalDevice
  • 如果您需要对设备执行操作,则需要remoteDeviceAdded()的RemoteDevice。

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