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

发布于 2024-11-29 06:51:52 字数 472 浏览 0 评论 0原文

我在将自定义文件扩展名与我正在开发的 Android 应用程序关联时遇到问题。在我的 android 清单文件中,我有以下内容:

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

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

关于如何解决这个问题有什么想法吗?

I'm having trouble associating my custom file extension to my android application that I am developing. In my android manifest file I have the following:

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

It kinda works. Let me explain. I have a file in my gmail( sent a file to my self ), which has the proper extension, so when I download it from my phone's browser and click open, it opens my application correctly, but if I explore to that file path; where the file is located, and try to open it, my phone says no application can open this file-type.

Any ideas on how to solve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

对岸观火 2024-12-06 06:51:52

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

    <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>

Some cases are kinda tricky, I've settled on using:

    <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>

and this sometimes fails because sometimes only a more global mime type (in my case XML) is used:

    <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>
り繁华旳梦境 2024-12-06 06:51:52

在这个问题上花了几个小时后,我终于想出了这个解决方案(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 的形式将与文件名不匹配。

After spending a few hours on this issue I finally came up with this solution (AAA is the file extension):

<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>

The reason for all of those pathPattern is that if you have a dot in your file name the general form of .*.AAA will not match the filename.

っ〆星空下的拥抱 2024-12-06 06:51:52

您的过滤器片段太短,无法检查错误。您应该包含整个

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

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

Your filter-snippet is too short to check it for errors. You should have included the whole <intent-filter>.

One mistake is in your pathPattern: it can’t start with an asterisk, e.g. *.* is wrong. That crappy Android glob matching here handles . and .* and x* only (the last one matches “”, “x” ... and “xxxxxx”, ...)

Furthermore, the “host” attribute is missing. pathPattern is meaningless if scheme or host are missing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文