【问题标题】:Google Assistant Voice Interaction Open CommandGoogle Assistant 语音交互打开命令
【发布时间】:2018-06-07 22:06:25
【问题描述】:

是否有任何可靠的方法来检查我的活动是从 Google 助理(使用开始/打开命令)还是从启动器图标开始的?

关于 Open 命令状态的文档

(默认工作;没有特定意图。)

所以我并不完全乐观。

【问题讨论】:

  • 从技术上讲,两者之间不应该有任何区别,您应该处理这些操作,因为它们是相同的,因为用户希望通过语音和手动方式获得相同的结果
  • 基本上你是对的。但我需要不同的行为。

标签: android api voice interaction


【解决方案1】:

简短的回答:实际上没有

默认语音命令:Open XYZ 其中XYZ 是应用程序的名称,实际上没有附加任何信息来让您知道该请求已由 Google 助理处理.

正如我已经告诉过你的那样,这样做可能是为了防止开发人员附加用户无法从 open 命令中获得的行为,该命令应该只是打开应用程序而不是其他任何东西。

注意:如果用户指定其他命令,例如Open XYZ and play ABC song,这会产生一个自定义意图,您可以在onCreate() 方法中使用getAction() 获得,如here 所述,但是这不是您的具体情况。

参考:https://developers.google.com/voice-actions/system/#open_actions

【讨论】:

  • 对我来说听起来不是什么大问题.. 但我想这是谷歌的逻辑
  • 是的,你是对的,我认为这是正确的逻辑。 open 命令是最基本的命令,不应产生任何手动点击图标不会产生的副作用。
  • 为什么不呢?
【解决方案2】:

如果应用程序由 Google Assistant 语音交互打开命令启动,我在调试应用程序时发现以下差异

当它由 Google Assistant 语音交互打开命令启动时

你会得到 "android.intent.extra.REFERRER_NAME" 包含 getIntent().getExtras() 中的键

getIntent().getExtras().containsKey("android.intent.extra.REFERRER_NAME")

if(getIntent().getExtras()!= null && getIntent().getExtras().containsKey("android.intent.extra.REFERRER_NAME")){
            Log.e(TAG, "onCreate: From Voice assistance");
        }else{
            Log.e(TAG, "onCreate: Not From Voice assistance");
        }

但如果从菜单开始,你将不会得到那个键。

也许这可以解决你的问题。

【讨论】:

  • 在这两种情况下我都没有得到这个密钥。我可以使用 getReferrer() 获取引荐来源网址,但如果启动器是 Google 的启动器,它们都是同一个包
  • @Vlad 请检查我编辑过的答案,它是有用的补丁,不是完全成熟的解决方案
  • 正如我所说.. 在 Nexus 6P 和 android 8.1 上根本没有得到这个密钥
猜你喜欢
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多