Android 显示从相机拍摄的图像时,Uri为空

Android 显示从相机拍摄的图像时,Uri为空,android,android-camera,android-image,android-bitmap,Android,Android Camera,Android Image,Android Bitmap,嗨,我需要从相机拍摄一张照片,并显示在屏幕上 但我得到的Uri为null 我需要获取文件的绝对路径 我的代码: mintent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); mintent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString()); startActi

嗨,我需要从相机拍摄一张照片,并显示在屏幕上

但我得到的Uri为null

我需要获取文件的绝对路径

我的代码:

mintent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mintent.putExtra(MediaStore.EXTRA_OUTPUT,
             MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
startActivityForResult(mintent, 1);


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if ((data != null && !data.toString().equalsIgnoreCase("Intent {  }"))
            || requestCode == 1)
        switch (requestCode) {
        case 1:
            try {
                 Uri imageFileUri = data.getData();

                 Bitmap bitmap = (Bitmap) data.getExtras().get("data");
img2.setImageBitmap(bitmap);
}
}

请帮助..

这是我用来获取图片Uri的代码

  private Bitmap photo;
  private File pic;
  private Uri uri;

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
      photo = (Bitmap) data.getExtras().get("data");

      try {
        File root = Environment.getExternalStorageDirectory();
        if (root.canWrite()) {
          pic = new File(root, "pic.png");
          FileOutputStream out = new FileOutputStream(pic);

          photo.compress(CompressFormat.PNG, 100, out);

          out.flush();
          out.close();
        }
      } catch (IOException e) {
        Log.e("BROKEN", "Could not write file " + e.getMessage());
      }

      // This is the uri you are looking for.
      uri = Uri.fromFile(pic);
    }
  }
注:别忘了接受你在上一个问题中提出的答案:如果你不想名誉扫地。

你的问题是:

mintent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mintent.putExtra(MediaStore.EXTRA_OUTPUT,
             MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
您没有传递希望文件驻留的URI。而是传递文件夹的URI。相反,您应该将URI传递到希望文件的位置。下面是我几个月前做的一个项目的一个例子:

File lastSavedFile;

/**
 * IMPORTANT: this must be a directory readable by multiple apps (not private storage)
 * @return
 */
@SuppressLint("SimpleDateFormat")
private File getTempFile() {
    // Create an image file name
    String timeStamp =  new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "barfile_" + timeStamp + ".jpg";

    return new File(Environment.getExternalStorageDirectory(), imageFileName);
}

/**
 * Called when we want to take a picture
 * 
 * @param position
 */
private void launchTakePictureIntent(int position)
{
    Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    lastSavedFile = getTempFile();
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(lastSavedFile));
    startActivityForResult(i, position);
}

/**
 * Returns from the camera intent, hopefully with a picture
 */
@Override
protected void onActivityResult(int position, int resultCode, Intent intent) {

    super.onActivityResult(position, resultCode, intent);

    if (resultCode == RESULT_OK) {
        Uri imageUri = Uri.fromFile(lastSavedFile);
        Bitmap fullBitmap;
        try {
            fullBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
        } catch (Exception e) {
            Log.e(TAG, e.toString(), e);
            return;
        }
        ...