2

我正在从我的应用程序中启动相机。我正在使用带有额外 android.provider.MediaStore.EXTRA_OUTPUT 的 Android.provider.MediaStore.ACTION_IMAGE_CAPTURE。如果我使用 EXTRA_OUTPUT 与否,照片将添加到图库。

如何获取图库中图像的 Uri?我还没有找到一个干净的方法来做到这一点,我不想使用最后添加到图库的图像的 Uri,因为我不能确定它是用户拍摄的照片。

编辑: 让我在这里补充一下,我确实知道如何获取图像。目前我正在使用我的 Uri,我将其与 Intent 一起作为 EXTRA_OUTPUT 传递。那不是问题。问题是使用这种方法我得到两张照片写入 sdcard,我更喜欢只写一张。或者如果写了两个,一个在画廊中,一个在我自己的 Uri 中,我想使用其中一个 Uri:s 并删除另一个。在这两种情况下,我都需要照片的 Uri,它默认保存到 Gallery 中。

4

3 回答 3

2

如果您通过调用启动相机

startActivityForResult(cameraIntent, REQUEST_CODE_CAPTURE_IMAGE_ACTIVITY); // start the camera

在 onActivityResult 你可以捕获 mediaURI

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == REQUEST_CODE_CAPTURE_IMAGE_ACTIVITY
                && resultCode == RESULT_OK) {
                Uri imageUri = null;
                if (data != null){
                   imageUri = data.getData();
               }
        }
    }

REQUEST_CODE_CAPTURE_IMAGE_ACTIVITY是一个静态整数值,用于标识通过意图发出的请求。因此,如果您有多个 startActivityForResults ,您可以确定哪一个正在返回。

请注意,如果您通过 EXTRA_OUTPUT 预先插入一个 URI,您将不会通过 data.getData() 取回 URI;您必须将预先插入的 URI 存储在一个变量中,并在您的 onActivityResult 中检索它,同时检查 imageUri 是否为空。

前任。

 Uri imageUri = null;
if (data != null){
   imageUri = data.getData();
}
if (imageUri == null && preinsertedUri != null)
 imageUri = preinsertedUri;

// 用 imageUri 做事

于 2012-04-17T14:14:21.873 回答
2

data.getData()从in获取 UrionActivityResult()不是解决方案。这适用于三分之一的测试设备,并且在摩托罗拉 Defy 模拟器上也失败了。

所以这就是我最终做的事情:

  1. 用 调用相机Android.provider.MediaStore.ACTION_IMAGE_CAPTURE,不EXTRA_OUTPUT
  2. 获取存储在 Gallery 中的图像的 Uri

这似乎与测试设备配合得很好,但我仍然对这个解决方案并不完全满意,因为我不能完全确保最后添加的图像始终是用户捕获的图像。

于 2012-04-21T06:52:22.510 回答
0

公共类 SampleImageActivity 扩展 Activity {

private static final int SELECT_PICTURE = 1;

private String selectedImagePath;
private ImageView img;

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

    img = (ImageView)findViewById(R.id.ImageView01);

    ((Button) findViewById(R.id.Button01))
            .setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    Intent intent = new Intent();
                    intent.setType("image/*");
                    intent.setAction(Intent.ACTION_GET_CONTENT);
                    startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
                }
            });
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == SELECT_PICTURE) {
            Uri selectedImageUri = data.getData();
            selectedImagePath = getPath(selectedImageUri);
            System.out.println("Image Path : " + selectedImagePath);
            img.setImageURI(selectedImageUri);
        }
    }
}

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

}

于 2015-07-01T11:09:09.247 回答