从应用缓存中读取PDF

时间:2012-07-12 11:06:59

标签: android pdf android-intent

我的缓存中存有pdf文件。我想通过第三方应用程序(Adobe阅读器)阅读此pdf。 但我不允许这样做,因为意图无法访问应用程序缓存目录,除非通过存储在SD卡中将pdf公之于众。

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

由于

2 个答案:

答案 0 :(得分:0)

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

此主题包含多个库链接,允许您在应用中显示PDF内容:Render a PDF file using Java on Android

答案 1 :(得分:-1)

是的,很可能使用FileProvider,可以将文件安全地保存在缓存中,并暂时将文件的访问权限授予查看者。这是一个可以帮助您实现的链接。

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

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

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

<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)。

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path name="image" path="image/"/>
</paths>

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

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位于缓存目录+映像文件夹中。

接下来,您必须获取可以使用FileProvider.getUriForFile获取的此缓存文件的uri。在这里,您必须用应用程序包名称替换my.package。不要从最后删除该.provider。

最后,当您创建意图时,只需将标志Intent.FLAG_GRANT_READ_URI_PERMISSION添加到您的意图中,以便其他应用程序可以读取此uri。

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