SDCard + Camera Problem

Basic Tutorials concerning: GUI, Views, Activites, XML, Layouts, Intents, ...

SDCard + Camera Problem

Postby SCM » Thu Feb 25, 2010 1:17 am

hi

i followed the tutorial in this forum and wrote some lines two capture an image with the camera:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package prototype.camera;
  3.  
  4.  
  5.  
  6. import java.io.IOException;
  7.  
  8.  
  9.  
  10. import android.app.Activity;
  11.  
  12. import android.content.ContentValues;
  13.  
  14. import android.content.Intent;
  15.  
  16. import android.graphics.PixelFormat;
  17.  
  18. import android.hardware.Camera;
  19.  
  20. import android.net.Uri;
  21.  
  22. import android.os.Bundle;
  23.  
  24. import android.provider.MediaStore.Images.Media;
  25.  
  26. import android.util.Log;
  27.  
  28. import android.view.KeyEvent;
  29.  
  30. import android.view.MenuItem;
  31.  
  32. import android.view.SurfaceHolder;
  33.  
  34. import android.view.SurfaceView;
  35.  
  36.  
  37.  
  38. public class ImageCapture extends Activity implements SurfaceHolder.Callback  {  
  39.  
  40.         private Camera camera;  
  41.  
  42.         private boolean isPreviewRunning = false;  
  43.  
  44.      
  45.  
  46.         private SurfaceView surfaceView;  
  47.  
  48.         private SurfaceHolder surfaceHolder;  
  49.  
  50.         private Uri target = Media.EXTERNAL_CONTENT_URI;  
  51.  
  52.      
  53.  
  54.         public void onCreate(Bundle icicle)  {  
  55.  
  56.                 super.onCreate(icicle);  
  57.  
  58.                 Log.e(getClass().getSimpleName(), "onCreate");  
  59.  
  60.                 getWindow().setFormat(PixelFormat.TRANSLUCENT);  
  61.  
  62.                 setContentView(R.layout.main);  
  63.  
  64.                 surfaceView = (SurfaceView)findViewById(R.id.surface);  
  65.  
  66.                 surfaceHolder = surfaceView.getHolder();  
  67.  
  68.                 surfaceHolder.addCallback(this);  
  69.  
  70.                 surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  71.  
  72.         }  
  73.  
  74.  
  75.  
  76.         public boolean onCreateOptionsMenu(android.view.Menu menu) {  
  77.  
  78.                 MenuItem item = menu.add(0, 0, 0, "goto gallery");  
  79.  
  80.                 item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {  
  81.  
  82.                 public boolean onMenuItemClick(MenuItem item) {  
  83.  
  84.                         Intent intent = new Intent(Intent.ACTION_VIEW, target);  
  85.  
  86.                         startActivity(intent);  
  87.  
  88.                         return true;  
  89.  
  90.                 }  
  91.  
  92.         });  
  93.  
  94.         return true;  
  95.  
  96.         }  
  97.  
  98.    
  99.  
  100.         @Override  
  101.  
  102.         protected void onRestoreInstanceState(Bundle savedInstanceState)  {  
  103.  
  104.                 super.onRestoreInstanceState(savedInstanceState);  
  105.  
  106.         }  
  107.  
  108.  
  109.  
  110.         Camera.PictureCallback mPictureCallbackRaw = new Camera.PictureCallback() {  
  111.  
  112.        
  113.  
  114.                 public void onPictureTaken(byte[] data, Camera c) {  
  115.  
  116.                         Log.e(getClass().getSimpleName(), "PICTURE CALLBACK RAW: " + data);  
  117.  
  118.                         camera.startPreview();  
  119.  
  120.                 }  
  121.  
  122.         };  
  123.  
  124.    
  125.  
  126.         Camera.PictureCallback mPictureCallbackJpeg= new Camera.PictureCallback() {  
  127.  
  128.                
  129.  
  130.                 public void onPictureTaken(byte[] data, Camera c) {  
  131.  
  132.                         Log.e(getClass().getSimpleName(), "PICTURE CALLBACK JPEG: data.length = " + data);  
  133.  
  134.                 }  
  135.  
  136.         };  
  137.  
  138.  
  139.  
  140.         Camera.ShutterCallback mShutterCallback = new Camera.ShutterCallback() {  
  141.  
  142.                 public void onShutter() {  
  143.  
  144.                         Log.e(getClass().getSimpleName(), "SHUTTER CALLBACK");  
  145.  
  146.                 }  
  147.  
  148.         };  
  149.  
  150.    
  151.  
  152.         public boolean onKeyDown(int keyCode, KeyEvent event)  {  
  153.  
  154.                 ImageCaptureCallback iccb = null;  
  155.  
  156.                 if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {  
  157.  
  158.                         try {  
  159.  
  160.                                 String filename = "testName";  
  161.  
  162.                                 ContentValues values = new ContentValues();  
  163.  
  164.                                 values.put(Media.TITLE, filename);
  165.  
  166.                                 values.put(Media.DISPLAY_NAME, filename);
  167.  
  168.                                 values.put(Media.DESCRIPTION, "Image capture by camera");  
  169.  
  170.                                 Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);  
  171.  
  172.                                 //String filename = timeStampFormat.format(new Date());  
  173.  
  174.                                 iccb = new ImageCaptureCallback( getContentResolver().openOutputStream(uri));  
  175.  
  176.                         } catch(Exception ex ){  
  177.  
  178.                                 ex.printStackTrace();  
  179.  
  180.                                 Log.e(getClass().getSimpleName(), ex.getMessage(), ex);  
  181.  
  182.                         }  
  183.  
  184.                 }  
  185.  
  186.                 if (keyCode == KeyEvent.KEYCODE_BACK) {  
  187.  
  188.                         return super.onKeyDown(keyCode, event);  
  189.  
  190.                 }  
  191.  
  192.    
  193.  
  194.                 if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {  
  195.  
  196.                         camera.takePicture(mShutterCallback, mPictureCallbackRaw, iccb);  
  197.  
  198.                         return true;  
  199.  
  200.                 }  
  201.  
  202.                 return false;  
  203.  
  204.         }  
  205.  
  206.    
  207.  
  208.    protected void onResume()    {  
  209.  
  210.            Log.e(getClass().getSimpleName(), "onResume");  
  211.  
  212.            super.onResume();  
  213.  
  214.    }  
  215.  
  216.    
  217.  
  218.    protected void onSaveInstanceState(Bundle outState)  {  
  219.  
  220.            super.onSaveInstanceState(outState);  
  221.  
  222.    }  
  223.  
  224.    
  225.  
  226.    protected void onStop()  {  
  227.  
  228.            Log.e(getClass().getSimpleName(), "onStop");  
  229.  
  230.            super.onStop();  
  231.  
  232.    }  
  233.  
  234.    
  235.  
  236.    public void surfaceCreated(SurfaceHolder holder)  {  
  237.  
  238.            Log.e(getClass().getSimpleName(), "surfaceCreated");  
  239.  
  240.            camera = Camera.open();  
  241.  
  242.    }  
  243.  
  244.    
  245.  
  246.    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)  {  
  247.  
  248.            Log.e(getClass().getSimpleName(), "surfaceChanged");  
  249.  
  250.            if (isPreviewRunning) {  
  251.  
  252.                    camera.stopPreview();  
  253.  
  254.            }  
  255.  
  256.            Camera.Parameters p = camera.getParameters();  
  257.  
  258.            p.setPreviewSize(w, h);  
  259.  
  260.            camera.setParameters(p);  
  261.  
  262.            try {
  263.  
  264.                 camera.setPreviewDisplay(holder);
  265.  
  266.         } catch (IOException e) {
  267.  
  268.                 e.printStackTrace();
  269.  
  270.         }  
  271.  
  272.            camera.startPreview();  
  273.  
  274.            isPreviewRunning = true;  
  275.  
  276.    }  
  277.  
  278.    
  279.  
  280.    public void surfaceDestroyed(SurfaceHolder holder)  {  
  281.  
  282.            Log.e(getClass().getSimpleName(), "surfaceDestroyed");  
  283.  
  284.            camera.stopPreview();  
  285.  
  286.            isPreviewRunning = false;  
  287.  
  288.            camera.release();  
  289.  
  290.    }  
  291.  
  292. }  
  293.  
  294.  
