将App与Epub格式相关联

时间:2014-12-06 18:45:09

标签: android android-intent epub file-association

我无法让我的应用程序在移动设备上注册epub文件。我的android清单中有一组intent过滤器,但它仍然无法在sd卡上打开epub文件。当我浏览File Explorer应用程序时,它会显示该文件,但是当我点击它时,它会显示“系统不支持这种类型的文件:”。当我从Internet下载文件,然后使用下载应用程序导航到下载文件夹时,该文件根本不显示(即使它位于文件浏览器的下载文件夹中)。我也试图让epub文件显示文件选择器意图(Intent.ACTION_OPEN_DOCUMENT),但没有运气。我猜测最后两个没有显示,因为意图加载了Intent.CATEGORY_OPENABLE

我尝试了多个epub文件但都没有成功。

有人可以帮助弄清楚我错过了什么吗?

使用KitKat和更高级别的手机。

注意:此 可以从互联网下载。如果我转到epub链接,这可以,但不是来自文件系统。

        <!-- Open File Types -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:host="*" android:scheme="file"/>
            <data android:pathPattern=".*\\.epub"/>
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:host="*" android:scheme="file" android:mimeType="text/plain"/>
            <data android:pathPattern=".*\\.epub"/>
        </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:host="*" android:scheme="file"/>
            <data android:mimeType="application/epub+zip"/>
        </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:host="*" android:scheme="http"/>
            <data android:pathPattern=".*\\.epub"/>
        </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:host="*" android:scheme="http" android:mimeType="text/plain"/>
            <data android:pathPattern=".*\\.epub"/>
        </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:host="*" android:scheme="http"/>
            <data android:mimeType="application/epub+zip"/>
        </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:host="*" android:scheme="https"/>
            <data android:pathPattern=".*\\.epub"/>
        </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:host="*" android:scheme="https" android:mimeType="text/plain"/>
            <data android:pathPattern=".*\\.epub"/>
        </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:host="*" android:scheme="https"/>
            <data android:mimeType="application/epub+zip"/>
        </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:host="*" android:scheme="content"/>
            <data android:pathPattern=".*\\.epub"/>
        </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:host="*" android:scheme="content" android:mimeType="text/plain"/>
            <data android:pathPattern=".*\\.epub"/>
        </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:host="*" android:scheme="content"/>
            <data android:mimeType="application/epub+zip"/>
        </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:host="*" android:scheme="book"/>
        </intent-filter>

        <intent-filter
            android:icon="@raw/icon"
            android:label="ePub File"
            android:priority="1" >
            <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" />
            <data android:scheme="https" />
            <data android:scheme="ftp" />
            <data android:scheme="file" />
            <data android:host="*" />
            <data android:mimeType="*/*" />
            <data android:pathPattern=".*\\.epub" />
        </intent-filter>

更新

寻找赏金的以下问题的答案:

  1. 如何让android系统识别出我的应用程序可以打开内部或外部存储上的epub文件?
  2. 如何获取默认文件浏览器(Storage Access Framework)以显示epub文件?

1 个答案:

答案 0 :(得分:7)

  

如何让android系统识别内部或外部存储上的epub文件可以使用我的应用程序打开?

&#34; android系统&#34;没有多大关系,特别是今天。

MimeTypeMap / libcore.net.MimeUtils .epub(或更准确地说,application/epub+zip来自<intent-filter> / <intent-filter>的支持added ~35 hours ago。据推测,它将出现在未来的Android版本中。在此之前,将使用该MIME类型的唯一文件管理器是自己添加它的文件管理器。

在高层次上,遇到这样的问题时,解决方案非常简单:

  1. 找到另外一个能够满足您需求的应用程序(在本例中为另一个EPUB阅读器)

  2. 使用the App Browser app查看该应用的宣传内容及其为Intent节选择的内容

  3. 通常,我通常会看到<intent-filter>带有方案和MIME类型的方案,主机和路径内容。拥有MIME类型的路径内容不太可能有所帮助,就像.epub没有明确包含MIME类型一样,并且Android不知道映射特定的扩展到您的MIME类型,.epub可能不匹配。

    此外,您需要使用多个&#34;文件管理器&#34;进行测试。应用程序,因为Android没有文件管理器,因此您可能遇到正在测试的错误/限制。

      

    如何获取默认文件浏览器(存储访问框架)以显示epub文件?

    指定正确的MIME类型并为奇迹祈祷。

    同样,在Android本身为将application/epub+zip映射到MIME类型提供更多内置支持之前,您依赖于存储提供商本身就知道MediaStore映射到{{1 MIME类型。一些提供商会,因为他们从一些后端服务器获取该信息,这些服务器可能比Android本身知道更多的MIME类型。某些提供商可能没有,例如Android MediaStore支持的外部存储设备提供商,因为我怀疑{{1}}是否有自己的EPUB文件本地支持。