1

I'm trying to combine the code from this YouTube camera tutorial http://www.youtube.com/watch?v=OMP6LHKEZOA with some codes from here http://developer.android.com/training/basics/data-storage/files.html to save the image to sd card. The following code crashes after successfully saving the image to file. How do I get it to not crash and go back to the main layout?

package com.example.test2;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
    ImageView iv;
    private Uri fileUri;

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    iv=(ImageView)findViewById(R.id.imageView);
    Button btn = (Button)findViewById(R.id.takePhoto);
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
            startActivityForResult(intent, 0);

        }
    });   
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode ==0)
    {
        Bitmap theImage = (Bitmap) data.getExtras().get("data");
        iv.setImageBitmap(theImage);
    }
}

//Uri fileUri = null;

public static final int MEDIA_TYPE_IMAGE = 1;

/** 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 {
        return null;
    }

    return mediaFile;
}
}
Alex Cohn
  • 56,089
  • 9
  • 113
  • 307
  • Please also post a stack trace from the logcat so we can have a look at that. – span Oct 28 '12 at 18:29
  • Is it an OutOfMemoryException causing the crash? Depending on the camera in your device, the size of the image could easily exceed the heap space available to your application. If this is the case you will need to determine how much you need to scale the image before loading it into the bitmap. Determine the size of the image using `BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true;`. Then "load" the image & query the image size with `int width_tmp = o.outWidth, height_tmp = o.outHeight;` and set `Options` to scale it down with `o.inSampleSize = scale;` – bobnoble Oct 28 '12 at 18:48
  • See http://stackoverflow.com/questions/1910608/android-action-image-capture-intent – Alex Cohn Oct 28 '12 at 23:13

0 Answers0