如何以编程方式保存屏幕截图而不覆盖之前截取的屏幕截图?

How can I save a screenshots programmatically with out over writing the previously taken screenshot?

我正在开发一个 android 应用程序,我想保存该应用程序的屏幕截图。我可以保存单个屏幕截图,但它会覆盖之前的屏幕截图。 我按照教程进行了修改,但只需要一张截图

附上按钮动作中的代码

      case R.id.btn_save:
            View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
            Bitmap bitmap = getScreenShot(rootView);
            int i = 0;
            File file = new File("ScreenShot"+ i +".PNG");
            if(!file.exists()){
                store(bitmap, "ScreenShot"+ i +".PNG");
            }
            else {
                store(bitmap, "ScreenShot"+ i++ +".PNG");
            }

和截图存储功能

public void store(Bitmap bm, String fileName){
    String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Screenshots";
    File dir = new File(dirPath);
    if (!dir.exists()){
        dir.mkdirs();
    }
    File file = new File(dirPath,fileName);
    try{
        FileOutputStream fos = new FileOutputStream(file);
        bm.compress(Bitmap.CompressFormat.PNG, 100,fos);
        fos.flush();
        fos.close();
    }catch (Exception e){
        e.printStackTrace();
        Toast.makeText(this, "Error saving File", Toast.LENGTH_SHORT).show();
    }
}

因为在该代码中,文件名始终相同 - i 始终为 0。为了使其适用于应用程序的一次使用,i 应该是一个成员变量并递增每个屏幕截图。为了使其更普遍地工作,您应该使用 File.createTempFile()

生成一个随机名称

您在保存按钮内声明了 i 变量,因此单击按钮时您将始终从 0 开始。要使用您尝试的方式,您应该在该范围之外声明该变量,但是当您终止并重新打开应用程序时它将重新启动。

如果您想使用该方法,您可以使用“共享首选项”保存以下号码以供使用(或上次使用)。如果没有,您可以简单地使用

"Screenshot" + System.currentTimeInMillis().toString(). 

您还会看到截图的时间(虽然以毫秒为单位)。如果您愿意,可以将其格式化为 "user readable" 20191110 例如

case R.id.btn_save:
   View rootView getWindow().getDecorView().findViewById(android.R.id.content);
   Bitmap bitmap = getScreenShot(rootView);

   File dir = new File(Environment.getExternalStorageDirectory(), "Screenshots");

   if (!dir.exists())
    if ( !dir.mkdirs())
        {
          Toast ( could not create dir...);
          return;
        }

 int i = 0;
 while (++i > 0 )
  {
  String fileName = "ScreenShot"+ i +".png";

  File file = new File(dir, fileName);
  if(!file.exists())
       {
         store(bitmap, file);

         break;
        }
  }
  break;     

store(Bitmap bm, String fileName)的参数改为store(Bitmap bm, File file)

在那里你可以删除 try 块之前的所有代码。