【问题标题】:How can I have my app appear in the intent chooser only for certain urls?如何让我的应用仅针对某些 url 出现在意图选择器中?
【发布时间】:2014-05-10 14:04:22
【问题描述】:

我正在开发一个可以从某些网页中提取信息的应用程序。这个想法是,当用户在浏览器中的特定 url 路径中并按下共享按钮时,我的应用程序将显示在接收器应用程序列表中。

我可以通过将其添加到清单中轻松做到这一点:

<intent-filter android:label="@string/app_name" >
    <action android:name="android.intent.action.SEND" />
    <data android:mimeType="text/plain" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

但是,这将使我的应用出现在所有 url 的列表中,以及所有与它无关的那些。相反,我希望应用程序仅从这些 url 出现在选择器中:

www.example.com/foo/bla.html

www.example.com/foo/bar/blabla.html

但不是来自这些:

www.example.com

www.foobar.com

等等。 IE。仅来自某个主机上的某个路径内。另请注意,当用户单击符合条件的链接时,我不希望我的应用程序启动。它只能从共享菜单中调用。

所以我的问题是:如何限制我的应用显示在仅针对某些网址的意图选择中?

【问题讨论】:

  • 您是否可以在这些 URL 上创建子域?喜欢 bla.example.com?
  • 不,这不是一个选项。
  • 您有权随心所欲地投票,但我看不出对您得到的每个答案都投反对票的逻辑。它不鼓励其他人回答,即使您不喜欢事实,CommonsWares 的回答也是信息丰富且正确的,而 Dharanis 的回答是最接近合理的解决方案
  • 你为什么说我对我得到的每一个答案都投反对票?这可能是我曾经否决过的我自己的一个问题的第一个答案。而且我没有否决当前的答案。我投反对票的那个很粗鲁,但 CommonsWare 在此期间对其进行了修改并使其变得更好。所以我删除了反对票。我想补充一点,我通常喜欢 CommonsWare 的答案,但坦率地说,这个答案很粗鲁。但现在没有了。

标签: android android-intent


【解决方案1】:

将以下过滤器添加到目标 Activity .. 1. 托管您的网站名称。 2. scheme 网站 http 或 https 的方案。 3. path 为您的应用应显示的文件路径。

<intent-filter>
             <data
                android:host="www.example.com"
                android:scheme="http"
                android:path="/foo/bla.html"
                />
            <action android:name="android.intent.action.VIEW" />
             <category android:name="android.intent.category.DEFAULT" >
            </category>
            <category android:name="android.intent.category.BROWSABLE" >
            </category>
</intent-filter>

【讨论】:

  • 这使我的应用程序响应匹配 url 的点击,这不是我想要的。我不想“劫持”这些网址。我只需要我的应用程序显示在用户按下共享按钮时出现的列表中。但仅在浏览那些特定的 url 时。
  • 你为什么不试试 连同上面的代码...?...参考developer.android.com/guide/topics/manifest/…..
【解决方案2】:

使用pathPrefix

    <intent-filter>
         <data
            android:host="www.example.com"
            android:scheme="http"
            android:pathPrefix="/foo/"
            />
        <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" >
        </category>
            <category android:name="android.intent.category.BROWSABLE" >
        </category>
    </intent-filter>

【讨论】:

    【解决方案3】:

    如何限制我的应用仅显示在 Intent 中,选择特定的 url?

    你不能。 ACTION_SEND 没有“仅来自某些 URL”、“仅来自某些 WhatsApp 用户”或“仅来自左撇子阿拉斯加管焊工”的概念。

    这与任何其他活动没有显着差异。 &lt;intent-filter&gt; 仅控制Intent 被传递 的内容。除了与安全相关的项目(权限、是否导出组件等)之外,没有任何东西可以控制 Intent 的传递内容。

    因此,对于ACTION_VIEW,URL 是被传递另一个活动的东西(“我希望查看这个 URL”)。这是有效的,因为 URL 被转换为 IntentUri,并且可以通过 &lt;intent-filter&gt; 中的 &lt;data&gt; 元素进行过滤。

    ACTION_SEND 不一定要有 URL,即使有,也只是额外形式的有效载荷。这不是可以过滤的东西。

    因此,不支持您想要的。

    【讨论】:

      猜你喜欢
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2016-08-24
      • 2021-02-16
      相关资源
      最近更新 更多