Откройте локальный файл в pdf.js android webview («файл» не поддерживается ошибка) - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь следовать указанному ответу здесь . Основываясь на комментариях, загрузка локального файла с использованием pdf.js в Android WebView должна работать, но я получаю следующую ошибку:

I/chromium: [INFO:CONSOLE(18556)] "Fetch API cannot load file:///android_asset/www/pdfjs/web/tracemonkey.pdf. URL scheme "file" is not supported.", source: file:///android_asset/www/pdfjs/build/pdf.js (18556)
I/chromium: [INFO:CONSOLE(13127)] "Uncaught (in promise) DataCloneError: Failed to execute 'postMessage' on 'Worker': TypeError: Failed to fetch could not be cloned.", source: file:///android_asset/www/pdfjs/build/pdf.js (13127)
    [INFO:CONSOLE(985)] "Uncaught (in promise) Error: An error occurred while loading the PDF.", source: file:///android_asset/www/pdfjs/web/viewer.js (985)

Вот мой код:

class PDFViewerLocalActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.pdfviewer_layout)

        val webView = findViewById(R.id.pdfViewer) as WebView
        webView.settings.javaScriptEnabled = true
        webView.settings.allowFileAccessFromFileURLs = true
        webView.settings.allowUniversalAccessFromFileURLs = true
        webView.settings.builtInZoomControls = true
        webView.webChromeClient = WebChromeClient()

        webView.loadUrl("file:///android_asset/www/pdfjs/web/viewer.html?file=tracemonkey.pdf")

    }
}

enter image description here

1 Ответ

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

Хорошо, это был глупый вопрос.Я уже добавил следующие разрешения в манифест:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Но забыл, что для API 23 и выше вы должны запрашивать разрешение во время выполнения.Итак, просто добавили код для запроса разрешений и все заработало.

@TargetApi(23)
fun askPermissions() {
    val permissions = arrayOf("android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE")
    val requestCode = 200
    requestPermissions(permissions, requestCode)
}
...