簡體   English   中英

在可瀏覽活動中查找意圖發件人的 URL

[英]Find URL of sender of intent in a Browsable activity

我在我的一個活動意圖過濾器中處理特定的 URL 方案。 我的用戶可以將他們的 URL 放在互聯網上的任何網頁中,其他在瀏覽器中瀏覽它們的用戶可以點擊它們,我的應用程序開始工作。 這工作完美。

現在我的問題是我想在我的活動中找出該用戶來自的 URL。

例如,一個用戶將他的鏈接放在一個名為A.com的網站上,另一個正在瀏覽A.com用戶點擊這個鏈接,所以它來到了我的應用程序。 如何在我的活動的意圖中獲取A.com地址? 是否可以?

有關更多信息的場景:
例如,我在一個我的活動意圖過濾數據中處理這種鏈接: hisapp://host/path 一個用戶把它放在網絡中,例如一個網站:example.com,另一個用戶點擊它並來到我的應用程序。 我想從意圖中獲取 example.com。

我想從瀏覽器獲取用戶從它到我的應用程序的 URL

我對此的解釋是:

  • 您有一個網頁(例如, https://hamidreza.com/somepage : https://hamidreza.com/somepage
  • 在該網頁上,您有一個自定義方案的鏈接(例如, hamidreza://something
  • 在某些設備上,您有一個帶有<activity><intent-filter>的應用程序,用於宣傳對該自定義方案的支持
  • 當用戶從他們設備上的瀏覽器訪問該網頁時,他們單擊該鏈接,這將啟動您的活動……您希望能夠發現這一切都始於https://hamidreza.com/somepage

歡迎您檢查傳遞給您的活動的Intent的額外內容(通過getIntent() ),並查看引用 URL 是否在某處。 也許對於一些瀏覽器來說,確實如此。 我希望對於大多數瀏覽器來說,事實並非如此。 對於那些,您無法知道包含啟動您的活動的 URL 的 URL。

正如 Selvin 在評論中指出的那樣,歡迎您在自定義 URL 中嵌入此類信息(例如, hamidreza://something?referer=https://hamidreza.com/somepage )。 然后,您可以從傳遞給您的活動的Uri上的查詢參數中獲取該信息。

調用getReferrer()返回包含啟動 Intent 的包名稱的引用 URI。 不能保證推薦人永遠是已知的!

2019 年 11 月不同引薦應用提供的 URL 值示例:

  • 在 Chrome(版本 74.0.3729.185)中打開 Google 搜索結果鏈接
  • 在 Gmail 中打開鏈接(版本 2019.05.12.250526289.release)
    • 引薦網址 => android-app://com.google.android.gm
  • 在 Firefox(版本 68.2.1)中打開相同的 Google 搜索結果鏈接
    • 引用 URL => android-app://org.mozilla.firefox

developer.android.com 的重要警告:

如果在處理 onNewIntent(Intent) 時調用,getReferrer() 將返回將新意圖提交給活動的引用者。 否則,它總是返回原始 Intent 的引用者。

有關更多信息,請參閱https://developer.android.com/reference/android/app/Activity.html#getReferrer()

現在我的問題是,我想在我的活動中找出此用戶來自的URL。

網址將作為數據傳遞給您的活動。 使用getQueryParameter可以從Uri獲取參數,也可以從細分中獲取參數。

在onCreate中

 if (getIntent().getData() != null) {
        Uri uri = getIntent().getData();// this is the url
        List<String> segments = uri.getPathSegments();// this is the url segments 
    }

在onNewIntent

 @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (intent.getData() != null) {
        Uri uri = intent.getData();
        List<String> segments = uri.getPathSegments();
    }
}

暫無
暫無

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

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