Parsed in 0.050 seconds, using GeSHi 1.0.8.4


and the second file

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package prototype.camera;
  3.  
  4.  
  5.  
  6. import java.io.FileOutputStream;
  7.  
  8. import java.io.OutputStream;
  9.  
  10.  
  11.  
  12. import android.hardware.Camera;
  13.  
  14. import android.hardware.Camera.PictureCallback;
  15.  
  16.  
  17.  
  18. public class ImageCaptureCallback implements PictureCallback  {  
  19.  
  20.        
  21.  
  22.         private OutputStream filoutputStream;  
  23.  
  24.         private String fileName = "test";
  25.  
  26.        
  27.  
  28.         public ImageCaptureCallback(OutputStream filoutputStream) {  
  29.  
  30.                 this.filoutputStream = filoutputStream;  
  31.  
  32.         }  
  33.  
  34.        
  35.  
  36.         @Override  
  37.  
  38.         public void onPictureTaken(byte[] data, Camera camera) {
  39.  
  40.                 try {
  41.  
  42.                         FileOutputStream buf = new FileOutputStream("/sdcard/dcim/Camera/" + fileName + ".jpg");
  43.  
  44.                 buf.write(data);
  45.  
  46.                 buf.flush();
  47.  
  48.                 buf.close();
  49.  
  50.                 filoutputStream.flush();
  51.  
  52.                 filoutputStream.close();
  53.  
  54.                 } catch(Exception ex) {
  55.  
  56.                         ex.printStackTrace();
  57.  
  58.                 }
  59.  
  60.         }
  61.  
  62. }  
  63.  
  64.  
Parsed in 0.034 seconds, using GeSHi 1.0.8.4


My problem is twofold. First the filename is always a long number, and not test as i expected. then i can't really create a file, because there is always an illegalstateexpcetion....

any hints??

thanks a lpt!
SCM
Junior Developer
Junior Developer
 
Posts: 16
Joined: Fri Feb 19, 2010 1:44 am

Top

Return to Novice Tutorials

Who is online

Users browsing this forum: No registered users and 6 guests