Android:Camera API 学习(二)
文章目录
一、Android:保存媒体文件
用户创建的照片和视频等媒体文件应保存到设备的外部存储目录(SD 卡)中,这样不仅可以节省系统空间,还能让用户在不使用其设备的情况下访问这些文件。您可以将媒体文件保存至设备上的多个目录位置,但作为开发者,您应考虑的标准位置仅有两个:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
此方法会返回一个标准的共享位置(推荐位置),用于保存照片和视频。此目录为共享(公开)目录,因此其他应用可轻松发现、读取、更改和删除保存在此位置中的文件。如果用户卸载了您的应用,保存到此位置的媒体文件将不会遭到移除。为避免干扰用户的现有照片和视频,您应该在此目录中创建一个子目录,用于保存您应用的媒体文件。Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
此方法会返回一个标准位置,用于保存与您的应用相关联的照片和视频。如果用户卸载了您的应用,保存在此位置中的所有文件都将遭到移除。系统没有对此位置中的文件采取任何强制的安全措施,因此其他应用可以读取、更改和删除它们。
以下示例代码演示了如何为媒体文件创建 File 或 Uri 位置,以便在使用 Intent 调用设备相机时或在构建相机应用的过程中使用。
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
/**创建用于保存图像或视频的文件Uri */
private static Uri getOutputMediaFileUri(int type){
return Uri.fromFile(getOutputMediaFile(type));
}
/** 创建用于保存图像或视频的文件*/
private static File getOutputMediaFile(int type){
// 为了安全起见,您应该检查SD卡是否已安装
// 使用环境。执行此操作之前,请先获取getExternalStorageState()
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyCameraApp");
// 如果希望共享创建的图像,在本地效果最佳
// 在应用程序之间,并在卸载应用程序后保持。
// 如果存储目录不存在,请创建该目录
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
//创建媒体文件名
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg")