Android:在Android应用程序中显示PDF

Android:在Android应用程序中显示PDF,android,webview,Android,Webview,在应用程序中,我从API调用接收PDF,因此它位于字节数组中,我希望在应用程序中显示它,而无需将其保存在用户的手机中。我尝试了一个WebView,但没有成功。似乎WebView将显示url中的PDF,但如果将PDF作为字符串提供给它,则不会呈现它 我想知道是否有一种方法可以在android应用程序中显示PDF,而不必将其保存在用户的手机中?我这样做是将收到的PDF文件字节写入临时缓存目录,然后有意打开它。因此,例如在一个异步任务中,我在doInBackground方法中下载文件,并在onPost

在应用程序中,我从API调用接收PDF,因此它位于字节数组中,我希望在应用程序中显示它,而无需将其保存在用户的手机中。我尝试了一个WebView,但没有成功。似乎WebView将显示url中的PDF,但如果将PDF作为字符串提供给它,则不会呈现它


我想知道是否有一种方法可以在android应用程序中显示PDF,而不必将其保存在用户的手机中?

我这样做是将收到的PDF文件字节写入临时缓存目录,然后有意打开它。因此,例如在一个异步任务中,我在
doInBackground
方法中下载文件,并在
onPostExecute
中执行此操作

@Override
protected void onPostExecute(byte[] result) {
    final File reportFile = new File(context.getExternalCacheDir(), "pdf-file.pdf");

    final BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(reportFile));
    output.write(result);
    output.close();

    Uri path = FileProvider.getUriForFile(getActivity(),  BuildConfig.APPLICATION_ID  + ".fileprovider", reportFile);
    final Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.setDataAndType(path, "application/pdf");
    startActivity(intent);
}
这很有效。你要做的唯一一件事就是检查用户是否安装了一个正常工作的PDF阅读器。
我认为此解决方案的优势在于,您为用户提供了进一步处理pdf的机会,以满足其需要(例如打印、存储、共享等)。如果你只是在应用程序中的一个框架内显示它,那么交互的可能性就会受到很大限制(或者必须自己实现)。

你是否尝试过将字节放入BufferedInputStream中,创建一个tmp文件并将该文件提供给webview?或者也可以创建文件并执行意图Actio.View“我想知道是否有一种方法可以在android应用程序中显示PDF,而不必将其保存在用户的手机中”——大多数PDF呈现选项都需要文件,主要是因为它们旨在显示可能太大而无法保存在内存中的PDF。“似乎webview将显示url中的pdf,但如果您将pdf作为字符串提供,则不会呈现它”-webview没有内置的呈现pdf的功能。它位于缓存目录中(您也可以将其存储在内部缓存目录中-然后您可以在应用程序中访问它)。但是你真的不必考虑删除它,因为android可以处理缓存本身。谢谢,我会尝试一下!