我怎样才能让我的应用程序出现在意向select器只为某些URL?

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

我可以很容易地通过添加到清单:

<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的列表中,也是所有那些无用的地方。 相反,我希望应用程序只出现在select器从这些url:

www.example.com/foo/bla.html

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

但不是从这些:

www.example.com

www.foobar.com

等等。 只能从某个主机上的某个path上。 另外请注意,我不希望我的应用程序在用户点击符合条件的链接时启动。 它应该只能从共享菜单中调用。

所以我的问题是:我怎样才能限制我的应用程序出现在意图select只为某些url?

Solutions Collecting From Web of "我怎样才能让我的应用程序出现在意向select器只为某些URL?"

将以下filter添加到目标活动。1. 托pipe您的站点名称。 2.您的网站http或https的计划scheme。 3.你的应用应该显示的文件path的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> 

我怎样才能限制我的应用程序出现在意图只为某些URLselect?

你不能。 ACTION_SEND没有“仅来自特定URL”的概念,或者“仅来自某些WhatsApp用户”或“仅来自阿拉斯加左pipe焊工”的概念。

这与其他活动没有太大的不同。 一个<intent-filter>只控制Intent被传递到的内容 。 除了与安全有关的项目(权限,是否导出组件等)外,什么都不控制Intent的传送。

所以,通过ACTION_VIEW ,URL被传递另一个活动(“我希望查看这个URL”)。 这是有效的,因为URL被转换成IntentUri ,并且可以通过<intent-filter>中的<intent-filter> <data>元素进行<intent-filter>

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

因此,你所需要的不被支持。

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