Question

I got this code (from android web) that stores make a file location to store the image once started the activity

{
    public static final int MEDIA_TYPE_IMAGE = 1;   
    public static final int MEDIA_TYPE_VIDEO = 2;

    /** Create a file Uri for saving an image or video */   private static
    Uri getOutputMediaFileUri(int type){
        return Uri.fromFile(getOutputMediaFile(type));      
    }

    /** Create a File for saving an image or video */   private static
    File getOutputMediaFile(int type){
    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this.

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                      Environment.DIRECTORY_PICTURES), "MyCameraApp");
    // This location works best if you want the created images to be shared
    // between applications and persist after your app has been uninstalled.

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
       if (! mediaStorageDir.mkdirs()){
          Log.d("MyCameraApp", "failed to create directory");
          return null;
       }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE){
       mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_"+ timeStamp + ".jpg");
    } else if(type == MEDIA_TYPE_VIDEO) {
       mediaFile = new File(mediaStorageDir.getPath() + File.separator + "VID_"+ timeStamp + ".mp4");
    } else {
       return null;
    }

    return mediaFile;   
}

then i start my activity like this:

 cameraButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {           
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);            
        fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);            
   }        
 });

and then when i get the result on:

@Override       
protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... }

i saw that debugging it, "data" is null..

I did the same thing but without adding the

intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

and when i add no extra i recieve data info..

guess i have something wrong on writing/reading?? but how? i copyed from the android web!!

I do have permision camera writing reading external storage!

Help!!!!!!!!!!!!!!!

Was it helpful?

Solution

When you specify MediaStore.EXTRA_OUTPUT flag for your intent, the taken picture will be stored in your phone storage and no data will be returned.

from Docs:

The caller may pass an extra EXTRA_OUTPUT to control where this image will be written. If the EXTRA_OUTPUT is not present, then a small sized image is returned as a Bitmap object in the extra field. This is useful for applications that only need a small image. If the EXTRA_OUTPUT is present, then the full-sized image will be written to the Uri value of EXTRA_OUTPUT.

When you use the approach to store taken picture, you have to pass URI together with the intent to tell where to store taken picture

NightCrawler Gave a link on how to get data back onActivityResult

Copying the most important portion:

YourActivity extends Activity{
  onCreate{
     Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(cameraIntent, CAMERA_REQUEST);
  }

  onActivityResult(parameters..) {  
     if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        yourImageView.setImageBitmap(photo);
     }  
  } 
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top