在应用程序中,我从API调用接收PDF,因此它位于字节数组中,我想在应用程序中显示它,而不必将其保存在用户的手机中。我尝试过WebView但它没有用。看起来像WebView将显示来自网址的PDF,但如果您将PDF作为字符串提供,则不会呈现它。
我想知道是否有办法在Android应用程序中显示PDF而无需将其保存在用户的手机中?
答案 0 :(得分:1)
我这样做是将pdf文件的接收字节写入临时缓存DIR,然后用意图打开它。例如,在异步任务中,我使用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的机会(例如打印,存储,共享......)。如果你只是在你的应用程序的框架中显示它,你将完全限制交互的可能性(或者必须由你自己实现它们)。