代码之家  ›  专栏  ›  技术社区  ›  Tim Autin

Android意向过滤器不工作

  •  4
  • Tim Autin  · 技术社区  · 8 年前

    我的应用程序可以打开以下文件格式:

    • kml(application/vnd.google earth.kml+xml)
    • kmz(应用程序/vnd.google earth.kmz)
    • gpx(应用程序/gpx+xml)

    我正在尝试正确设置我的意图过滤器,以便在尝试通过以下方案打开其中一种文件类型时建议使用我的应用程序:

    • http(http)
    • https(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>
    

    有人知道问题出在哪里吗?

    1 回复  |  直到 8 年前
        1
  •  8
  •   Community CDub    8 年前

    因此,我得出了以下结论:

    <!--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、file Commander)似乎都在工作。

    (对于那些想了解奇怪路径模式的人,请参见 pathPattern to match file extension does not work if a period exists elsewhere in the file name? )