Android - ImageView will not display camera snapshot

Please bear with me ... I was looking for DAYS for the working, bare piece of code that triggers camera activity, takes a snapshot and puts it on a simple ImageView>. <The code below starts the action and picks the peak in order, but the image is not displayed on the ImageView! Just what's missing ?: '(

public class MainActivity extends Activity { private static final int PICK_IMAGE = 0; private static final int PICK_IMAGE_FROM_GALLERY = 1; private Button mBtnCamera, mBtnGallery, mBtnCancel; private ImageView mImageView; private Uri mURI; private String mPhotoPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView) findViewById(R.id.imgDisplayImage); mBtnCamera = (Button) findViewById(R.id.btnPhotoCamera); mBtnGallery = (Button) findViewById(R.id.btnPhotoGallery); mBtnCancel = (Button) findViewById(R.id.btnCancel); mBtnCamera.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent camera = new Intent(); camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE); camera.putExtra("crop", "true"); File f = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); mURI = Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "myFile.jpg")); camera.putExtra(MediaStore.EXTRA_OUTPUT, mURI); startActivityForResult(camera, PICK_IMAGE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PICK_IMAGE) { // Result includes a Bitmap thumbnail? if (data != null) { if (data.hasExtra("data")) { //Bitmap thumbnail = data.getParcelableExtra("data"); Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); mImageView.setImageBitmap(thumbnail); } } // If there is no thumbnail data, the image will have been stored in target output URI. else { Cursor cursor = getContentResolver().query( Media.EXTERNAL_CONTENT_URI, new String[] { Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION }, Media.DATE_ADDED, null, "date_added ASC" ); if (cursor != null && cursor.moveToFirst()) { do { mURI = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA))); mPhotoPath = mURI.toString(); } while (cursor.moveToNext()); cursor.close(); } // Resize full image to fit out in image view. int width = mImageView.getWidth(); int height = mImageView.getHeight(); BitmapFactory.Options factoryOptions = new BitmapFactory.Options(); factoryOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(/*mURI.getPath()*/ mPhotoPath, factoryOptions); int imageWidth = factoryOptions.outWidth; int imageHeight = factoryOptions.outHeight; // Determine how much to scale down the image int scaleFactor = Math.min( imageWidth/width, imageHeight/height ); // Decode the image file into a Bitmap sized to fill view factoryOptions.inJustDecodeBounds = false; factoryOptions.inSampleSize = scaleFactor; factoryOptions.inPurgeable = true; Bitmap bitmap = BitmapFactory.decodeFile(/*mURI.getPath()*/ mPhotoPath, factoryOptions); mImageView.setImageBitmap(bitmap); } } } } 
+4
source share
3 answers

I had the same problem on some samsung android devices. Then I implemented the logic to get the path to the captured photo.

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PICK_IMAGE) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE); Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC"); if(cursor != null && cursor.moveToFirst()) { do { uri = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA))); photoPath = uri.toString(); }while(cursor.moveToNext()); cursor.close(); } if(photoPath != null) { Bitmap bitmap = BitmapFactory.decodeFile(photoPath); ///Do Implement your logic whatever you want. mImageView.setImageBitmap(bitmap); } } } 
+1
source

I tried and tested the work on the Galaxy S3 phone. Thank TGMCians for your help.

 public class MainActivity extends Activity { private static final int PICK_IMAGE = 0; private static final int PICK_IMAGE_FROM_GALLERY = 1; private Button mBtnCamera, mBtnGallery, mBtnCancel; private ImageView mImageView; private Uri mURI; private String mPhotoPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView) findViewById(R.id.imgDisplayImage); mBtnCamera = (Button) findViewById(R.id.btnPhotoCamera); mBtnGallery = (Button) findViewById(R.id.btnPhotoGallery); mBtnCancel = (Button) findViewById(R.id.btnCancel); mBtnCamera.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent camera = new Intent(); camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE); camera.putExtra("crop", "true"); File f = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); mURI = Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "myFile.jpg")); camera.putExtra(MediaStore.EXTRA_OUTPUT, mURI); startActivityForResult(camera, PICK_IMAGE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { if (requestCode == PICK_IMAGE) { Cursor cursor = getContentResolver().query( Media.EXTERNAL_CONTENT_URI, new String[] { Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION }, Media.DATE_ADDED, null, "date_added ASC" ); if (cursor != null && cursor.moveToFirst()) { do { mURI = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA))); mPhotoPath = mURI.toString(); } while (cursor.moveToNext()); cursor.close(); } if (data != null) { if (data.hasExtra("data")) { Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); mImageView.setImageBitmap(thumbnail); } else { System.out.println("Intent bundle does not have the 'data' Extra"); int width = mImageView.getWidth(); int height = mImageView.getHeight(); BitmapFactory.Options factoryOptions = new BitmapFactory.Options(); factoryOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(/*mURI.getPath()*/ mPhotoPath, factoryOptions); int imageWidth = factoryOptions.outWidth; int imageHeight = factoryOptions.outHeight; // Determine how much to scale down the image int scaleFactor = Math.min( imageWidth/width, imageHeight/height ); // Decode the image file into a Bitmap sized to fill view factoryOptions.inJustDecodeBounds = false; factoryOptions.inSampleSize = scaleFactor; factoryOptions.inPurgeable = true; Bitmap bitmap = BitmapFactory.decodeFile(/*mURI.getPath()*/ mPhotoPath, factoryOptions); mImageView.setImageBitmap(bitmap); } } } } else { System.out.println("Picture taking activity NOT returning RESULT_OK"); } } } 
+1
source

Try to add

 sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 

(and a slight delay) right inside

  if (requestCode == PICK_IMAGE) 

block. I think the problem may be that your device is not updating the media store correctly.

(of course, the best action would be to use MediaScanner to scan your file )

0
source

All Articles