打开我的特定文件和URL扩展应用 - 意向过滤器没有如预期运行(Open my applicatio

2019-07-23 08:58发布

题:

我怎样才能让我的应用程序打开文件和URL扩展,无条件地?

我在我的机智与建立我的最终intent-filter作为它都没有实拍任何意义。 我的最终目标是开拓任何有一个path在一定的扩展名结尾。 举一个例子起见,我们选择“.riley”作为我的目标扩展。

我的基地`意向filter`

<intent-filter>
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data
        android:host="*"
        android:mimeType="*/*"
        android:pathPattern=".*\\.riley" />
</intent-filter>

目前,这个工程从打开filecontent

问题1:pathPattern

对于初学者来说,它似乎并不仿佛data参数pathPattern做任何事情,因为我已设置:

<data
    android:host="*"
    android:mimeType="*/*"
    android:pathPattern=".*\\.riley" />

..但我仍可以打开Intent与S Uri不中下的“.riley”结尾的路径filecontent方案。

我的应用程序中使用这个打开的一对夫妇的例子路径intent-filter是:

Path: /storage/sdcard0/Download/MyApp.apk Path: /messagesByAccount/1

“路径:”这只是我自己的另外的日志清晰度英寸 第一种是从Gmail下的file方案,第二个是从下,每增加一个content的方案。 鉴于这种情况,我已经感到困惑如何intent-filters的工作。

pathPattern正在对忽略filecontent方案。

问题2:打开在浏览器

我一直试图让我的应用程序打开浏览器,从“.riley”的扩展,但重定向链接没有一个MIME类型,所以我删除了mimeType值从data模式(我android:mimeType="*/*"此前,作为MIME类型并不一致),以及,让我从重定向的URL就好打开。

(:例如,当我试图打开从浏览器直接“.riley” URL的问题就来了http://thisisnotarealdomainname.com/myfile.riley ),并打开从我的应用程序已经走了的选项。 添加mimeType值回我的data模式,让我从一个直接的URL打开。

intent-filter不会让我打开直接和间接的URL。

问题3:方案

我希望能够从许多不同的方案类型的打开(如: http,文件,内容), but as soon as I remove方案altogether, it disqualifies my application from opening the HTTP scheme and when I specify方案=” *” , it disqualifies my application from opening ANY scheme. I've also tried adding more , it disqualifies my application from opening ANY scheme. I've also tried adding more data`模式,但给我的感觉就好像只有一个是考虑到影响,因为这并不能帮助我。

因此,指定http将允许http ,但显然已经不允许任何filecontent ,而不是指定scheme禁用http

我无法从所有不同的方案打开。

要重申的是, 我如何才能让我的应用程序打开文件和URL扩展,无条件的 ,因为这些并发症

Answer 1:

问题1: <data android:pathPattern=".*\\.riley" />是简单地无效。 引用文档 :

[pathPattern是]有意义仅当过滤器也被指定的方案和主机属性。

问题2:“不过重定向链接没有一个MIME类型”应该是不正确的,除非Web服务器严重损坏。 HTTP重定向本身不具有MIME类型,但应该通过浏览器本身进行处理,因为直到浏览器处理重定向,它不知道是否该URL指向的东西,它应该处理(例如,Web页面)什么应该被下载。 在HTTP 200 OK响应 - - 重定向的结果应该有一个MIME类型。 如果你相信,重定向的URL下载不工作,创建一个示例项目演示错误的地方张贴,以供审查。

问题3:“我无法从所有不同的方案打开。” -使用多个<data>元素与多个android:scheme属性,在单独的<intent-filter>元件。

例如,AOSP音乐应用程序有:

    <activity android:name="AudioPreview" android:theme="@android:style/Theme.Dialog"
            android:taskAffinity=""
            android:excludeFromRecents="true" android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="file"/>
            <data android:mimeType="audio/*"/>
            <data android:mimeType="application/ogg"/>
            <data android:mimeType="application/x-ogg"/>
            <data android:mimeType="application/itunes"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="http" />
            <data android:mimeType="audio/*"/>
            <data android:mimeType="application/ogg"/>
            <data android:mimeType="application/x-ogg"/>
            <data android:mimeType="application/itunes"/>
        </intent-filter>
        <intent-filter
            android:priority="-1">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="content" />
            <data android:mimeType="audio/*"/>
            <data android:mimeType="application/ogg"/>
            <data android:mimeType="application/x-ogg"/>
            <data android:mimeType="application/itunes"/>
        </intent-filter>
    </activity>

你会发现,动作,类别和MIME类型在所有三个相同的<intent-filter>节; 只有android:scheme属性变化。

现在,该file ,如果一些本地文件管理器附加适当的MIME类型给这个音乐应用示例方案只会工作Intent ; 音乐不会尝试使用android:pathPattern匹配的文件扩展名。 事实上,谷歌很少使用android:pathPattern 。 有一个在AOSP日历应用一个发生:

        <intent-filter
           android:priority="50">
           <action android:name="android.intent.action.VIEW" />
           <category android:name="android.intent.category.DEFAULT" />
           <category android:name="android.intent.category.BROWSABLE" />
           <data android:scheme="http" android:host="www.google.com" android:pathPrefix="/calendar/event" />
           <data android:scheme="https" android:host="www.google.com" android:pathPrefix="/calendar/event" />
           <data android:scheme="http" android:host="www.google.com" android:pathPattern="/calendar/hosted/.*/event" />
           <data android:scheme="https" android:host="www.google.com" android:pathPattern="/calendar/hosted/.*/event" />
        </intent-filter>

但是,这几乎是它。 当然,其他人已经尝试过了 - 还有一堆在这里StackOveflow题,涵盖了它的使用。



文章来源: Open my application for a particular file and URL extension - intent-filter isn't working as intended