【问题标题】:Android saving Webview ScreenshotAndroid 保存 Webview 截图
【发布时间】:2015-07-24 13:42:03
【问题描述】:

我创建了一个按钮来捕获 Web 视图的屏幕截图并将其保存到 DCIM 中的文件夹中。问题是当我单击按钮时,屏幕截图会被捕获并保存在图库中,但是当我再次单击时,旧屏幕截图会以新名称再次保存。

这是我的代码。请帮忙

screenshot.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Bitmap bitmap = takeScreenshot();

            saveBitmap(bitmap);

        }
    });


 public Bitmap takeScreenshot() {
    mWebview.setDrawingCacheEnabled(true);
    return mWebview.getDrawingCache();

}


  public void saveBitmap(Bitmap bitmap) {

    Random r = new Random();
    long i1 = r.nextInt(9999-9) + 9;

    char[] chars = "ABCDEF".toCharArray();
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < 20; i++) {
        char c = chars[random.nextInt(chars.length)];
        sb.append(c);
    }

    File directory = new File(Environment.getExternalStorageDirectory() + "/DCIM/NCERT Stuff/");
    if(!directory.exists()) {
        directory.mkdirs();
    }
    File imagePath = new File(Environment.getExternalStorageDirectory() + "/DCIM/NCERT Stuff/NCERT"+i1+sb+".jpeg");
//    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imagePath)));

    FileOutputStream fos;
    try {
        fos = new FileOutputStream(imagePath);

        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
}

【问题讨论】:

    标签: android webview screenshot


    【解决方案1】:

    根据您的代码,您为每次点击生成随机数,并使用包含随机数的文件名保存它们,对吗?这就是为什么您会获得多个具有不同名称的图像...您可能需要重新考虑文件名生成代码来解决此问题..

    您可能希望删除此代码:

    Random r = new Random();
    long i1 = r.nextInt(9999-9) + 9;
    
    char[] chars = "ABCDEF".toCharArray();
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < 20; i++) {
        char c = chars[random.nextInt(chars.length)];
        sb.append(c);
    }
    

    并从以下位置删除 i1 变量:

    File imagePath = new File(Environment.getExternalStorageDirectory() + "/DCIM/NCERT Stuff/NCERT"+i1+sb+".jpeg");
    

    到:

    File imagePath = new File(Environment.getExternalStorageDirectory() + "/DCIM/NCERT Stuff/myScreenshot.jpeg");
    

    【讨论】:

    • 抱歉,您弄错了。我想要不同名称的文件。问题是旧屏幕截图再次以新名称保存我想要新屏幕截图以新名称
    【解决方案2】:

    我认为旧位图仍然是您的绘图缓存。请尝试链接中的方法。

    https://stackoverflow.com/a/10793429/3307005

    【讨论】:

      【解决方案3】:

      我自己得到了解决方案。让我先解释一下我面临的问题。 当我单击按钮时,屏幕截图被保存,现在假设我滚动浏览 web 视图并再次单击按钮,我的代码使用新名称而不是新的屏幕截图保存旧屏幕截图。

      解决办法:

      public Bitmap takeScreenshot() {
          mWebview.clearfocus(); //Cleares the preivious focus
          mWebview.setDrawingCacheEnabled(true);
          return mWebview.getDrawingCache();
      
      }
      

      感谢您的帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-26
        • 2014-01-22
        • 1970-01-01
        • 1970-01-01
        • 2012-05-02
        • 1970-01-01
        • 1970-01-01
        • 2013-05-05
        相关资源
        最近更新 更多