使用名称中的当前日期和时间将图像保存到 sd 不起作用

Posted

技术标签:

【中文标题】使用名称中的当前日期和时间将图像保存到 sd 不起作用【英文标题】:Saving image to sd with current date and time in name doesn't work 【发布时间】: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";

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

【问题讨论】:

【参考方案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"); 

【讨论】:

它不起作用,因为如前所述:冒号不是文件名中的有效字符。

以上是关于使用名称中的当前日期和时间将图像保存到 sd 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android - 将图像从 URL 保存到 SD 卡

从 JSON url 下载图像不起作用。 [关闭]

使用 Fresco 时如何将图像保存到 SD 卡?

从android寻呼机将图像保存到sd卡

将图像、音频和视频保存到 SD 卡

Android:尝试将图像保存到 SD 卡时应用程序退出