Skip to content Skip to sidebar Skip to footer

Get Image Path From Camera Intent

There is option of capture image from camera in my application.But there is problem to get image from camera. When i use ACTION_IMAGE_CAPTURE this it return null data.Please help m

Solution 1:

try this one

Intenti=newIntent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(i , 0);          

and call this

@OverrideprotectedvoidonActivityResult(int requestCode, int resultCode,
        Intent resultData) {
    super.onActivityResult(requestCode, resultCode, resultData);

        if (resultData != null) {

        String[] projection = { MediaStore.Images.Media.DATA };
                Cursorcursor= managedQuery(
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        projection, null, null, null);
                intcolumn_index_data= cursor
                        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToLast();

                StringimagePath= cursor.getString(column_index_data);
                BitmapbitmapImage= BitmapFactory.decodeFile(imagePath );
                imageView.setImageBitmap(bitmapImage );

            }

and use the prrmission what you want

<uses-permissionandroid:name="android.permission.CAMERA" /><permissionandroid:name="android.permission.FLASHLIGHT" /><uses-featureandroid:name="android.hardware.camera"/>

Solution 2:

If you successfully implement the code you will get the image that is captured then manually you can save it for future use.

@OverrideprotectedvoidonActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
            Bitmapphoto= (Bitmap) data.getExtras().get("data"); 
            videoView.setVisibility(View.INVISIBLE);
            imageView.setVisibility(View.VISIBLE);
            imageView.setImageBitmap(photo);
        }
    } 

Solution 3:

you can use following steps:

// create a global variable
File destination;
openCameraBtn.setOnClickListener(newOnClickListener() 
{

            @OverridepublicvoidonClick(View v) {
                 destination = newFile(Environment.getExternalStorageDirectory(),"image.jpg");

                 Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
                 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(destination));
                 startActivityForResult(intent, CAMERA_PICTURE);

            }
        });


@OverridepublicvoidonActivityResult(int requestCode, int resultCode, Intent data) 
    {


    if(requestCode == CAMERA_PICTURE && resultCode == Activity.RESULT_OK) 
           {
           try{
            FileInputStreamin=newFileInputStream(destination);
            BitmapFactory.Optionsoptions=newBitmapFactory.Options();
            options.inSampleSize = 10; //Downsample 10x
            Log.d("PP", " bitmap factory=========="+options);
            Bitmapuser_picture_bmp= BitmapFactory.decodeStream(in, null, options);
        userImage.setImageBitmap(user_picture_bmp);
        } catch (Exception e) 
          { e.printStackTrace();
         }

    } 

please declare permission and feature in your manifest file.

<uses-permissionandroid:name="android.permission.CAMERA" /><uses-featureandroid:name="android.hardware.camera" />

if u want in more detail then you can use following link:

http://developer.android.com/guide/topics/media/camera.html

i hope you will success.

Solution 4:

You're probably running a Samsung device. I believe this is a bug that occurs in these devices. You have to get the URI otherwise. Do this:

/**
  * (This is a variable instance) Contains the path and file name where you want to save the image.
  * Mainly used to start Intent.Action_View with this URI. (GalleryApp)
  */private Uri uriImage= null;

publicvoid onClickCamera(View v){
    // Cria uma intent para capturar uma imagem e retorna o controle para quem o chamou (NAO PRECISA DECLARAR PERMISSAO NO MANIFESTO PARA ACESSAR A CAMERA POIS O FAZEMOS VIA INTENT).// Creates an intent to capture an image and returns control to the caller
    Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE );
    // Cria um arquivo para salvar a imagem.// Creates an file to save the image.
    uriImage = ProcessaImagens.getOutputMediaFileUri( ProcessaImagens.MEDIA_TYPE_IMAGE, getActivity().getApplicationContext() );
    // Intent to pass a URI object containing the path and file name where you want to save the image. We'll get through the data parameter of the method onActivityResult().
    intent.putExtra( MediaStore.EXTRA_OUTPUT, uriImagem );
    // Starts the intent to image capture and waits the result.
    startActivityForResult( intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE );
}

The ProcessaImagens class is a class that I coded and I'm sharing with everyone. Can use this class to facilitate. It has a very good method to compress the image if you want to save images in the database. In its onActivityResult() method do this:

@OverridepublicvoidonActivityResult( int requestCode, int resultCode, Intent data ) {
    // If finished activity on startForActivityResult.if ( resultCode == Activity.RESULT_OK ) {
        if ( requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE ) {
            StringimagePath= uriImage.getPath();
            // I will compress the imagem. Read the javadoc from method and you'll see which it returns both bitmap and array bytes.
            List<Object> imageCompact = ProcessaImagens.compactarImagem( uriImagem.getPath() );
            BitmapimageBitmap= (Bitmap) imageCompact.get( 0 );
            byte[] imageBytes = (byte[]) imageCompact.get( 1 );

        }
    }
    // If canceled activity on startForActivityResult.elseif ( resultCode == Activity.RESULT_CANCELED ) {
        if ( requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE ) {
            // User canceled the image capture.
            Log.d( getTag(), "Image capture canceled!" );
        }
    }
    // If an error occurred in the activity on startForActivityResult.else {
        // Failed the image capture, alert the user.
        Toast.makeText( getActivity().getApplicationContext(), "FAILED! The image capture failed!", Toast.LENGTH_LONG ).show();
        Log.e( getTag(), "FAILED! The image capture failed!" );
    }
}

Note that I used getActivity().getApplicationContext() because I'm getting the context from a Fragment and not from Activity. I believe with this method you can have what you want. Just make little changes how form to get context.

Solution 5:

Cursorcursor= getContentResolver().query(Media.EXTERNAL_CONTENT_URI, newString[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
         if(cursor != null && cursor.moveToFirst())
         {
             do {
                 Uriuri= Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA)));
                 StringphotoPath= uri.toString();
             }while(cursor.moveToNext());


             cursor.close();
         }

when while loop doing the last itration it give the image path which in captured last time.

Post a Comment for "Get Image Path From Camera Intent"