Android保存Webview屏幕截图

Android保存Webview屏幕截图,android,webview,screenshot,Android,Webview,Screenshot,我创建了一个按钮来捕获Webview的屏幕截图,并将其保存到DCIM中的一个文件夹中。问题是当我点击按钮时,截图会被捕获并保存在图库中,但当我再次点击时,旧截图会以新名称再次保存 这是我的密码。请帮忙 screenshot.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bitmap bitmap = takeSc

我创建了一个按钮来捕获Webview的屏幕截图,并将其保存到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);
    }
}
screenshot.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
位图位图=截图();
保存位图(位图);
}
});
公共位图截图(){
mWebview.setDrawingCacheEnabled(true);
返回mWebview.getDrawingCache();
}
公共void保存位图(位图){
随机r=新随机();
长i1=r.nextInt(9999-9)+9;
char[]chars=“ABCDEF”.toCharArray();
StringBuilder sb=新的StringBuilder();
随机=新随机();
对于(int i=0;i<20;i++){
字符c=字符[random.nextInt(字符长度)];
sb.附加(c);
}
File directory=新文件(Environment.getExternalStorageDirectory()+“/DCIM/NCERT/”;
如果(!directory.exists()){
mkdirs()目录;
}
File imagePath=新文件(Environment.getExternalStorageDirectory()+”/DCIM/NCERT Stuff/NCERT“+i1+sb+”.jpeg”);
//sendBroadcast(新意图(Intent.ACTION\u MEDIA\u SCANNER\u SCAN\u文件,Uri.fromFile(imagePath));
文件输出流;
试一试{
fos=新文件输出流(imagePath);
bitmap.compress(bitmap.CompressFormat.JPEG,100,fos);
fos.flush();
fos.close();
}catch(filenotfounde异常){
Log.e(“GREC”,e.getMessage(),e);
}捕获(IOE异常){
Log.e(“GREC”,e.getMessage(),e);
}
}

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

您可能希望删除以下代码:

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);
}
致:


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


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

解决方案:

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

}

谢谢你的帮助

对不起,你搞错了。我想要不同名称的文件。问题是旧的屏幕截图会用新的名称再次保存,我想要新名称的新屏幕截图
File imagePath = new File(Environment.getExternalStorageDirectory() + "/DCIM/NCERT Stuff/myScreenshot.jpeg");
public Bitmap takeScreenshot() {
    mWebview.clearfocus(); //Cleares the preivious focus
    mWebview.setDrawingCacheEnabled(true);
    return mWebview.getDrawingCache();

}