2

What i am trying to do is create a new folder and save the image captured by camera in that folder.I am trying to achieve it using following snipet:

public class DocsAdd extends Activity { private static int TAKE_PICTURE = 1; private Uri outputFileUri; Bitmap thumbnail; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); File filename; try { long currentTime = System.currentTimeMillis(); String fileName = "img" + currentTime+".jpg"; String path = Environment.getExternalStorageDirectory().toString(); filename = new File(path + "/AutoistDiary/"+ fileName); FileOutputStream out = new FileOutputStream(filename); out.flush(); out.close(); MediaStore.Images.Media.insertImage(getContentResolver(),filename.getAbsolutePath(), filename.getName(), filename.getName()); outputFileUri = Uri.fromFile(filename); } catch (Exception e) { e.printStackTrace(); } intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(intent, TAKE_PICTURE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == TAKE_PICTURE) { Uri imageUri = null; if (data!=null) { if (data.hasExtra("data")) { thumbnail = data.getParcelableExtra("data"); Intent docsShow_intent=new Intent(this,DocsShow.class); startActivity(docsShow_intent); } } else { } } } } 

but when i run it on Optimus1 it is not returning any result to my activity, came across a link Camera on Android Example which states the same problem that i am facing currently so can help me with this. ?

2
  • Did the answer below work for you? Commented Jul 21, 2013 at 2:07
  • Why dont u just give it a try @JeremyWest mostly yes it is working...! Commented Jul 22, 2013 at 4:35

1 Answer 1

4

Unfortunately there is a bug on some devices causing the Intend data parameter in onActivityResult to be null when you use the MediaStore.EXTRA_OUTPUT flag in your intent for the camera. A workaround is to keep the outputFileUri variable global so that you can access it again in your onActivityResult method. Something like this:

Uri outputFileUri; //global variable Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File photo= new File(Environment.getExternalStorageDirectory(), "Autoist Diary"); if (! photo.exists()) { photo.mkdirs(); if (! photo.mkdirs()) { Log.i("MyCameraApp", "failed to create directory"); } } puc_img=new File(photo,"Puc_Img.jpg"); outputFileUri = Uri.fromFile(photo); intent.putExtra(MediaStore.EXTRA_OUTPUT,outputFileUri); StartActivityForResult(intent, TAKE_PICTURE); public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case TAKE_PICTURE: if (resultCode == Activity.RESULT_OK) { if(data != null) { //if the intent data is not null, use it puc_image = getImagePath(Uri.parse(data.toURI())); //update the image path accordingly StoreImage(this,Uri.parse(data.toURI()),puc_img); } else { //Use the outputFileUri global variable StoreImage(this,outputFileUri,puc_img); } } break; } } public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) { Bitmap bm = null; try { bm = Media.getBitmap(mContext.getContentResolver(), imageLoc); FileOutputStream out = new FileOutputStream(imageDir); bm.compress(Bitmap.CompressFormat.JPEG, 100, out); bm.recycle(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public String getImagePath(Uri uri) { String selectedImagePath; // 1:MEDIA GALLERY --- query from MediaStore.Images.Media.DATA String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); if (cursor != null) { int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); selectedImagePath = cursor.getString(column_index); } else { selectedImagePath = null; } if (selectedImagePath == null) { // 2:OI FILE Manager --- call method: uri.getPath() selectedImagePath = uri.getPath(); } return selectedImagePath; } 

This workaroud has worked for me. Hope that helps.

Sign up to request clarification or add additional context in comments.

10 Comments

giving error at StoreImage(this,Uri.parse(outputFileUri),puc_img); Uri.parse() parses a string and not a Uri.so what i am supposed to pass to this method
@sankettt Sorry my fault. I have updated my answer. You already the correct Uri for the StoreImage method.
The code is working properly but i am facing one strange issue..the file saved on the device i mentioned is 0kb.. what can be the issue with this. but at the same time when i tried on other device it is working properly. may be this is the bug of 2.2.. any help regarding this
@sankettt I have updated my answer. Hope this solves your problem. I think the problem was that the variable puc_image was not updated in onActivityResult when the Intent data was not null.
hey @angelo i have used some other code which is working fine for 2.3 but stores 0kb for 2.2 i am putting the code here for u to refer.!
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.