获取Android相机拍摄的图片的图像URI和缩略图

7

我想用内置的Android相机拍摄照片,并将其更新到ImageView中。 我使用以下代码:

void getPhoto() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, TAKE_PICTURE);
    }

然后我使用以下方式获取照片:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == TAKE_PICTURE) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            ImageView photoView = (ImageView) findViewById(R.id.photoId);
            photoView.setImageBitmap(photo);
            }
        }

但是使用此代码时,无论我做什么,我只能得到我所拍摄的照片的缩略图 - 我的问题是,如何获得刚刚拍摄的照片的Uri,以便不使用缩略图而使用原始图像? PS. 实际上我需要照片的缩略图,但我也需要原始照片的Uri。
1个回答

5
我在意图中放入了自己的URI来告诉它保存的位置,这样你就知道它在哪里了,我不确定是否还有其他方法。 为您的文件创建一些字段。
private String imagePath = "/sdcard/Camera/test.jpg";
private File originalFile;

然后初始化文件。
originalFile = new File(imagePath);

现在使用意图(Intent)启动相机应用程序,并将URI作为额外参数传递。
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Uri outputFileUri = Uri.fromFile(originalFile);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
    startActivityForResult(intent, RESULT_CAPTURE_IMAGE); 

在onActivityResult()方法中提取URI。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == RESULT_CAPTURE_IMAGE && resultCode == Activity.RESULT_OK) {
        mBitmap = BitmapFactory.decodeFile(originalImagePath, BitmapFactoryOptions);  //set whatever bitmap options you need.

现在你可以使用createBitmap构建位图,或者使用文件路径进行操作。


3
硬编码 /sdcard/ 的URI并不是一个好的实践,你应该使用获取环境变量的 getter 方法。 - James Burnstone
但是数据意图为空,您无法检索缩略图。您只能从完整尺寸的照片中创建它。 - Alexx Perez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接