我在布局中使用webview,其中包含一个按钮,点击该按钮,我试图捕获设备屏幕截图,点击我班上点击调用javascript方法,
public void screenShots()
{
v1 = RelativeLayout.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bm = v1.getDrawingCache();
BitmapDrawable bitmapDrawable = new BitmapDrawable(bm);
v1.setDrawingCacheEnabled(false);
image.setBackgroundDrawable(bitmapDrawable);
}
RelativeLayout是包含webview的布局 当我跑步&单击按钮进行屏幕截图, 它抛出错误
11-05 03:08:09.761: W/webview(21152): java.lang.Throwable: Warning: A WebView method was called on thread 'WebViewCoreThread'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
11-05 03:08:09.761: W/webview(21152): at android.webkit.WebView.checkThread(WebView.java:9955)
11-05 03:08:09.761: W/webview(21152): at android.webkit.WebView.getSettings(WebView.java:4314)
11-05 03:08:09.761: W/webview(21152): at android.webkit.WebView.onDraw(WebView.java:4498)
11-05 03:08:09.761: W/webview(21152): at android.view.View.draw(View.java:11007)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
11-05 03:08:09.761: W/webview(21152): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
11-05 03:08:09.761: W/webview(21152): at android.view.View.draw(View.java:11010)
11-05 03:08:09.761: W/webview(21152): at android.widget.FrameLayout.draw(FrameLayout.java:450)
11-05 03:08:09.761: W/webview(21152): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2302)
11-05 03:08:09.761: W/webview(21152): at android.view.View.buildDrawingCache(View.java:10724)
11-05 03:08:09.761: W/webview(21152): at android.view.View.getDrawingCache(View.java:10505)
11-05 03:08:09.761: W/webview(21152): at android.view.View.getDrawingCache(View.java:10470)
11-05 03:08:09.761: W/webview(21152): at com.curioussolutions.tashpatti.TashPatti$JavaScriptInterface.screenShots(TashPatti.java:90)
11-05 03:08:09.761: W/webview(21152): at android.webkit.WebViewCore.nativeTouchUp(Native Method)
11-05 03:08:09.761: W/webview(21152): at android.webkit.WebViewCore.nativeTouchUp(Native Method)
11-05 03:08:09.761: W/webview(21152): at android.webkit.WebViewCore.access$3900(WebViewCore.java:56)
11-05 03:08:09.761: W/webview(21152): at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1388)
11-05 03:08:09.761: W/webview(21152): at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 03:08:09.761: W/webview(21152): at android.os.Looper.loop(Looper.java:137)
11-05 03:08:09.761: W/webview(21152): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:737)
该做什么,是否有任何参考
答案 0 :(得分:0)
创建文件并将图像存储在SD卡中,如下所示:
// Declaration :
private Activity activity;
// Initialization :
activity = MainActivity.this;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
File photo = new File(Environment.getExternalStorageDirectory()
+ "/.SomeWhereInSD", "photoToShare.png");
saveImage.setDrawingCacheEnabled(true);
saveImage.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
saveImage.post(new Runnable() {
public void run() {
Bitmap bitmap = null;
System.gc();
bitmap = Bitmap.createBitmap(saveImage.getDrawingCache(true));
saveImage.setDrawingCacheEnabled(false);
OutputStream outStream = null;
try {
outStream = new FileOutputStream(photo.getAbsolutePath());
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
myImage.setImageBitmap(myBitmap);
} catch (FileNotFoundException e) {
} catch (IOException e) {
} catch (OutOfMemoryError out) {
}
};
});
}
});
答案 1 :(得分:0)
您是否在java代码中使用javaScript接口?一旦我遇到类似的情况。 javascript界面(在webViewClient方面)帮助了我。
我用它作为
private void openWebviewDialog(String days)
{
dialog = new Dialog(MainActivity.GLOBAL_CONTEXT);
dialog.setContentView(R.layout.simple_webview);
WebView wb = (WebView) dialog.findViewById(R.id.simple_webview);
WebSettings webSettings = wb.getSettings();
wb.setWebViewClient(new MyWebViewClient());
webSettings.setJavaScriptEnabled(true);
wb.addJavascriptInterface(this, "javaScriptInterface");
String url = "http://www.google.com" // your url here
String title = "Hello";
wb.loadUrl(url);
dialog.setCancelable(true);
dialog.setTitle(title);
dialog.show();
}
class MyWebViewClient extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if(url.contains("openExternal"))
{
return super.shouldOverrideUrlLoading(view, url); // Leave webview and use browser
}
else
{
view.loadUrl(url); // Stay within this webview and load url
return true;
}
}
@Override
public void onPageFinished(WebView view, String url)
{
Utils.hideSpinner();
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
Utils.showSpinner();
super.onPageStarted(view, url, favicon);
}
}
@JavascriptInterface
public void passResult(String status, String message)
{
// Do as required. This method is called from JavaScript code of webView
}
此javaScriptInterface从webView调用为
<p>please wait while we are verifying your payment....</p><script type='text/javascript' language='javascript'>javaScriptInterface.passResult('error','Your transaction failed');</script>