我怎么知道我的应用是由Google Assistant打开的,而不是正常启动的

时间:2019-11-14 10:20:02

标签: android speech-recognition voice-recognition google-assistant-sdk google-assist-api

我怎么知道我的应用是由Google Assistant打开的,而不是正常启动的。 我不需要应用程序操作。我只想知道,是的,我的应用程序是用“确定Google->打开应用程序名称”打开的,而不是按该图标或从最近的图标恢复它。 如果捆绑包中有意图/任何数据,我可以检查一下?

这是我执行“打开应用程序名称”的意图

Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.xelion.android cmp=com.xelion.android/.activity.InitializationActivity (has extras) }

它还有其他功能,但不知道是什么:

Bundle[mParcelledData.dataSize=220]

编辑:

我发现这将是使用Google Assistant打开的标志:

intent.flags == 0x10000000

但是我的问题是,当我从机器上构建应用程序或更新应用程序时,它也将运行。您知道如何避免这种情况吗?

EDIT2:

我也尝试过:

private fun getReferrerCompatible(activity: Activity): Uri? {
    val intent = activity.intent
    val referrerUri: Uri? = intent.getParcelableExtra(Intent.EXTRA_REFERRER)
    if (referrerUri != null) {
        return referrerUri
    }
    val referrer = intent.getStringExtra(REFERRER_NAME)
    if (referrer != null) {
        // Try parsing the referrer URL; if it's invalid, return null
        try {
            return Uri.parse(referrer)
        } catch (e: ParseException) {
            return null
        }

    }
    return null
}

但是我仍然作为引荐来源网址为

我正在尝试onCreate上的intent.extras?.get(KEY_REF_NAME) == REG_G_ASSISTANTgetReferrerCompatible()。应该晚一点吗?喜欢onResume吗?

2 个答案:

答案 0 :(得分:1)

通过Google助手打开后,android.intent.extra.REFERRER_NAME将为android-app://com.google.android.googlequicksearchbox/https/www.google.com

val KEY_REF_NAME = "android.intent.extra.REFERRER_NAME"
val REG_G_ASSISTANT = "android-app://com.google.android.googlequicksearchbox/https/www.google.com"

if (intent.extras?.get(KEY_REF_NAME) == REG_G_ASSISTANT) {
    // APP OPENED THROUGH GOOGLE ASSISTANT
} else {
    // APP OPENED THROUGH DEFAULT LAUNCHER
}

答案 1 :(得分:0)

基于theapache64给出的响应和此链接: https://github.com/allegro/slinger/blob/master/slinger/src/main/java/pl/allegro/android/slinger/ReferrerMangler.java

由于该意图在Android 10上返回null,并且由于我的min SDK为23(我不需要在M下实现逻辑),所以我做了以下代码:

  val REG_G_ASSISTANT = "com.google.android.googlequicksearchbox"
  if (referrer != null && referrer.toString().contains(REG_G_ASSISTANT)) {
      //code to do
  }

这是科特林,正在参加活动。 .java中的Referrer等同于:

activity.getReferrer(); 

如果您在23岁以下运行操作系统,则引荐来源网址可以像这样:

val KEY_REF_NAME = "android.intent.extra.REFERRER_NAME"
intent.extras?.get(KEY_REF_NAME)

由于theapache64在OnePlus6上进行了尝试,因此我认为这应该在某些设备上的API级别28(Pie)之前有效。但是可以肯定的是,我建议您使用activity.getReferrer()