我怎么知道我的应用程序是由 Google 助手打开的,而不是正常启动的
How can I know that my app was opened by Google Assistant, instead of just normally launched
我怎么知道我的应用程序是由 Google 助手打开的,而不是正常启动的。
我不需要应用操作。我只是想知道,是的,我的应用程序是用 "Ok Google -> Open appname" 打开的,而不是按图标,或者从最近的图标中恢复它。
我可以检查捆绑包中是否有 intent/any 数据?
这是我的意图"Open appname"
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 助手打开的标志:
intent.flags == 0x10000000
但我的问题是,当我从机器构建应用程序或更新它时,这也会 运行,知道如何避免这种情况吗?
编辑 2:
我也试过:
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
}
但我仍然得到 NULL 作为 referrer
我正在尝试:来自 onCreate 的 intent.extras?.get(KEY_REF_NAME) == REG_G_ASSISTANT
或 getReferrerCompatible()
。应该晚点吗?喜欢 onResume?
当通过 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
}
根据 theapache64 给出的响应和这个 link:
https://github.com/allegro/slinger/blob/master/slinger/src/main/java/pl/allegro/android/slinger/ReferrerMangler.java
因为意图是在 Android 10 上返回 null,并且由于我的最小 SDK 是 23(我不需要在 M 下实现逻辑),所以我完成了以下代码:
val REG_G_ASSISTANT = "com.google.android.googlequicksearchbox"
if (referrer != null && referrer.toString().contains(REG_G_ASSISTANT)) {
//code to do
}
这是 Kotlin,并且在 activity 中。 .java 中 referrer 的等价物是:
activity.getReferrer();
如果您 运行 和 OS 未满 23 岁,可以这样取推荐人:
val KEY_REF_NAME = "android.intent.extra.REFERRER_NAME"
intent.extras?.get(KEY_REF_NAME)
由于 theapache64 在 OnePlus6 上进行了尝试,我认为这应该可以在某些设备上运行到 API 级别 28 (Pie)。但可以肯定的是,我建议使用 activity.getReferrer()
我怎么知道我的应用程序是由 Google 助手打开的,而不是正常启动的。 我不需要应用操作。我只是想知道,是的,我的应用程序是用 "Ok Google -> Open appname" 打开的,而不是按图标,或者从最近的图标中恢复它。 我可以检查捆绑包中是否有 intent/any 数据?
这是我的意图"Open appname"
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 助手打开的标志:
intent.flags == 0x10000000
但我的问题是,当我从机器构建应用程序或更新它时,这也会 运行,知道如何避免这种情况吗?
编辑 2:
我也试过:
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
}
但我仍然得到 NULL 作为 referrer
我正在尝试:来自 onCreate 的 intent.extras?.get(KEY_REF_NAME) == REG_G_ASSISTANT
或 getReferrerCompatible()
。应该晚点吗?喜欢 onResume?
当通过 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
}
根据 theapache64 给出的响应和这个 link: https://github.com/allegro/slinger/blob/master/slinger/src/main/java/pl/allegro/android/slinger/ReferrerMangler.java
因为意图是在 Android 10 上返回 null,并且由于我的最小 SDK 是 23(我不需要在 M 下实现逻辑),所以我完成了以下代码:
val REG_G_ASSISTANT = "com.google.android.googlequicksearchbox"
if (referrer != null && referrer.toString().contains(REG_G_ASSISTANT)) {
//code to do
}
这是 Kotlin,并且在 activity 中。 .java 中 referrer 的等价物是:
activity.getReferrer();
如果您 运行 和 OS 未满 23 岁,可以这样取推荐人:
val KEY_REF_NAME = "android.intent.extra.REFERRER_NAME"
intent.extras?.get(KEY_REF_NAME)
由于 theapache64 在 OnePlus6 上进行了尝试,我认为这应该可以在某些设备上运行到 API 级别 28 (Pie)。但可以肯定的是,我建议使用 activity.getReferrer()