我如何获得菜单点击事件
我使用mirror api创建了一个自定义菜单。
MainServlet上的menu创建方法
public List makeDealMenu(String appBaseUrl) { String dealMenuIconUrl = appBaseUrl + "static/images/deal_50.png"; MenuValue dealMenuValue = new MenuValue(); dealMenuValue.setDisplayName("DEAL"); dealMenuValue.setIconUrl(dealMenuIconUrl); List dealMenuValueList = new ArrayList(); dealMenuValueList.add(dealMenuValue); MenuItem dealMenuItem = new MenuItem(); dealMenuItem.setAction("CUSTOM"); dealMenuItem.setId("dealMenu"); dealMenuItem.setValues(dealMenuValueList); List customMenuItemList = new ArrayList(); customMenuItemList.add(dealMenuItem); return customMenuItemList; }
从doPost方法我调用MirrorClient
MirrorClient.insertSubscription(credential, WebUtil.buildUrl(request, "/notify"), userId, "timeline");
在MirrorClient中定义方法insertSubscription
public static Subscription insertSubscription(Credential credential, String callbackUrl, String userId, String collection) throws IOException { LOG.info("Attempting to subscribe verify_token " + userId + " with callback " + callbackUrl); callbackUrl = callbackUrl.replace("appspot.com", "Appspot.com"); Subscription subscription = new Subscription(); subscription.setCollection(collection); subscription.setCallbackUrl(callbackUrl); subscription.setUserToken(userId); return getMirror(credential).subscriptions().insert(subscription) .execute();
}
然后在NotifyServlet中以这种方式接收事件..
JsonFactory jsonFactory = new JacksonFactory(); Notification notification = jsonFactory.fromString(notificationString, Notification.class); if (notification.getUserActions().contains( new UserAction().setType("CUSTOM"))) { String selectedCustomMenuItemId = notification.getItemId(); if ("dealMenu".equals(selectedCustomMenuItemId)) { LOG.info("********** I am here in event"); } }
在Google Cloud Console中,我设置了回调url
http://localhost:8080/oauth2callback https://mirrornotifications.appspot.com/forward?url=http://localhost:8080/notify http://localhost:8080
如何从我的Servlet获取菜单的点击事件或操作? 请有人帮忙….
从mirror api java sample app可以看到NotifyServlet
实现。 (或者您从快速启动示例中找到相关示例项目的类型服务器)。
首先,您必须定义镜像api的通知回调。 那你必须订阅 寄存器 用于通知。 在此之后,您的玻璃器皿的所有菜单选择将通过镜像api传递给您的通知回调(通知的servlet)。
如果您的servlet是用Java编写的,请在您的通知callBack中尝试:
JsonFactory jsonFactory = new JacksonFactory(); // notificationString is parsed form httpRequest's inputstream which is send from Mirror API Notification notification = jsonFactory.fromString(notificationString, Notification.class); if (notification.getUserActions().contains(new UserAction().setType("CUSTOM").setPayload("dealMenu")) { // User selected CUSTOM menu item on your glassware }
编辑:定义您的通知回调urlhttps。 由此:
http://localhost:8080/notify
对此:
https://mirrornotifications.appspot.com/forward?url=http://localhost:8080/notify
要在生产环境中订阅通知,您必须提供带有有效SSL证书的回调URL以处理通知。 出于开发目的,您可以使用Google提供的订阅代理服务器将通知转发到非SSL回调URL。 https://developers.google.com/glass/tools-downloads/subscription-proxy
Edit2我修改了一些示例java项目,使其适用于localhost上的通知。 您可能希望将以下代码放在MirrorClient
类的insertSubscription
方法中:
// To work with notifications, modify the notify callback's url by adding subscription-proxy // callbackUrl = "https://mirrornotifications.appspot.com/forward?url=" + callbackUrl; if("http://localhost:8080/notify".equals(callbackUrl)) { callbackUrl = "https://mirrornotifications.appspot.com/forward?url=" + callbackUrl; }
- 逐个动画RecyclerView项目
- Android ReactNative java.lang.UnsatisfiedLinkError:可以找到要加载的DSO:libreactnativejni.so
- 使用asmack for android在XMPP数据包的Message标签中添加自定义属性?
- java String和String Builder问题
- 如何像Google+应用中那样制作气泡?
- 我们如何将yyyy-MM-dd-HH.mm.ss.SSSSSS转换为yyyy-MM-dd’T’HH:mm:ss.SSSz在Java中?
- 使用Service,AsyncTask和Thread制作智能Android Media Player应用程序
- Android Service(“startService&stopService”)和Play中的播放/停止按钮
- 获取星期的开始日期(可配置的开始星期几)