2014-09-26 41 views
0

我使用保鮮1.0.5Andorid的保鮮裝置VS remotedeviceadded

我每次remoteDeviceAdded被稱爲填充視圖。

調試過程中,我看到deviceAdded首先被調用,然後remoteDeviceAdded

有時候,remoteDeviceAdded不叫了起來,但deviceAdded仍然會被調用。

那麼,哪些用於發現遠程媒體渲染器?

有人請幫助我,或我指向正確的方式

在此先感謝

回答

1

首先,請注意,以下是關於保鮮2.0.1但我認爲邏輯是相同的。

在Cling中,擴展Device類的LocalDevice和RemoteDevice之間存在區別。 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()
  • 中獲得的LocalDevice如果您需要使用設備執行操作,則需要RemoteDevice從remoteDeviceAdded()

就我個人而言,我會去第三個選項,我開始使用LocalDevice(也許緩存它的地方,或顯示它),並等待設備成爲一個完全水合的RemoteDevice讀取其狀態並執行操作。

+0

謝謝,它解釋偉大 – nmxprime 2015-07-13 11:04:00