【问题标题】:How I get menu click event我如何获得菜单点击事件
【发布时间】:2013-11-26 14:22:23
【问题描述】:

我使用 mirror api 创建了一个自定义菜单。
MainServlet

上的菜单创建方法
public List<MenuItem> makeDealMenu(String appBaseUrl) {
    String dealMenuIconUrl = appBaseUrl + "static/images/deal_50.png";

    MenuValue dealMenuValue = new MenuValue();
    dealMenuValue.setDisplayName("DEAL");
    dealMenuValue.setIconUrl(dealMenuIconUrl);

    List<MenuValue> dealMenuValueList = new ArrayList<MenuValue>();
    dealMenuValueList.add(dealMenuValue);

    MenuItem dealMenuItem = new MenuItem();
    dealMenuItem.setAction("CUSTOM");
    dealMenuItem.setId("dealMenu");
    dealMenuItem.setValues(dealMenuValueList);

    List<MenuItem> customMenuItemList = new ArrayList<MenuItem>();
    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 中获取菜单的点击事件或操作?请有人帮忙....

【问题讨论】:

    标签: java google-glass google-mirror-api


    【解决方案1】:

    从镜像 apijava sample app 你可以看到NotifyServlet 的实现。 (或者你有什么类型的服务器从quickstart samples找到相关的示例项目)。

    首先你必须定义你的通知回调到镜像 api。然后您必须订阅 register 以获取通知。在此之后,您的玻璃器皿的所有菜单选择都将通过镜像 api 传递给您的通知回调(用于通知的 servlet)。

    如果您的 servlet 是用 Java 编写的,请在您的通知回调中试试这个:

    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        
    } 
    

    编辑:定义您的通知回调网址 https。从此:

    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;
    }
    

    【讨论】:

    • 注册是什么意思?有像语音命令这样的任何形式来注册我的自定义菜单项到镜像 api 或者只需要在我的项目中定义我的镜像客户端
    • 我想我没有抓住重点,现在日志上没有错误,但是虽然我没有收到通知。我应该从哪里调用 MirrorClient.insertSubscription() 方法。从我的 doPost 方法或我生成捆绑时间线项的位置?
    • 我可以看到我杯子里的菜单。点击菜单后,时间线会显示一个同步图标,并且时间线将成为第一个位置。通常该时间线的位置是 3。点击菜单后它变为 1。但我没有从通知 servlet 获得事件。更改谷歌控制台中的回调网址,如“mirrornotifications.appspot.com/forward?url=http://…”。还做了你之前告诉我的事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多