Неправильная печать PDF не улавливает RuntimeException - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь напечатать файл PDF, и он работает нормально, пока я не попытаюсь напечатать искаженный файл PDF. Я не знаю, почему происходит сбой приложения, хотя я использовал try / catch для предотвращения сбоев. Я проверил и обнаружил, что PrintManager.java:1101 throws RuntimeException:

 case MSG_ON_KILL: {
     if (DEBUG) {
         Log.i(LOG_TAG, "onKill()");
     }

     String reason = (String) message.obj;
     throw new RuntimeException(reason);
 }

, поэтому приведенный ниже код не должен приводить к cra sh:

public static void startPdfPrintProcedure(@NonNull Context context, @NonNull String filePath, @Nullable String jobName) {
    try {
        PrintManager printManager = (PrintManager) context.getSystemService(Context.PRINT_SERVICE);
        String jobName = formatDefaultJobName(context.getResources(), jobName);
        PrintDocumentAdapter pda = new SimplePrintDocumentAdapter(new File(filePath));
        if (printManager != null) {
            try {
                printManager.print(jobName, pda, null); // <- crash here even though there is a try/catch
            } catch (RuntimeException e) {
                showUnknownError();
            }
        } else {
            showUnknownError();
        }
    } catch (RuntimeException e) {
        showUnknownError();
    }
}

Исключение, которое я получаю после попробуйте распечатать PDF. :

 java.lang.RuntimeException: Cannot print a malformed PDF file
    at android.print.PrintManager$PrintDocumentAdapterDelegate$MyHandler.handleMessage(PrintManager.java:1101)
    at android.os.Handler.dispatchMessage(Handler.java:112)
    at android.os.Looper.loop(Looper.java:216)
    at android.app.ActivityThread.main(ActivityThread.java:7625)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

Почему код try/catch не улавливает это исключение? Как я могу защитить этот кусок кода от сбоя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...