SecurityException с PdfRenderer, поставляется с защищенными паролем PDF-файлами, а затем повторяется даже с обычными PDF-файлами.

Если при попытке открыть защищенный паролем файл PDF с помощью PdfRenderer API выдается SecurityException и обрабатывается соответствующим образом, внутри блока catch и затем выполняется базовая очистка 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;
    }

Любая помощь сердечно приветствуется.


person ByteCountTim    schedule 13.11.2018    source источник


Ответы (1)


У меня была такая же проблема с моим приложением. Я решил это с помощью https://github.com/TomRoush/PdfBox-Android и загрузите документ и проверьте защиту паролем. После того, как исключение InvalidPasswordException не было выброшено, файл можно безопасно загрузить с помощью PdfRenderer.

person test    schedule 26.11.2018