【问题标题】:Is it possible to launch a web browser from my app, and return the clicked URL?是否可以从我的应用程序启动网络浏览器并返回点击的 URL?
【发布时间】:2015-01-21 08:53:05
【问题描述】:

我想知道是否可以从我的应用程序启动网络浏览器,当用户单击遵循特定模式的 URL 时,它会返回该 URL。

例子:

http://domain.top-level-domain/download-folder/file-to-download.its-extension

我不想这样做,因为我正在制作一个带有集成下载系统的应用程序,并且我希望用户能够以简单的方式选择要下载的文件(只需单击 URL)。流程是这样的:

  1. 您在网站上登录到您的个人页面。
  2. 您浏览您的个人文件。
  3. 您选择要下载的文件。
  4. 当您单击文件的 URL 时,该应用会自动为您下载并存储它。

第 4 步是我目前正在处理的步骤,无法真正解决。
使用外部浏览器,该过程将如下所示:

  1. 您在网站上登录到您的个人页面。
  2. 您浏览您的个人文件。
  3. 您选择要下载的文件。
  4. 您复制 URL。
  5. 您将其粘贴到应用程序中。

这个过程可能看起来并不复杂,但我还是想做。

编辑: 我发现该页面上的下载链接是一行将文件发送给用户的 javascript。是否可以在页面上执行该行代码并检索文件?

【问题讨论】:

    标签: android file browser download


    【解决方案1】:

    如果您使用链接管理网页,您可以使用自定义 URL 意图实现此目的 https://developer.chrome.com/multidevice/android/intents

    此功能依赖于浏览器,因此 Chrome 可以,但其他浏览器可能不... :(

    这里有一些例子
    Android Respond To URL in Intent
    Launch custom android application from android browser

    我最后一次尝试是在 50/60% 的浏览器上工作,所以......

    【讨论】:

      【解决方案2】:

      您可以使用自定义WebViewClient 拦截WebView 中的任何类型的URI:

      webView.setWebViewClient(new WebViewClient() {
          @Override
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
              if (url.contains("your_pattern")) {
                  // Your stuff...
                  return true;
              }
              return false;
          }
      });
      

      来自官方文档:

      public boolean shouldOverrideUrlLoading (WebView view, String url)
      

      让主机应用程序有机会在新的 url 即将加载到当前的 WebView 中。如果 WebViewClient 是 未提供,默认情况下 WebView 会要求 Activity Manager 选择 url 的正确处理程序。如果提供了 WebViewClient,则返回 true 表示主机应用程序处理 url,而返回 false 表示当前 WebView 处理 url。不调用此方法 对于使用 POST “方法”的请求。

      也可以考虑shouldInterceptRequest()的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-21
        • 2011-07-25
        相关资源
        最近更新 更多