gpt4 book ai didi

Android:将应用与自定义文件类型相关联

转载 作者:行者123 更新时间:2023-12-03 13:26:11 25 4
gpt4 key购买 nike

我有一个文件类型,扩展名为“.rfts”(实际上它只是存储一个代表音频放大器用户配置的 JSON 字符串)。当它是来自电子邮件(例如 Gmail)的附件时,我希望能够打开此文件,以便我可以从另一台平板电脑导入用户设置。

这是我的 list 的样子(请注意,我没有在其中包含其他 Activity ,但还有 4 个其他 Activity 没有 Intent 过滤器)。

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/RFtheme" >
<activity
android:name=".activity.MainActivity"
android:screenOrientation="landscape"
android:windowSoftInputMode="adjustPan" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.OPENABLE"/>
<data android:scheme="file"/>
<data android:mimeType="*/*"/>

<data android:pathPattern="\\.rfts$"/>
<data android:host="*"/>
</intent-filter>
</activity>

<provider
android:name=".model.FileProvider"
android:authorities="com.rockfordcorp.app3sixty.provider"
android:enabled="true"
android:exported="true" >
</provider>
</application>

我一直在尝试其他几个问题的其他建议修复,但它们是用于从浏览器打开 pdf 之类的。

当我尝试在 Gmail 中打开 .rfts 附件时,它告诉我“您没有可以打开此文件 (.rfts) 的应用程序。尝试在 google play 中搜索可以打开的应用程序”

我不知道我需要在这里做什么。我不知道 Gmail 将使用什么 mime 来打开 .rfts,也不知道它将使用什么方案。我尝试了几种不同的组合,但没有任何效果。我只是没有加入 Android 正在寻找的将这个文件关联到我的应用程序的类别、mimetype、模式和方案的神奇组合。

编辑 取得了一些成功,但还没有完全实现。

建议作为修复的问题是错误的,原因是所需的方案实际上是“内容”,而不是"file"

有效的 Intent 过滤器是
<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" android:mimeType="*/*" android:pathPattern=".*\\.rfts"/>
<data android:scheme="content" android:pathPattern=".*\\.rfts" android:mimeType="application/octet-stream" />
<!-- <data android:host="*"/> -->
</intent-filter>

没有 android:sceheme="content"它不起作用。

然而,新的问题出现了。 Gmail 现在打开 所有文件类型以前未与其他应用关联的。例如,如果我要尝试打开一个 .rfff 文件,它会使用我的应用程序。如果您尝试打开 .txt,它会打开 Chrome 或 HTML 查看器的选择器。

这很接近,但它打开其他文件类型是有问题的。 Android:pathPattern 显然对我的应用关联的文件类型没有影响。

因为这个问题被标记为可能重复 我想指出建议的解决方案不适用于从 g-mail 而不是 web 打开文件,也不包括打开 定制 文件类型。使用换出文件类型的“解决方案”会导致 g-mail 继续坚持设备上没有能够打开文件类型的应用程序。

可能需要提供不同的解决方案来关联通过来自 Gmail 的 Intent 打开此自定义文件类型。

最佳答案

2020 年更新

Android 已向 Intent 过滤器的内容 URI 和 MIME-Type 发展。

问题

内容 URI 不一定必须包含文件的扩展名或名称,并且在提供内容/文件的不同应用程序之间会有所不同。

以下是来自 的不同电子邮件应用程序的一些示例内容 URI。相同电子邮件附件:

邮箱 -> content://com.google.android.gm.sapi/some_email@gmail.com/message_attachment_external/%23thread-a%3Ar332738858767305663/%23msg-a%3Ar-5439466788231005876/0.1?account_type=com.google&mimeType=application%2Foctet-stream&rendition=1
展望 -> content://com.microsoft.office.outlook.fileprovider/outlookfile/data/data/com.microsoft.office.outlook/cache/file-download/file--2146063402/filename.customextention
三星电子邮件应用程序 -> content://com.samsung.android.email.attachmentprovider/1/1/RAW
正如所见,它们都是不同的,并且不保证包含与您的实际文件相关的任何内容。因此,您不能使用 android:pathPattern就像大多数人建议的那样。

电子邮件附件的解决方案

<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"/>
<data android:host="*"/>

<!-- Required for Gmail and Samsung Email App -->
<data android:mimeType="application/octet-stream"/>

<!-- Required for Outlook -->
<data android:mimeType="application/my-custom-extension"/>
</intent-filter>

通过测试,我找到了 Gmail、Outlook 和三星电子邮件使用的 MIME 类型,并将它们添加到我的 Intent 过滤器中。

警告/陷阱
  • 我发现通过上述解决方案,如果我打开任何二进制类型的文件,它会自动启动我的应用程序。如果我们无法解析文件,我会在我的 Activity 中通过显示失败状态来处理此问题。我认为这是一个非常罕见的事件,所以它是可以接受的。
  • 如果不添加 <data android:mimeType="*/*"/>,我无法通过文件浏览器启动我的应用程序。到我的 Intent 过滤器。我无法使用它,因为它会在用户单击 时启动我的应用程序任意 手机上的文件(不仅仅是自定义文件扩展名)。我不建议将其添加到您的 Intent 过滤器中。
  • 我没有运气使用 android:scheme="file"一点也不。
  • 我在 Android 10 上的三星 Galaxy S10 上进行了测试

  • 最后的想法
  • 目前没有优雅的解决方案可以将您的应用与 Android 中的特定扩展类型相关联。这是我在我的情况下能做的最好的事情。
  • 关于Android:将应用与自定义文件类型相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34300452/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com