#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.