文件不存在由相机拍摄的android图像

时间:2014-02-24 10:09:51

标签: android

在我的应用中获取相机拍摄的图像时出现问题。

当我尝试获取文件时,它不存在。我不知道问题出在哪里:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    this.imageView = (ImageView)this.findViewById(R.id.imageView1);
    Button photoButton = (Button) this.findViewById(R.id.button1);
    photoButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

            Uri uri = Uri.parse("/sdcard/Images/test_image.jpg");
            Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            photoIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

            startActivityForResult(cameraIntent, CAMERA_REQUEST);
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {

        File image=new File("/sdcard/Images/","test_image.jpg");
        if (image.exists()){
             Bitmap bm = BitmapFactory.decodeFile("/sdcard/Images/test_image.jpg");
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
             byte[] b = baos.toByteArray();
        }
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        imageView.setImageBitmap(photo);
    }
}

当它到达image.exists()时,它表示错误。我已经在清单上写了sd写权限。

2 个答案:

答案 0 :(得分:3)

Uri.parse创建一个uri,它解析给定的编码URI字符串而不是sdcard上不存在的文件路径。所以用户"file://"+ filename_with_path或使用Uri.fromFile从文件路径创建URI。也可以使用Environment.getExternalStorageDirectory()代替sdcard的静态路径:

File dir = Environment.getExternalStorageDirectory();
file = new File(dir, "test_image.jpg");
Uri uri = Uri.fromFile(file);

Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
photoIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(photoIntent, CAMERA_REQUEST);

第二个主要问题是您是否正在传递cameraIntent意图,而您未将MediaStore.EXTRA_OUTPUT添加到startActivityForResult。因此,要将photoIntent传递给startActivityForResult,因为您要在photoIntent Intent实例中添加MediaStore.EXTRA_OUTPUT键而不是cameraIntent

答案 1 :(得分:2)

您可以检查您的路径以及您的文件夹是否存在:

File[] file = Environment.getExternalStorageDirectory().listFiles();  

它为您提供了SD卡路径及其所有文件夹。