Cordova 将文件类型注册为“打开方式”列表

Posted

技术标签:

【中文标题】Cordova 将文件类型注册为“打开方式”列表【英文标题】:Cordova register file types to 'open with' list 【发布时间】:2015-05-31 16:50:58 【问题描述】:

我想注册我的 Ionic 应用程序(通过 Cordova)以打开某些文件类型。就像 Dropbox 一样。当用户在另一个应用程序(如电子邮件)上有文件时,他单击“打开方式”,会出现一个包含 Dropbox 应用程序的列表。

这是来自 Apple 的教程:https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/DocumentInteraction_TopicsForIOS/Articles/RegisteringtheFileTypesYourAppSupports.html

是否有任何 Cordova 插件同时支持 android 和 iOS 并为该功能提供 JS API?提前致谢。

【问题讨论】:

【参考方案1】:

您可以在 Cordova 中实现 FileType 关联。

它包括两个步骤。

1) 将 Android Manifest / iOS plist 中的文件注册为

清单

<intent-filter
    android:icon='@drawable/ic_launcher'
        android:label='AndroidMHT File'
    android:priority='1'>
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.EDIT" /> 
    <action android:name="android.intent.action.PICK" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:mimeType="*/*" />
    <data android:pathPattern="*.mht" />
</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" />
    <data android:scheme="http" android:host="*" android:pathPattern=".*\\.mht" />
    <data android:scheme="https" android:host="*" android:pathPattern=".*\\.mht" />
</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" />
    <data android:mimeType="message/rfc822" android:scheme="http" />
    <data android:mimeType="multipart/related" android:scheme="http" />
    <data android:mimeType="message/rfc822" android:scheme="https" />
    <data android:mimeType="multipart/related" android:scheme="https" />
</intent-filter>

列表

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array>
            <string>Document-molecules-320.png</string>
            <string>Document-molecules-64.png</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>Molecules Structure File</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.sunsetlakesoftware.molecules.pdb</string>
            <string>org.gnu.gnu-zip-archive</string>
        </array>
    </dict>
</array>

2) 使用File Opener Plugin for Cordova

您可能需要传递必要的标志才能打开这些文件。

参考:Android、iOS 和 phonegap community forum thread

希望对您有所帮助。

【讨论】:

感谢您的链接(我修复了 Android 的链接)。我还没有机会进行测试,但这似乎是正确的方法。一个实际的插件会更容易(比如注册一个 URL 方案),但我想我可以使用一个钩子来让脚本完成 plist 更改。 AFAIK,“文件打开器插件”不相关,即它会让我的应用程序告诉操作系统打开其他人的文件,而这个问题只是关于确保另一个应用程序(如电子邮件)可以将文件发送到我的应用程序。 您好,我怎样才能获得 webapp 本身的文件地址? (一个用户在一张照片上按下了打开,现在他被转移到我的应用程序中,下一步是什么?) 有人找到下一步要抓文件了吗? @DanielGolub ? 嗨,有人找到了完整的解决方案吗?可以发链接吗?【参考方案2】:

检查此link。 关于 Let'sRefactor 它是正确的,除了 fileopener ,在意图中,您应该确定当用户使用您的应用程序打开文件时要调用的函数(当然是本机)。 这一切都在上面的链接中进行了解释。

【讨论】:

以上是关于Cordova 将文件类型注册为“打开方式”列表的主要内容,如果未能解决你的问题,请参考以下文章

无法将notepad++添加到打开方式列表中的解决办法

谁知道mat文件怎么打开 详细

注册表添加和删除文件打开方式列表

VS2017将程序添加到“打开方式”列表中

如何将网易上未知文件类型的文件转为其它类型的文件

我想打开dff文件,选了文本始终打开方式,他就默了为文本打开方式. 怎么还原?