首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从应用程序缓存中读取PDF

从应用程序缓存中读取PDF
EN

Stack Overflow用户
提问于 2012-07-12 19:06:59
回答 2查看 3K关注 0票数 2

我有一个pdf文件存储在我的缓存中。我想通过第三方应用程序(Adobe阅读器)阅读此pdf。但我不被允许这样做,因为意图不能访问应用程序缓存目录,除非通过将pdf存储在sdcard中而使其公开。

是否有任何解决方法可以允许第三方应用程序从缓存中读取pdf?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-07-12 21:26:24

第三方应用程序无法访问您的应用程序的缓存目录。

此帖子包含多个有关库的链接,这些库允许您在应用程序中显示Render a PDF file using Java on Android内容

票数 0
EN

Stack Overflow用户

发布于 2018-08-28 18:44:55

是的,这是非常有可能的,使用FileProvider,您可以将您的文件安全地保存在缓存中,并让浏览者临时访问您的文件。这里有一个可以帮助你实现的链接。

安卓支持库v4包含一个名为FileProvider的类,它是ContentProvider的一个特殊子类。此类通过创建content:// uri而不是file:/// uri来帮助共享与应用程序关联的文件。

内容URI允许您使用临时访问权限授予读写访问权限。因此,您可以临时访问我们缓存目录中的文件,而不需要我们的应用程序具有WRITE_EXTERNAL_STORAGE权限。

您应该做的第一件事是向AndroidManifest文件中添加一个新的内容提供者:

代码语言:javascript
复制
<manifest>
    ...
    <application>
        ...
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">

            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/fileprovider" />
        </provider>
        ...
    </application>
</manifest>

FileProvider只能为您预先指定的目录中的文件生成内容URI。要指定目录,请在XML中指定其存储区域和路径(将文件另存为res/xml/fileprovider.xml)。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path name="image" path="image/"/>
</paths>

现在,您可以将您的应用程序缓存文件共享给其他应用程序。要共享文件,您需要在您的意图中添加更多行。

代码语言:javascript
复制
File cacheFile = new File(context.getCacheDir(), "image/yoo.jpg");

Uri uri = FileProvider.getUriForFile(context, "my.package.provider", 
cacheFile);

Intent intent = ShareCompat.IntentBuilder.from(context)
    .setType("image/jpg")
    .setSubject(context.getString(R.string.share_subject))
    .setStream(uri)
    .setChooserTitle(R.string.share_title)
    .createChooserIntent()
    .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

context.startActivity(intent);

首先,你必须获得你想要共享的缓存文件的引用,在我们的例子中,它的cacheFile位于缓存目录+图像文件夹中。

接下来,您必须获得这个缓存文件的uri,它可以使用FileProvider.getUriForFile获得。在这里,你必须将my.package替换为你的应用程序包名称。请勿从末尾删除该.provider。

最后,当你创建意图时,只需在你的意图中添加标志Intent.FLAG_GRANT_READ_URI_PERMISSION,这样其他应用程序就可以读取这个uri。

参考:https://medium.com/androidsrc/share-cache-files-with-other-android-apps-using-fileprovider-897fe5705e45

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11450508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档