Android意图过滤器不起作用
我的应用程序可以打开以下文件格式:
- kml(应用程序/vnd.googleer.kml+xml)
- kmz(应用程序/vnd.google-Earth.kmz)
- GPX(应用程序/GPX+XML)
我正在尝试通过以下方案正确设置我的意图过滤器,以便在尝试打开这些文件类型之一时建议使用我的应用程序:
- http
- HTTPS
- 文件
- 内容
我希望以下筛选器能够捕获所有大小写(名称中带有圆点的文件除外,但这是另一个问题):
<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>
但是,如果文件资源管理器未正确设置GPX内容类型,则无法识别GPX文件(即使它们的名称正确,扩展名为".gpx")。
有人知道问题出在哪里吗?
解决方案
所以我的结果是:
<!--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>
似乎正在运行我测试的所有文件管理器(FX、ES、Astro、文件指挥官)。
(有关奇怪路径模式的疑惑,请参阅pathPattern to match file extension does not work if a period exists elsewhere in the file name?)
相关文章