【问题标题】:Saving image to sd with current date and time in name doesn't work使用名称中的当前日期和时间将图像保存到 sd 不起作用
【发布时间】:2013-03-21 15:09:40
【问题描述】:

在我的应用程序中,我使用一个按钮启动相机应用程序并将图片保存到 sdCard 上的特定文件夹,按当前日期和时间命名。当我对图片的名称进行硬编码时,它可以正常工作,但如果我尝试在名称中添加日期,则它根本不起作用。

 Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
 File imagesFolder = new File(Environment.getExternalStorageDirectory(), Constants.IMAGE_FOLDER_URI);
 imagesFolder.mkdirs();    
 Date d = new Date();
 CharSequence s  = DateFormat.format("MM-dd-yy hh:mm:ss", d.getTime());    
 File image = new File(imagesFolder, s.toString() + ".jpg"); //this line doesn't work

 Uri uriSavedImage = Uri.fromFile(image);
 imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
 startActivity(imageIntent);

如果我说:

s = "some_name";

然后它可以工作,但我需要图像名称中的当前日期和时间。

【问题讨论】:

    标签: android image datetime save android-camera


    【解决方案1】:

    冒号: 不是文件名中的有效字符,这就是它无法创建此类文件的原因。 尝试将您的名称模式更改为以下内容:

    CharSequence s  = DateFormat.format("MM-dd-yy hh-mm-ss", d.getTime());
    

    【讨论】:

      【解决方案2】:

      把这段代码放到试试:

      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HH_mm_ss");
      String currentTimeStamp = dateFormat.format(new Date());
      

      【讨论】:

        【解决方案3】:

        这是一个替代解决方案:

        File cameraFolder;
        
        if (android.os.Environment.getExternalStorageState().equals
                (android.os.Environment.MEDIA_MOUNTED))
            cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(),
                    "YOUR_FOLDER_NAME/");
        else
            cameraFolder= StatusUpdate.this.getCacheDir();
        if(!cameraFolder.exists())
            cameraFolder.mkdirs();
        
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss");
        String timeStamp = dateFormat.format(new Date());
        String imageFileName = "picture_" + timeStamp + ".jpg";
        
        File photo = new File(Environment.getExternalStorageDirectory(), 
                "YOUR_FOLDER_NAME/" + imageFileName);
        

        如果您只想将时间戳作为图像名称,您可以从String imageFileName 中删除"picture_" +

        【讨论】:

        • android API 版本 22 的任何解决方案?这适用于至少 27
        • @Dev_Man:这不太可能适用于最低 27 版本。这个解决方案很久以前就发布了,效果很好。话虽如此,我不再使用此代码并开始使用库来处理图像拾取/捕获任务。省去了确保在多个制造商设备上兼容的麻烦。
        【解决方案4】:

        使用这个

        File image = new File(imagesFolder, s+ "Rj.jpg"); 
        

        【讨论】:

        • 它不起作用,因为如前所述:冒号不是文件名中的有效字符。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-06
        • 2018-04-09
        • 1970-01-01
        • 2016-06-24
        • 1970-01-01
        • 2016-01-08
        相关资源
        最近更新 更多