将某些文件扩展名与我的Android应用程序关联

时间:2011-08-11 18:15:36

标签: android android-manifest file-extension

我无法将自定义文件扩展名与我正在开发的Android应用程序相关联。在我的Android清单文件中,我有以下内容:

<data android:scheme="file" android:mimeType="*/*" android:pathPattern="*.*\\.myFileExt" />
<data android:scheme="content" android:mimeType="*/*" android:pathPattern="*.*\\.myFileExt" />  

它有点有效。让我解释。我的gmail中有一个文件(发送给我自己的文件),它有适当的扩展名,所以当我从手机的浏览器下载并单击打开时,它会正确打开我的应用程序,但是如果我探索该文件路径;文件所在的位置,并尝试打开它,我的手机说没有应用程序可以打开此文件类型。

关于如何解决这个问题的任何想法?

3 个答案:

答案 0 :(得分:4)

有些情况有点棘手,我已决定使用:

    <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:mimeType="*/*" />
        <data android:pathPattern=".*\\.myFileExt" />
        <data android:host="*" />
    </intent-filter>

这有时会失败,因为有时只使用更全局的mime类型(在我的例子中是XML):

    <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:mimeType="text/xml" />
    </intent-filter>

答案 1 :(得分:1)

您的过滤器代码段太短,无法检查错误。您应该包含整个&lt; intent-filter&gt;。

你的pathPattern中有一个错误:它不能以星号开头,例如: *.*错了。这里糟糕的Android glob匹配仅处理..*以及x*(最后一个匹配“”,“x”......和“xxxxxx”,...)

此外,缺少“host”属性。如果缺少方案或主机,pathPattern是没有意义的。

答案 2 :(得分:0)

在这个问题上花了几个小时后,我终于想出了这个解决方案(AAA是文件扩展名):

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="*/*" />
    <data android:scheme="file" />
    <data android:host="*" />
    <data android:port="*" />
    <data android:pathPattern=".*..*..*..*..*.AAA" />
    <data android:pathPattern=".*..*..*..*.AAA" />
    <data android:pathPattern=".*..*..*.AAA" />
    <data android:pathPattern=".*..*.AAA" />
    <data android:pathPattern=".*.AAA" />
</intent-filter>

所有这些pathPattern的原因是,如果文件名中有一个点,.*.AAA的一般形式将与文件名不匹配。