WebView.capturePicture使用url参数失败

时间:2009-09-16 08:37:45

标签: android

[Android新手提醒]

我需要在BitMap中捕获WebView的内容,但我遇到了一个奇怪的问题。我的方法是使用WebView注册WebViewClient,在 onPageFinished 中调用 capturePicture 。使用简单的网址(例如http://www.yahoo.com),它可以正常工作。在其他情况下,capturePicture返回一个高度和宽度值= 0的图片。无论哪种方式,页面加载都很好。我必须使用的实际网址有相当多的url参数,我最初认为有任何参数是问题,但事实并非如此。以下是一些示例网址,其中包含指示其是否有效的注释:

  1. w.loadUrl( “http://www.yahoo.com”); //是
  2. w.loadUrl( “http://search.yahoo.com/search?p=android”); //通常不是???
  3. w.loadUrl( “http://www.yahoo.com?foo=bar”); //不是
  4. w.loadUrl( “http://www.google.com”); // yep
  5. w.loadUrl( “http://www.google.com?q=android”); // yep
  6. w.loadUrl( “http://www.google.com?foo=bar”); //是的
  7. 第二种情况特别令人沮丧,因为它似乎不起作用。但是,如果我首先使用#5运行测试应用程序,然后将URL切换到#2并运行它然后工作。

    以下是我创建的实际简化测试的片段:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        w = new WebView(this);
        w.setWebViewClient(new WebViewClient() {
            public void onPageFinished(WebView webview, String url) {
                Picture picture = webview.capturePicture();
    
                Log.d("Height", "" + picture.getHeight());
                Log.d("Width", "" + picture.getWidth());
                Bitmap b = Bitmap.createBitmap(picture.getWidth(), picture
                        .getHeight(), Bitmap.Config.ARGB_8888);
                Canvas c = new Canvas(b);
                picture.draw(c);
            }
        });
    
        w.getSettings().setJavaScriptEnabled(true);
    
        setContentView(w);
    
        //w.loadUrl("http://www.yahoo.com"); //yes
        w.loadUrl("http://search.yahoo.com/search?p=android"); // usually not???
        //w.loadUrl("http://www.yahoo.com?foo=bar"); // nope
        //w.loadUrl("http://www.google.com"); // yep
        //w.loadUrl("http://www.google.com?q=android"); // yep
        //w.loadUrl("http://www.google.com?foo=bar"); // yes
    }
    

    有没有人遇到过这个问题?希望我只是一个白痴,有一个简单的解决方案或解决方法?

1 个答案:

答案 0 :(得分:8)

我刚刚再次访问了文档页面。 [这里] [1]

“通知主机应用程序页面已完成加载。此方法仅针对主框架调用。当调用onPageFinished()时,渲染图片可能尚未更新。新图片的通知,使用onNewPicture(WebView,图片)。“

二手图片监听器,我尝试了你的样品,它的工作原理 希望这会有所帮助。

我刚刚将以下代码添加到您的示例中并删除了WebViewClient

 w.setPictureListener(new PictureListener(){

    public void onNewPicture(WebView view, Picture picture) {
            Log.d(TAG, "onNewPicture- Height"+ picture.getHeight());
            Log.d(TAG, "onNewPicture- Width"+ picture.getWidth());
        }

    });

[1]:http://developer.android.com/reference/android/webkit/WebViewClient.html#onPageFinished(android.webkit.WebView,java.lang.String)