我无法让我的应用程序在移动设备上注册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>
寻找赏金的以下问题的答案:
答案 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类型的唯一文件管理器是自己添加它的文件管理器。
在高层次上,遇到这样的问题时,解决方案非常简单:
找到另外一个能够满足您需求的应用程序(在本例中为另一个EPUB阅读器)
使用the App Browser app查看该应用的宣传内容及其为Intent
节选择的内容
通常,我通常会看到<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文件本地支持。