在可浏览活动

时间:2017-12-20 12:29:39

标签: java android android-intent

我在我的一个活动intent-filter中处理特定的URL方案。 我的用户可以将他们的URL放在互联网上的任何网页上,而在浏览器中浏览他们的其他用户可以点击它们,我的应用就开始工作了。 这完美无缺。

现在我的问题是我想在我的活动中找到该用户来自的URL。

例如,用户将其链接放在名为A.com的网站中,另一位正在浏览A.com的用户点击此链接,以便进入我的应用。 如何在我的活动中获得A.com地址?有可能吗?

情景了解更多信息:
例如,我在一个我的活动意图过滤数据中处理这种链接: hisapp://主机/路径 用户将其放入网站,例如网站:example.com,另一位用户点击它并进入我的应用程序。 我想从意图中得到example.com。

3 个答案:

答案 0 :(得分:1)

  

我想从浏览器

获取用户来自我的应用的网址

我对此的解释是:

  • 您有一个网页(例如https://hamidreza.com/somepage
  • 在该网页上,您有一个自定义方案的链接(例如hamidreza://something
  • 在某些设备上,您有一个带有<activity><intent-filter>的应用,该广告支持该自定义方案
  • 当用户从其设备上的浏览器访问该网页时,他们会点击该链接,这会启动您的活动...您希望能够发现这一切都始于https://hamidreza.com/somepage

欢迎您查看发送到您活动的Intent的附加内容(通过getIntent()),并查看引用网址是否在某处。也许对于少数浏览器来说,它是。我希望对于大多数浏览器而言,它不是。对于那些,您无法知道包含启动您活动的URL的URL。

正如Selvin在评论中指出的那样,欢迎您在自定义网址中嵌入这类信息(例如hamidreza://something?referer=https://hamidreza.com/somepage)。然后,您可以从Uri发送到您的活动的查询参数中获取该参数。

答案 1 :(得分:0)

  

现在我的问题是我想在我的活动中找到该用户来自的URL。

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

答案 2 :(得分:0)

调用getReferrer()返回引用者URI,其中包含启动Intent的程序包名称。无法保证引荐来源网址总是会被了解!

不同引荐应用在2019年11月提供的URL值示例:

  • 在Chrome中打开Goog​​le搜索结果链接(版本74.0.3729.185)
  • 在Gmail中打开链接(版本2019.05.12.250526289.release)
    • 引荐来源网址=> android-app://com.google.android.gm
  • 在Firefox(版本68.2.1)中,打开相同的Google搜索结果链接
    • 引荐来源网址=> android-app://org.mozilla.firefox

developer.android.com的重要警告:

  

如果在处理onNewIntent(Intent)时调用,则getReferrer()将返回向活动提交新意图的引用者。否则,它将始终返回原始Intent的引用者。

有关更多信息,请参见https://developer.android.com/reference/android/app/Activity.html#getReferrer()