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

Я использовал приведенный ниже код, пожалуйста, проверил его.

PdfRenderer.Page page = null;
        Bitmap mBitmap;
        try {

            descriptor = getSeekableFileDescriptor(documentPath);
            renderer = new PdfRenderer(descriptor);
            page = renderer.openPage(0);
            Bitmap bitmap = Bitmap.createBitmap(page.getWidth(), page.getHeight(),Bitmap.Config.ARGB_8888);
            page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
            byte[] byteArray = byteArrayOutputStream.toByteArray();
            String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);
            page.close();
            renderer.close();
            response.invoke(params);
        } catch (SecurityException e) {
            Log.e(TAG, "SecurityException exception found: " + e);
            if (page != null)
                page.close();
            if (renderer != null)
                renderer.close();
        } catch (Exception e) {
            Log.e(TAG, "getPDFThumbnail exception found: " + e);
            if (page != null)
                page.close();
            if (renderer != null)
                renderer.close();
        }

protected ParcelFileDescriptor getSeekableFileDescriptor(String path) throws IOException {
        ParcelFileDescriptor parcelFileDescriptor = null;
        File pdfCopy = new File(path);
        if (pdfCopy.exists()) {
            parcelFileDescriptor = ParcelFileDescriptor.open(pdfCopy, ParcelFileDescriptor.MODE_READ_ONLY);
            return parcelFileDescriptor;
        }
        parcelFileDescriptor = this.reactContext.getApplicationContext().getContentResolver().openFileDescriptor(Uri.parse(path), "r");
        return parcelFileDescriptor;
    }

AndroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-feature android:name="android.hardware.location.gps" />
    <uses-feature android:name="android.hardware.location.location" />

    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="22" />

    <application
        android:name=".MainApplication"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:hardwareAccelerated="true"
        android:vmSafeMode="true"
        android:largeHeap="true"
        android:theme="@style/AppTheme">
</application>

Шаги: Сначала выберите защищенный паролем файл PDF, затем он напрямую выдаст исключение SecurityException, которое действительноно если я снова выберу обычный Pdf, который не защищен паролем, но он также вызывает исключение SecurityException.

...