安卓文件的android intent过滤器无法在华为P8和LG F70手机上运行

时间:2016-04-29 12:35:17

标签: android android-intent android-manifest intentfilter

我想用我的应用程序打开* .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,使用的是默认的文件浏览器,它无法正常工作。看图片:

华为P8 Lite: Huawei P8 Lite

LG F70:

LG F70

之前有没有人经历过这个?你知道我需要哪个意图过滤器吗? 任何答案都会真的很有用!

2 个答案:

答案 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等)。