簡體   English   中英

我怎么知道我的應用是由 Google 助理打開的,而不是正常啟動的

[英]How can I know that my app was opened by Google Assistant, instead of just normally launched

我怎么知道我的應用是由 Google 助理打開的,而不是正常啟動的。 我不需要應用操作。 我只是想知道,是的,我的應用程序是用“Ok Google -> 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 Assistant 打開的標志:

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 作為推薦人

我正在嘗試: intent.extras?.get(KEY_REF_NAME) == REG_G_ASSISTANT或來自 onCreate 的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給出的響應和這個鏈接: https://github.com/allegro/slinger/blob/master/slinger/src/main/java/pl/allegro/android/slinger/ReferrerMangler.Z93F725A07423FE1C889F448B33D21F46

因為意圖是在 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,並且正在進行活動。 相當於 in.java 的推薦人將是:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM