2014-09-26 7 views
0

Я использую цепляться 1.0.5Andorid устройство цепляться добавил против remotedeviceadded

Я заселение просматривать каждый раз remoteDeviceAdded называется.

Во время отладки, я вижу deviceAdded сначала вызывается, то remoteDeviceAdded

Иногда remoteDeviceAdded не называется, но deviceAdded все еще можно назвать.

Так что использовать для обнаружения удаленных медиа-рендерингов?

Кто-то пожалуйста, помогите мне или указать мне правильный путь

Заранее спасибо

ответ

1

Во-первых, обратите внимание, что следующие относится к Прилепляйся 2.0.1, но я думаю, что логика та же.

В Cling существует различие между LocalDevice и RemoteDevice, которые расширяют класс Device. Одним из основных отличий между LocalDevice и RemoteDevice является то, что RemoteDevice, скорее всего, полностью гидратируется - все его определения XML-сервисов анализируются, а действия и состояния UPnP заполняются в объекте RemoteDevice.

При выполнении поиска в локальной сети для устройств Cling не дожидается полного гидратации обнаруженного объекта устройства и вызывает localDeviceAdded(), который в свою очередь вызывает deviceAdded(). Когда это будет сделано, он вызовет remoteDeviceDiscoveryStarted() и попытается полностью увлажнить устройства, найденные в поиске. Если устройство было успешно увлажнено, то Клинг будет звонить remoteDeviceAdded(), который, в свою очередь, вызывает deviceAdded(). Если устройство не может быть полностью увлажнено, то вместо этого Cling будет звонить remoteDeviceDiscoveryFailed().

Просто, чтобы сделать его немного больше графики:

      Start search 
           + 
           | 
           | Device discovered 
           | 
           v 
          calls 
         LocalDeviceAdded() 
           + 
           |    calls 
           | remoteDeviceDiscoveryStarted() 
           | 
           v 
        Attempt to hydrate 
           + 
           | 
           | 
     calls   Success | Failure    calls 
remoteDeviceAdded() <---------+---------> remoteDeviceDiscoveryFailed() 

Так что теперь, чтобы ответить на ваш вопрос, это действительно зависит от того, что вы хотите выполнить в приложении:

  • Если вы нужно только указать основную информацию об обнаруженных устройствах, вы можете использовать LocalDevice, который вы получили в localDeviceAdded()
  • Если вам необходимо выполнить действия с устройством, вам понадобится RemoteDevice от remoteDeviceAdded().

Лично я хотел бы пойти на третий вариант, где я начать работать с LocalDevice (может кэшировать его где-нибудь, или отобразить) и ждать устройства, чтобы стать полностью гидратированного RemoteDevice читать свое состояние и выполнять действия.

+0

Спасибо, он объясняет большой – nmxprime