更改相机意图点击的照片路径

时间:2014-09-09 13:17:34

标签: android

我正在开发一个点击照片的应用程序,它应该将照片存储在与默认存储位置不同的文件夹中。请指导我。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}

这是基本代码,请告诉我需要进行的更改。

2 个答案:

答案 0 :(得分:1)

您无法更改默认文件夹位置,但可以复制图像供您使用。如果要更改它,请使用系统相机。 您需要调用活动结果并获取捕获的图像并将其存储在任何位置。 对于我的案例文件(图像)名称是 currenttimestamp.jpg

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        if (resultCode == RESULT_OK){
            try {
                AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(intent.getData(), "r");
                FileInputStream fis = videoAsset.createInputStream();
                File tmpFile = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg"); 
                FileOutputStream fos = new FileOutputStream(tmpFile);

                byte[] buf = new byte[1024];
                int len;
                while ((len = fis.read(buf)) > 0) {
                    fos.write(buf, 0, len);
                }       

<强> 修改 告诉android你已复制了图片。这将使文件夹显示为用户设备上的图库,只需将路径和mimetype传递到媒体扫描程序连接。

                conn.scanFile(fos..getAbsolutePath(),"image/*");

**结束编辑*

                fis.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

*编辑设置mediascanner连接*

private static MediaScannerConnection conn;

onCreate()

中的某个地方
 conn = new MediaScannerConnection(this, this);
 conn.connect();



@Override
public void onScanCompleted(String path, Uri uri) {
// now is good time to save stuff in the database because
// the last segment of the uri is the imageId in the mediaStore.
// you can easily pull a thumbnail from the mediaStore with the imageId.
// example of getting thumbnail
//final BitmapFactory.Options bmOptions = new BitmapFactory.Options();
//          bmOptions.inSampleSize = 1;
//Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail(
//                          context.getContentResolver(), newImageId,
//                          MediaStore.Images.Thumbnails.MINI_KIND,
//                              bmOptions);
}

@Override
public void onMediaScannerConnected() {
     //toast ready
     // enable your camera button
}

答案 1 :(得分:0)

Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyProjectName");

if (!imagesFolder.exists()) {
imagesFolder.mkdirs();// <----Do Not Forget this
}

SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy_HHmmss_Z");
String currentDateandTime = sdf.format(new Date());

String fileName = "image_" + String.valueOf(currentDateandTime) + ".jpg";
File output = new File(imagesFolder, fileName);
Uri uriSavedImage = Uri.fromFile(image);
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);


OutputStream imageFileOS;
try {
    imageFileOS = getContentResolver().openOutputStream(uriSavedImage);
    imageFileOS.write(arg0);
    imageFileOS.flush();
    imageFileOS.close();

    Toast.makeText(AndroidCamera.this, 
            "Image saved: ", 
            Toast.LENGTH_LONG).show();

} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);