AllJoyn:从已发布的关于消息中获取知名名称?

AllJoyn: Get well-known name from announced About message?

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

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

设备ID:558591fa-97db-464f-a8fa-efa30ecacc17

实际知名度:net.allplay.MediaPlayer.i558591fa-97db-464f-a8fa-efa30ecacc17.r3X5_6mxu

虽然我可以对开头进行硬编码,但我无法在“关于”消息中找到最后一部分 (r3X5_6mxu)。我是不是找错地方了,或者这个信息不可用?

不是来自已公布的关于消息。

当您的应用收到通知时,将调用您注册的 AboutListener 的 announcement() 方法:

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

javadoc 中提到 busName 参数是远程附件的众所周知的名称,但根据我的经验,busName 值一直是远程附件的唯一名称。并且 aboutData 映射参数既不包含众所周知的名称,也不包含远程附件的唯一名称(就 aboutData 映射中的标准字段而言)。

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

nameOwnerChanged(String busName, String previousOwner, String newOwner)

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

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