PdfRenderer的SecurityException,带有受密码保护的pdf,并且即使是普通pdf也重复

时间:2018-11-13 11:54:29

标签: android pdf pdfrenderer android-securityexception

如果尝试使用 PdfRenderer API打开受密码保护的PDF,则在catch块内给出 SecurityException 并进行相应处理,然后 onDestroy 基本清理完成,然后返回家庭活动,然后浏览一个简单的不受保护的PDF,然后再次发生相同的异常。

请注意,只有打开任何受保护的文件,这种情况才会发生。

请参考以下代码:

      @Override
    protected PdfRenderer doInBackground(Uri... uri) {
        Uri uriToProcess = uri[0];
        try {
            contentResolver=getContentResolver();
            parcelFileDescriptor = contentResolver.openFileDescriptor(uriToProcess, "r");
            if(parcelFileDescriptor!=null && mPdfRenderer==null) {
                mPdfRenderer = new PdfRenderer(parcelFileDescriptor);
            }
        } catch (FileNotFoundException e) {
            exceptionMsg="Sorry! No such file or directory found";
            handleExceptionInUI(exceptionMsg, progressDialog);
            Log.e("$$$$ FNFException", e.toString());

        } catch (IOException e) {
            exceptionMsg="Sorry! Something went wrong with IO";
            handleExceptionInUI(exceptionMsg, progressDialog);
            Log.e("$$$$ IOException", e.toString());
        } catch (SecurityException e) {
            if (parcelFileDescriptor!=null) {
                try {
                    parcelFileDescriptor.close();
                    parcelFileDescriptor = null;
                    contentResolver=null;
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }

            if (mPdfRenderer!=null){
                mPdfRenderer.close();
                mPdfRenderer=null;
            }

            exceptionMsg="Password protected file, This can't be opened";
            handleExceptionInUI(exceptionMsg, progressDialog);
            Log.e("$$$$ SecurityException", e.toString());
        } catch (Exception e) {
            exceptionMsg="Sorry! Something went wrong.";
            handleExceptionInUI(exceptionMsg, progressDialog);
            Log.e("$$$$ EXCEPTION", e.toString());
        }
        return mPdfRenderer;
    }

衷心感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我的应用程序也遇到了同样的问题。我解决该问题的方法是使用atomic_refresh并加载文档并检查密码保护。在未引发InvalidPasswordException之后,可以使用PdfRenderer安全地加载文件。