SecurityException с PdfRenderer, поставляется с PDF-файлами, защищенными паролем, а затем повторяется даже с обычными PDF-файлами - PullRequest
0 голосов
/ 13 ноября 2018

Если попытаться открыть 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;
    }

Сердечно признателен за любую помощь.

1 Ответ

0 голосов
/ 26 ноября 2018

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

...