AllJoyn:从宣布的关于消息获取众所周知的名字?

时间:2016-12-17 19:55:06

标签: java alljoyn

AllJoyn是否可以从宣布的About消息中获取远程设备的知名名称?我希望稍后使用众所周知的名称连接到设备,而无需新的发现过程。

我知道我可以从About消息中获取设备ID,但众所周知的名称似乎有所不同:

DeviceID:558591fa-97db-464f-a8fa-efa30ecacc17

实际众所周知的名字:net.allplay.MediaPlayer.i558591fa-97db-464f-a8fa-efa30ecacc17.r3X5_6mxu

虽然我可以对开头进行硬编码,但我在About消息中找不到最后一部分(r3X5_6mxu)。我是在找错了地方还是这些信息不可用?

1 个答案:

答案 0 :(得分:2)

不是来自宣布的关于消息。

当您的应用收到通知后,您的注册AboutListener的announce()方法会被调用:

announced(String busName, int version, short port,
        AboutObjectDescription[] objectDescriptions, Map<String, Variant> aboutData)

busav参数在javadoc中被提及为远程附件的众所周知的名称,但根据我的经验,busName值是远程附件的唯一名称。 aboutData Map参数不包含众所周知的名称,也不包含远程附件的唯一名称(就aboutData map中的标准字段而言)。

但是,如果您希望将远程附件与其唯一名称相关联(假设已公布一个众所周知的名称),那么您可以实现BusListener接口并在本地总线上注册它。每次远程附件更改名称时,都会在您的应用程序中调用以下BusListener方法:

nameOwnerChanged(String busName, String previousOwner, String newOwner)

busName参数可以是远程附件的众所周知的名称(如果它有一个,否则它将是它的唯一名称)。例如,首次建立远程附件并为其分配名称时,将使用previousOwner = NULL和newOwner = [UniqueName]发送(由您的应用程序接收)nameOwnerChanged消息。或者,当远程附件终止时,例如,发送nameOwnerChanged消息,其中previousOwner = [UniqueName]和newOwner = NULL。通过这种方式,您可以看到远程附件的busName和相关的newOwner值。

通过在本地BusAttachment上调用findAdvertisedName(String namePrefix)来注册监听远程知名名称前缀的兴趣。