我无法将自定义文件扩展名与我正在开发的Android应用程序相关联。在我的Android清单文件中,我有以下内容:
<data android:scheme="file" android:mimeType="*/*" android:pathPattern="*.*\\.myFileExt" />
<data android:scheme="content" android:mimeType="*/*" android:pathPattern="*.*\\.myFileExt" />
它有点有效。让我解释。我的gmail中有一个文件(发送给我自己的文件),它有适当的扩展名,所以当我从手机的浏览器下载并单击打开时,它会正确打开我的应用程序,但是如果我探索该文件路径;文件所在的位置,并尝试打开它,我的手机说没有应用程序可以打开此文件类型。
关于如何解决这个问题的任何想法?
答案 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
的一般形式将与文件名不匹配。