简体   繁体   English

Android意图过滤器无效

[英]Android intent filter not working

My app can open the following file formats: 我的应用可以打开以下文件格式:

  • kml (application/vnd.google-earth.kml+xml) kml(application / vnd.google-earth.kml + xml)
  • kmz (application/vnd.google-earth.kmz) kmz(application / vnd.google-earth.kmz)
  • gpx (application/gpx+xml) gpx(application / gpx + xml)

I'm trying to set up properly my intent filters so that my app is proposed when trying to open one of these file types, through the following schemes: 我正在尝试正确设置我的意图过滤器,以便在尝试打开其中一种文件类型时通过以下方案建议我的应用程序:

  • http HTTP
  • https HTTPS
  • file 文件
  • content 内容

I would expect the following filter to catch all cases (except files with dots in the name, but that's another problem): 我希望以下过滤器能够捕获所有情况(除了名称中包含点的文件,但这是另一个问题):

<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="file" />
    <data android:scheme="http" />
    <data android:scheme="https" />
    <data android:scheme="content" />

    <data android:pathPattern=".*\\.kml" />
    <data android:pathPattern=".*\\.kmz" />
    <data android:pathPattern=".*\\.gpx" />

    <data android:mimeType="application/vnd.google-earth.kml+xml" />
    <data android:mimeType="application/vnd.google-earth.kmz" />
    <data android:mimeType="application/gpx+xml" />

</intent-filter>

But if the file explorer does not set properly the GPX content type, GPX files are not recognized (even though they are properly named, with ".gpx" extension). 但是,如果文件资源管理器未正确设置GPX内容类型,则无法识别GPX文件(即使它们已正确命名,扩展名为“.gpx”)。

Does someone know what's the problem? 有人知道这是什么问题吗?

So here is what I ended up with: 所以这就是我最终的结果:

<!--Mime type set -->
<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="file" />
    <data android:scheme="http" />
    <data android:scheme="https" />
    <data android:scheme="content" />

    <!-- Valid mime types -->
    <data android:mimeType="application/vnd.google-earth.kml+xml" />
    <data android:mimeType="application/vnd.google-earth.kmz" />
    <data android:mimeType="application/gpx+xml" />

    <!-- Invalid mime types used by some bad software -->
    <data android:mimeType="application/kml" />
    <data android:mimeType="application/kmz" />
    <data android:mimeType="application/gpx" />

    <data android:mimeType="application/kml+xml" />
    <data android:mimeType="application/kmz+xml" />

    <data android:mimeType="application/vnd.google-earth.kml" />
    <data android:mimeType="application/vnd.google-earth.gpx" />
    <data android:mimeType="application/vnd.google-earth.kmz+xml" />
    <data android:mimeType="application/vnd.google-earth.gpx+xml" />

    <data android:mimeType="text/kml" />
    <data android:mimeType="text/kmz" />
    <data android:mimeType="text/gpx" />

    <data android:mimeType="text/kml+xml" />
    <data android:mimeType="text/kmz+xml" />
    <data android:mimeType="text/gpx+xml" />

    <data android:mimeType="text/xml+kml" />
    <data android:mimeType="text/xml+kmz" />
    <data android:mimeType="text/xml+gpx" />

</intent-filter>

<!-- Mime type not set but valid extensions -->
<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="file" />
    <data android:scheme="http" />
    <data android:scheme="https" />
    <data android:scheme="content" />

    <data android:host="*" />

    <data android:pathPattern="/.*..*..*..*..*\\.gpx" />
    <data android:pathPattern="/.*..*..*..*..*\\.kml" />
    <data android:pathPattern="/.*..*..*..*..*\\.kmz" />
    <data android:pathPattern="/.*..*..*..*\\.gpx" />
    <data android:pathPattern="/.*..*..*..*\\.kml" />
    <data android:pathPattern="/.*..*..*..*\\.kmz" />
    <data android:pathPattern="/.*..*..*\\.gpx" />
    <data android:pathPattern="/.*..*..*\\.kml" />
    <data android:pathPattern="/.*..*..*\\.kmz" />
    <data android:pathPattern="/.*..*\\.gpx" />
    <data android:pathPattern="/.*..*\\.kml" />
    <data android:pathPattern="/.*..*\\.kmz" />
    <data android:pathPattern="/.*\\.gpx" />
    <data android:pathPattern="/.*\\.kml" />
    <data android:pathPattern="/.*\\.kmz" />

</intent-filter>

<!-- Invalid mime type but valid extensions -->
<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="file" />
    <data android:scheme="http" />
    <data android:scheme="https" />
    <data android:scheme="content" />

    <data android:host="*" />
    <data android:mimeType="*/*" />

    <data android:pathPattern="/.*..*..*..*..*\\.gpx" />
    <data android:pathPattern="/.*..*..*..*..*\\.kml" />
    <data android:pathPattern="/.*..*..*..*..*\\.kmz" />
    <data android:pathPattern="/.*..*..*..*\\.gpx" />
    <data android:pathPattern="/.*..*..*..*\\.kml" />
    <data android:pathPattern="/.*..*..*..*\\.kmz" />
    <data android:pathPattern="/.*..*..*\\.gpx" />
    <data android:pathPattern="/.*..*..*\\.kml" />
    <data android:pathPattern="/.*..*..*\\.kmz" />
    <data android:pathPattern="/.*..*\\.gpx" />
    <data android:pathPattern="/.*..*\\.kml" />
    <data android:pathPattern="/.*..*\\.kmz" />
    <data android:pathPattern="/.*\\.gpx" />
    <data android:pathPattern="/.*\\.kml" />
    <data android:pathPattern="/.*\\.kmz" />

</intent-filter>

Seems to be working on all the file manager I tested (FX, ES, Astro, File Commander). 似乎正在处理我测试的所有文件管理器(FX,ES,Astro,File Commander)。

(For those wondering about the weird path patterns see pathPattern to match file extension does not work if a period exists elsewhere in the file name? ) (对于那些想知道奇怪的路径模式的人来说,如果文件名中的其他地方存在句点,则pathPattern与文件扩展名匹配不起作用吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM