Java 从camera Intent检索图像URI并将图像设置为Imageview

Java 从camera Intent检索图像URI并将图像设置为Imageview,java,android,android-intent,Java,Android,Android Intent,我正在尝试检索图像URI并将图像设置为Imageview…但每次我尝试时,图像视图上都会出现一个黑色图像 下面是我的代码:- //摄像机意图 Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri); startActivityForResult(i, request); 从摄像机获取数据 Bundl

我正在尝试检索图像URI并将图像设置为Imageview…但每次我尝试时,图像视图上都会出现一个黑色图像

下面是我的代码:-

//摄像机意图

Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri);

startActivityForResult(i, request);
从摄像机获取数据

Bundle extra = data.getExtras();
Bitmap photos =(Bitmap)extra.get("data");
String path=getOriginalImagePath();
File f = new File(path);  //
 ImageURI = Uri.fromFile(f);
showpotos.setImageURI(ImageURI);



public String getOriginalImagePath() {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = Profile_details.this.managedQuery(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                projection, null, null, null);
        int column_index_data = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToLast();

        return cursor.getString(column_index_data);
    }

如何解决这个问题……请帮助删除第二个代码列表中的所有内容


在onActivityResult()的
中,从
mImageCaptureUri
加载图像。这就是您告诉相机应用程序保存图像的地方。

删除第二个代码列表中的所有内容

在onActivityResult()的
中,从
mImageCaptureUri
加载图像。这就是您告诉相机应用程序保存图像的地方。

您好,请使用以下代码:-

打开摄像机的意图:-

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Declare mUri as globel varibale in class
mUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "pic_"+ String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri);
startActivityForResult(intent, 1);
ActivityResult函数中的代码:-

if(requestCode==1) {

    image_str =getRealPathFromURI(mUri).toString();
     try {
    Picasso.with(getApplicationContext()).load(mUri)into(Imageview1);
            } catch (Exception e) {
                e.printStackTrace();
                            }   
                    }
函数获取图像的实际路径:-

public String getRealPathFromURI(Uri contentUri)
            {
                try
                {
                    String[] proj = {MediaStore.Images.Media.DATA};
                    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
                    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    System.out.println("column_index of selected image is:"+column_index);
                    cursor.moveToFirst();
                    System.out.println("selected image path is:"+cursor.getString(column_index));
                    return cursor.getString(column_index);
                }
                catch (Exception e)
                {
                    return contentUri.getPath();
                }
            }
并在清单文件中声明以下权限:-

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

你好,请使用以下代码:-

打开摄像机的意图:-

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Declare mUri as globel varibale in class
mUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "pic_"+ String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri);
startActivityForResult(intent, 1);
ActivityResult函数中的代码:-

if(requestCode==1) {

    image_str =getRealPathFromURI(mUri).toString();
     try {
    Picasso.with(getApplicationContext()).load(mUri)into(Imageview1);
            } catch (Exception e) {
                e.printStackTrace();
                            }   
                    }
函数获取图像的实际路径:-

public String getRealPathFromURI(Uri contentUri)
            {
                try
                {
                    String[] proj = {MediaStore.Images.Media.DATA};
                    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
                    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    System.out.println("column_index of selected image is:"+column_index);
                    cursor.moveToFirst();
                    System.out.println("selected image path is:"+cursor.getString(column_index));
                    return cursor.getString(column_index);
                }
                catch (Exception e)
                {
                    return contentUri.getPath();
                }
            }
并在清单文件中声明以下权限:-

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

下面是我使用过的,它很有效。如果您仍在寻找解决方案,您可能希望尝试一下

public void takePicture(View view) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    file = Uri.fromFile(getOutputMediaFile());
    intent.putExtra(MediaStore.EXTRA_OUTPUT, file);

    startActivityForResult(intent, 100);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent 
data) {
    if (requestCode == 100) {
        if (resultCode == RESULT_OK) {
            imageView.setImageURI(file);
    }
  }
}

下面是我使用过的,它是有效的。如果您仍在寻找解决方案,您可能希望尝试一下

public void takePicture(View view) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    file = Uri.fromFile(getOutputMediaFile());
    intent.putExtra(MediaStore.EXTRA_OUTPUT, file);

    startActivityForResult(intent, 100);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent 
data) {
    if (requestCode == 100) {
        if (resultCode == RESULT_OK) {
            imageView.setImageURI(file);
    }
  }
}
试试这个解决方案

将这些权限放入清单中

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-feature android:name="android.hardware.camera" android:required="true" />
获取捕获的图像

@Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                    Bundle extras = data.getExtras();
                    Bitmap imageBitmap = (Bitmap) extras.get("data");

                    Imview.setImageBitmap(imageBitmap);

                    // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
                    Uri tempUri = getImageUri(getApplicationContext(), imageBitmap);

                    //DO SOMETHING WITH URI

                }
            }
方法获取图像URI

public Uri getImageUri(Context inContext, Bitmap inImage) {
                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
                String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
                return Uri.parse(path);
}
试试这个解决方案

将这些权限放入清单中

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-feature android:name="android.hardware.camera" android:required="true" />
获取捕获的图像

@Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                    Bundle extras = data.getExtras();
                    Bitmap imageBitmap = (Bitmap) extras.get("data");

                    Imview.setImageBitmap(imageBitmap);

                    // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
                    Uri tempUri = getImageUri(getApplicationContext(), imageBitmap);

                    //DO SOMETHING WITH URI

                }
            }
方法获取图像URI

public Uri getImageUri(Context inContext, Bitmap inImage) {
                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
                String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
                return Uri.parse(path);
}

首先,不要直接从
Uri
解码位图。您可能会陷入内存问题。而是使用图像加载程序,如
Glide
Picasso
等。首先,不要直接从
Uri
解码位图。您可能会陷入内存问题。相反,请使用图像加载器,如
Glide
Picasso
等@akshaydeplamba:确保在配置更改过程中(例如,通过保存的实例状态
捆绑包
)保留此值。请参阅@Akshaydeplamba:确保在配置更改过程中(例如,通过保存的实例状态
捆绑包
)保持此值不变。请参见但getOutputMediaFile()是什么?但getOutputMediaFile()是什么?此答案以及添加一些代码以擦除onDestroy上的临时文件。
saved my week!这个答案连同添加一些代码来删除onDestroy上的临时文件一起保存了我的一周!