我想在Java中创建一个简单的XMPP客户端,可以与其他客户端共享位置(XEP-0080)。我已经知道可以使用smack库来处理XMPP,并且它支持PEP,这是XEP-0080所需的。有没有人有实现此功能的示例或任何指针?我在谷歌上找不到任何内容。提前致谢。
ConfigureForm form = new ConfigureForm(FormType.submit);
form.setPersistentItems(false);
form.setDeliverPayloads(true);
form.setAccessModel(AccessModel.open);
PubSubManager manager
= new PubSubManager(connection, "pubsub.communitivity.com");
Node myNode = manager.createNode("http://jabber.org/protocol/geoloc", form);
StringBuilder body = new StringBuilder(); //ws for readability
body.append("<geoloc xmlns='http://jabber.org/protocol/geoloc' xml:lang='en'>");
body.append(" <country>Italy</country>");
body.append(" <lat>45.44</lat>");
body.append(" <locality>Venice</locality>");
body.append(" <lon>12.33</lon>");
body.append(" <accuracy>20</accuracy>");
body.append("</geoloc>");
SimplePayload payload = new SimplePayload(
"geoloc",
"http://jabber.org/protocol/geoloc",
body.toString());
String itemId = "zz234";
Item<SimplePayload> item = new Item<SimplePayload>(itemId, payload);
// Required to recieve the events being published
myNode.addItemEventListener(myEventHandler);
// Publish item
myNode.publish(item);
PEPProvider pepProvider = new PEPProvider();
pepProvider.registerPEPParserExtension(
"http://jabber.org/protocol/tune", new TuneProvider());
ProviderManager.getInstance().addExtensionProvider(
"event",
"http://jabber.org/protocol/pubsub#event", pepProvider);
Tune tune = new Tune("jeff", "1", "CD", "My Title", "My Track");
pepManager.publish(tune);
您需要编写GeoLocProvider和GeoLoc类。
看一下其他扩展实现的现有代码。这将是您开发当前库的最佳示例。不幸的是,我不知道是否有开发人员指南,所以我只是自己探索了一些基础知识,直到我感到对环境感到舒适为止。提示:使用提供程序扩展功能添加自定义提供程序以针对特定扩展进行操作。
您可以在Smack的开发者论坛上提问,并从这里向项目贡献您的代码。如果您实现了此扩展的实现,则可以自行获得提交权限(如果需要的话)。
TuneProvider
和Tune
类? - Hunt