我想用我的应用程序打开* .gpx文件。在一些资源之后,我将这些意图过滤器放到我的清单文件中:
<!-- Intent-filter for Intents that contain the file suffix. -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<!-- For a path to be meaningful, both a scheme and an authority must be specified. -->
<data
android:host="*"
android:mimeType="*/*"
android:pathPattern=".*\\.gpx"
android:scheme="file"/>
</intent-filter>
<!-- Intent-filter for Intents that contain a MIME type -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<!-- This is the original mimeType which was used when creating the file. -->
<data android:mimeType="application/gpx+xml"/>
<!-- Some apps (e.g. some versions of Gmail) use the file suffix as the mimeType! -->
<data android:mimeType="application/gpx"/>
</intent-filter>
<!-- Gmail sometimes uses some strange mimeTypes when opening attachments -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:scheme="content"
android:host="gmail-ls"
android:mimeType="application/octet-stream"/>
</intent-filter>
它适用于大多数Android版本和手机。
但据我所知,LG F70的Android版本为4.4.2,华为P8 Lite的Android版本为5.0.1,使用的是默认的文件浏览器,它无法正常工作。看图片:
LG F70:
之前有没有人经历过这个?你知道我需要哪个意图过滤器吗? 任何答案都会真的很有用!
答案 0 :(得分:1)
您的第二个<intent-filter>
在所有设备上都应该毫无意义,因为没有android:host
,您就无法android:scheme
。
或者:
删除android:host
属性或
将该特定<data>
元素移动到其自己的<intent-filter>
中,并附上相关操作/类别的副本,以及android:scheme
content
两者之间的区别在于您是想尝试从任何来源(第一个子弹)处理application/octet-stream
还是仅从Gmail的内容提供商(第二个子弹)处理。{/ p>
答案 1 :(得分:0)
您在初始代码的正确轨道上。以下是如何使其工作:
<!-- Handle opening attachments with file explorer -->
<intent-filter android:priority="100">
<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="application/xml"
android:pathPattern=".*\\.gpx"
android:scheme="file"/>
</intent-filter>
<intent-filter android:priority="100">
<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=".*\\.gpx"
android:scheme="content"/>
</intent-filter>
<!-- Handle opening attachments with Downloads app -->
<intent-filter android:priority="100">
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.GET_CONTENT"/>
<action android:name="android.intent.action.OPEN_DOCUMENT"/>
<action android:name="android.intent.action.PICK"/>
<category android:name="android.intent.category.OPENABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:mimeType="application/xml" android:pathPattern=".*\.gpx"
android:scheme="content"/>
<data android:mimeType="application/octet-stream" android:pathPattern=".*\.gpx"
android:scheme="content"/>
</intent-filter>
<intent-filter android:priority="100">
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.GET_CONTENT"/>
<action android:name="android.intent.action.OPEN_DOCUMENT"/>
<action android:name="android.intent.action.PICK"/>
<category android:name="android.intent.category.OPENABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:mimeType="application/xml" android:pathPattern=".*\.gpx"
android:scheme="file"/>
<data android:mimeType="application/octet-stream" android:pathPattern=".*\.gpx"
android:scheme="file"/>
</intent-filter>
<!-- Handle opening attachments with Gmail -->
<intent-filter android:priority="100">
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.GET_CONTENT"/>
<data android:host="gmail-ls" android:mimeType="application/octet-stream"
android:scheme="file"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="100">
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.GET_CONTENT"/>
<data android:host="gmail-ls" android:mimeType="application/octet-stream"
android:scheme="content"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="100">
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.GET_CONTENT"/>
<data android:host="gmail-ls" android:mimeType="application/xml"
android:scheme="file"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="100">
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.GET_CONTENT"/>
<data android:host="gmail-ls" android:mimeType="application/xml"
android:scheme="content"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
这里的关键是处理正确的MIME类型和类别,并设定在设备上打开文件的各种方式(即文件浏览器,下载应用程序,gmail等)。