Я пытаюсь распечатать веб-страницу, когда кнопка нажата на веб-странице с помощью введения javascript. Я получаю сообщение о тосте успешно, но опция печати не работает. Ожидаемый результат - когда пользователь нажимает кнопку «ОК» на веб-странице, он должен отображать предварительный просмотр.
MainActivity:
browser = new WebView(this);
browser.getSettings().setJavaScriptEnabled(true);
browser.post(new Runnable() {
@Override
public void run() {
browser.loadUrl("file:///android_asset/page.html");
}
});
setContentView(browser);
WebSettings ws = browser.getSettings();
ws.setJavaScriptEnabled(true);
browser.setWebChromeClient(new WebChromeClient());
browser.addJavascriptInterface(new Object() {
@JavascriptInterface // For API 17+
public void performClick(String strl) {
Toast.makeText(PrintTest.this, strl, Toast.LENGTH_SHORT).show();
createWebPrintJob();
}
}, "ok");
}
private void createWebPrintJob() {
PrintManager printManager = (PrintManager) getApplication().getSystemService(Context.PRINT_SERVICE);
@SuppressLint({"NewApi", "LocalSuppress"}) PrintDocumentAdapter printAdapter =
browser.createPrintDocumentAdapter("MyDocument");
String jobName = getString(R.string.app_name) +
" Print Test";
if (printManager != null) {
printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
}
}
}
стр. html
<html>
<body>
<button id="btnOK" onclick="ok.performClick(this.value);" type="button" value="">OK
</button>
</body>
</html>
Ошибка:
W/WebView: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread.