android - 内置摄像头,使用额外的 MediaStore.EXTRA_OUTPUT 存储图片两次(在我的文件夹中,在默认值中)

标签 android path camera image

我目前正在开发一个使用内置相机的应用程序。 我通过单击一个按钮来调用此代码段:

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

String path = Environment.getExternalStorageDirectory().getAbsolutePath();
path += "/myFolder/myPicture.jpg";
File file = new File( path );
//file.mkdirs();
Uri outputFileUri = Uri.fromFile( file );
//String absoluteOutputFileUri = file.getAbsolutePath();

intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, 0);

用相机拍照后,jpg很好存储在sdcard/myFolder/myPicture.jpg,但它也存储在/sdcard/DCIM/Camera/2011-06-14 10.36.10.jpg,默认路径。

有没有办法阻止内置相机将图片存储在默认文件夹中?

编辑:我想我会直接使用 Camera 类

最佳答案

另一种方法,在android 2.1上测试,取图库最后一张图片的ID或绝对路径,然后你可以删除重复的图片。

可以这样做:

/**
 * Gets the last image id from the media store
 * @return
 */
private int getLastImageId(){
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
    Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
    if(imageCursor.moveToFirst()){
        int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
        String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
        Log.d(TAG, "getLastImageId::id " + id);
        Log.d(TAG, "getLastImageId::path " + fullPath);
        imageCursor.close();
        return id;
    }else{
        return 0;
    }
}

并删除文件:

private void removeImage(int id) {
   ContentResolver cr = getContentResolver();
   cr.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media._ID + "=?", new String[]{ Long.toString(id) } );
}

此代码基于以下帖子:Deleting a gallery image after camera intent photo taken

关于android - 内置摄像头,使用额外的 MediaStore.EXTRA_OUTPUT 存储图片两次(在我的文件夹中,在默认值中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6341329/

相关文章:

command-line - Kotlin 从命令行编译

android - 无需重启即可释放 Android 相机?

c# - 需要在AssemblyInfo中引用log4net配置文件

ios5 - 通过 iOS 获取心率

android - 拍照中的 "antibanding"是什么?

android - 布局错误 : java. lang.UnsupportedOperationException:无法转换为尺寸

android - CursorAdapter 需要一个 _id 行的解决方法

android - Ant 构建脚本 : cannot find android. jar

android - 需要在 Android Studio 中手动输入 keystore 详细信息,即使它们存在于 build.gradle 中

variables - 在批处理文件的文件路径目录中使用变量