应用程序操作:通过动态快捷方式在 Google Assistant 中显示小部件

2024-03-08

考虑到官方文档和代码实验室中显示的选项,我的问题相对简单,但我一直在努力使其工作。

我想通过动态快捷方式触发一个小部件在 Google Assistant 中显示。看起来非常简单,但是当实现这样的功能和动态快捷方式时:

<capability
    android:name="actions.intent.GET_RESERVATION">
    <app-widget
        android:identifier="GET_MY_RESERVATION"
        android:targetClass="com.myapp.widget.MyWidget">
        <parameter
            android:name="reservation.reservationFor.name"
            android:key="shortcutId"
            android:required="true"
            app:shortcutMatchRequired="true" />
        <extra android:name="hasTts" android:value="true"/>
    </app-widget>
    <intent
        android:identifier="GET_MY_RESERVATION_FALLBACK"
        android:action="android.intent.action.VIEW"
        android:targetClass="com.myapp.widget.MyWidget">
    </intent>
</capability>
val shortcut = ShortcutInfoCompat.Builder(context, "shortcut_id")
        .setShortLabel("shortcut label"))
        .setExcludedFromSurfaces(ShortcutInfoCompat.SURFACE_LAUNCHER)
        .setLongLived(false)
        .addCapabilityBinding(
            "actions.intent.GET_RESERVATION",
            "reservation.reservationFor.name",
            context.resources.getStringArray(R.array.synonyms).toList()
        )
        .setIntent(Intent(context, MyWidget::class.java).apply {
            action = Intent.ACTION_VIEW
        })
        .setRank(2)
        .build()
ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

为快捷方式定义的意图是触发的意图,而不是为功能定义的小部件。此外,上面的快捷方式定义正在使应用程序崩溃,因为它期望其意图是可以通过以下方式调用的东西startActivity()(而小部件则不是)。

如果我静态定义相同的快捷方式:

<shortcut
    android:shortcutId="shortcut_id"
    android:shortcutShortLabel="shortcut label">
    <capability-binding
        android:key="actions.intent.GET_RESERVATION">
        <parameter-binding
            android:key="reservation.reservationFor.name"
            android:value="@array/synonyms" />
    </capability-binding>
</shortcut>

我可以省略意图,触发此操作会将逻辑按预期委托给功能的小部件。不幸的是,我无法找到一种方法来创建没有意图的动态快捷方式。

我这里缺少什么吗?感谢帮助。


当您添加addCapabilityBinding致电ShortcutInfoCompat构建器,您告诉 Google Assistant 这安卓快捷方式可以列为谷歌助理快捷方式。触发推送快捷方式的代码后,您的快捷方式应该出现在两个位置:长按应用程序图标后,以及 Google Assistant 的设置中(您可以在 Google Assistant 上输入“我的快捷方式”以查看可用快捷方式列表)。我尝试在模拟器上添加快捷方式,但不幸的是我在 Google Assistant 上看不到它。更多信息在官方文档 https://developer.android.com/guide/app-actions/dynamic-shortcuts#test_dynamic_shortcuts_with_assistant.

不过,这似乎并不像您想要实现的目标:从 Android 快捷方式触发小部件。这Intent您必须在此处定义的必须是 Android 意图。在大多数情况下,我们声明 Android 意图Activity从主机应用程序but如果您有信息,您可以深入链接到其他应用程序。事实证明,我已经制作了一些从我的 Android 应用程序深层链接到 Google Assistant 的应用程序。你可以尝试这样的事情:

.setIntent(Intent(Intent.ACTION_VIEW, Uri.parse("https://assistant.google.com/services/invoke/uid/YOUR_UDID?intent=actions.intent.GET_TAXI_RESERVATION")))

Where YOUR_UDID是应用程序操作插件上列出的一个。我想一旦你的应用程序投入生产,UDID 就会不同。我可以按照此说明进行操作:)希望这会有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序操作:通过动态快捷方式在 Google Assistant 中显示小部件 的相关文章

  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 如何在发布期间复制未版本化的测试资源:执行?

    我的问题与 Maven 在发布时不会复制未跟踪的资源 https stackoverflow com questions 10378708 maven doesnt copy untracked resources while releas
  • CFdump cfcomponent cfscript

    可以在 cfcomponent 中使用 cfdump 吗 可以在 cfscript 中使用 cfdump 吗 我知道 anser 不是 那么如何发出 insde cfcomponent 函数的值 cf脚本 我用的是CF8 可以在 cfcom
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea
  • TIFF 元数据的最大大小是多少?

    TIFF 文件元数据的单个字段中可以合并的元数据数量是否有最大限制 我想在 ImageDescription 字段中存储大文本 最多几 MB 没有具体的最大限制ImageDescription但是 整个 TIFF 文件存在最大文件大小 该最
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 如何从日期中查找该月的最后一天?

    如何在 PHP 中获取该月的最后一天 Given a date 2009 11 23 我要2009 11 30 并给出 a date 2009 12 23 我要2009年12月31日 t返回给定日期所在月份的天数 请参阅的文档date ht
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra
  • 从超立方体图像中获取文本的确切位置

    使用 tesseract 中的 GetHOCRText 0 方法 我能够检索 html 中的文本 并在 webview 中呈现 html 时 我能够获取文本 但图像中文本的位置与输出不同 任何想法都非常有帮助 tesseract gt Se
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid
  • rspec 中的模拟方法链

    有一系列方法可以获得user目的 我试图模拟以下内容以返回user in my Factory Girl current user AuthorizeApiRequest call request headers result 我可以模拟该
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Erlang dict的时间复杂度

    我想知道 Erlang OTP 是否dict模块是作为哈希表实现的 在这种情况下它是否能提供这样的性能 平均情况 Search O 1 n k Insert O 1 Delete O 1 n k 最坏的情况下 Search O n Inse
  • 升级到 Rails 6 时是否有一种编程方法可以检测 Zeitwerk::NameError?

    我目前正在将旧的 Rails 应用程序迁移到 Rails 6 好像项目中有些文件和里面定义的类不一致 运行应用程序测试时我没有看到此错误 但部署后我收到如下错误 Zeitwerk NameError expected file app my
  • 强制 Listview 不重复使用视图(复选框)

    我做了一个定制Listview 没有覆盖getView 方法 Listview 中的每个项目都具有以下布局 联系布局 xml

随机推荐