Каков эффективный способ отображения изображений в Webview на Android 10 и выше?

#android #webview #android-10.0

#Android #веб-просмотр #android-10.0

Вопрос:

Я использовал webview для печати некоторых изображений и текстовых данных в andorid. Но на Android 10 и выше невозможно отображать изображения с указанием местоположения файла в webview (хотя я пытаюсь получить доступ к изображениям из кэша приложений, что обычно не требует разрешения на хранение), поэтому мне приходится отображать изображения с помощью imgageBase64. Но это вызывает ошибку OutOfMemoryError, когда я пытаюсь напечатать очень большие изображения.

Есть ли какие-либо варианты для его достижения?

Код, который я использую, приведен ниже.

 private void createWebPrintJob(WebView webView) {

       
        PrintManager printManager = (PrintManager) ReadNote.this
                .getSystemService(Context.PRINT_SERVICE);

        String jobName = getString(R.string.app_name)   "_" System.currentTimeMillis() ".pdf";

       
        PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(jobName);

       
        printManager.print(jobName, printAdapter,
                new PrintAttributes.Builder().build());

       
    }


private void doWebViewPrint() {
        // Create a WebView object specifically for printing
        WebView webView = new WebView(ReadNote.this);
        webView.setWebViewClient(new WebViewClient() {

            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                createWebPrintJob(view);
                mWebView = null;
            }
        });
String htmlimages="";
for (int i=0;i<cacheimagenames.size();  i){
htmlimages=htmlimages "<img src=""  Uri.fromFile(new File(ReadNote.this.getApplication().getCacheDir(),"/images/" cacheimagenames.get(i)))   ""><br><br>";
}

String htmlDocument = "<html><body>n"   htmlimages   "<body><html>n"

webView.loadDataWithBaseURL(null, htmlDocument, "text/HTML", "UTF-8", null);

        mWebView = webView;

}
 

Комментарии:

1. Почему бы просто не запросить разрешение на хранение, и там ваша проблема будет решена? Вы можете сделать так, чтобы он запрашивал разрешение только для устройств Android, использующих Android 10 или выше. Я также предлагаю использовать библиотеку, чтобы сделать это еще проще github.com/Karumi/Dexter

2. Это не сработает с разрешения, я тоже пробовал. (Доступ к кэшу приложения обычно не требует разрешения). Отображение изображения в webview является беспокойным.

3. В чем ошибка?

4. Когда я использую file uri для отображения изображения, он просто показывает системную миниатюру незагруженного изображения (только на android10 и выше другие более низкие версии показывают это без каких-либо проблем). Вот почему я использовал bitmap для imgageBase64, но это вызывает ошибку outofmemory.