如何才能让我的应用仅针对某些网址出现在意图选择器中?

时间:2014-03-31 09:30:15

标签: android android-intent

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

我可以通过将其添加到清单中来轻松实现:

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

然而,这将使我的应用程序出现在所有网址的列表中,也是所有那些无关的地方。相反,我希望应用程序仅在这些网址中出现在选择器中:

www.example.com/foo/bla.html

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

但不是来自这些:

www.example.com

www.foobar.com

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

所以我的问题是:如何限制我的应用只显示在某个网址的意图中?

3 个答案:

答案 0 :(得分:4)

将以下过滤器添加到目标活动..  1. 主持人您的网站名称。  2.您的网站http或https的计划计划。  3.应用程序应显示的文件路径的路径

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

答案 1 :(得分:3)

  

如何限制我的应用显示在意图中仅选择某些网址?

你不能。 ACTION_SEND只有来自某些网址&#34;或者#34;只有来自某些WhatsApp用户&#34;或者#34;只有来自左撇子阿拉斯加管道焊工&#34; 34。

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

因此,对于ACTION_VIEW,网址是传递给另一项活动(&#34;我希望查看此网址&#34;)。这是有效的,因为该网址已转换为Uri的{​​{1}},并且可以通过Intent中的<data>元素进行过滤。

但是<intent-filter>不必拥有一个URL,即使有一个URL,它也只是一个额外的形式的有效载荷。它不是可以过滤的东西。

因此,不支持您想要的内容。

答案 2 :(得分:-1)

使用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>