Take a look at
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

First.  You implement the interface, but you forgot to register them.
One I caught was
kamera.setOneShotPreviewCallback ( Camera.PreviewCallback() );

Another thing to remember is to have the permission setup right.
you need
    <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
on your manifest.

I was running the code, so I also got some error in the
PreviewCallBack() interface, but I think you can pick it up from here.

This other link should be helpful as well

http://stackoverflow.com/questions/5212531/android-byte-to-image-in-camera-onpreviewframe

on how to handle the data array.



On Mar 23, 1:42 am, Hery Irawan <[email protected]> wrote:
> Sorry If I make mistake, I'm newbie in this forum and newbie in
> learning android programming
>
> On Mar 23, 7:41 am, Lew <[email protected]> wrote:
>
>
>
>
>
>
>
> > Hery Irawan wrote:
> > > Hi, I want to create motion detection app, but I still have a problem
> > > with my code
>
> > You have many problems with your code. I think you're getting
> > 'NullPointerException' (NPE). Do you see this in your "logcat"?
>
> > As TreKing has told you (twice!) you must tell us what is wrong. "I have a
> > problem" is a very useless way to ask a question.
>
> > What *precisely* is the behavior you experience, and how *exactly* does it
> > differ from the *exact* behaviors you expect?
>
> > *Copy and paste* and error message into your report (such as the NPE
> > messages you surely are getting).
>
> > What have you done to diagnose your problem? (Writing to a programming
> > forum doesn't count.)
>
> > > Here my code:
>
> > > package com.iseng;
>
> > > import java.io.File;
> > > import java.io.FileNotFoundException;
> > > import java.io.FileOutputStream;
> > > import java.io.IOException;
> > > import java.io.OutputStream;
>
> > > import android.app.Activity;
> > > import android.content.ContentValues;
> > > import android.content.pm.​ActivityInfo;
> > > import android.content.res.​Configuration;
> > > import android.net.Uri;
> > > import android.os.Bundle;
> > > import android.os.Environment;
> > > import android.provider.MediaStore.​Images.Media;
> > > import android.util.Log;
> > > import android.view.SurfaceHolder;
> > > import android.view.SurfaceView;
> > > import android.widget.Toast;
> > > import android.hardware.*;
> > > import android.hardware.Camera.​PictureCallback;
>
> > > public class IsengActivity extends Activity implements
> > > SurfaceHolder.Callback, Camera.PreviewCallback, PictureCallback  {
>
> > Please be consistent and conventional with indentation.  Use spaces (not
> > TABs) to indent, up to four (though two works well) per level for forum
> > posts.
>
> > >         Camera kamera;
> > >     SurfaceHolder surface;
> > >     SurfaceView kameraview;
>
> > The Java naming convention would suggest 'kameraView' as the variable name.
>
> > >     public byte dataOld[];
>
> > This is 'null' to start with (hence your NPEs) and should not be 'public'.
>
> > >    public void onCreate(Bundle savedInstanceState) {
> > >        super.onCreate(​savedInstanceState);
> > >        setContentView(R.layout.main);
>
> > > setRequestedOrientation(​ActivityInfo.SCREEN_​ORIENTATION_LANDSCAPE);
> > >        kameraview =(SurfaceView) findViewById(R.id. kameraku);
> > >        surface = kameraview.getHolder();
> > >        surface.setType(SurfaceHolder.​SURFACE_TYPE_PUSH_BUFFERS);
> > >        surface.addCallback(this);
> > >    }
> > >        @Override
> > >        public void onPreviewFrame(byte[] data, Camera kamera) {
>
> > >                if(data.length ==0) return;
>
> > What if 'data == null'?
>
> > >                if(dataOld.​length==0 )
>
> > 'dataOld' certainly is 'null' the first time.
> > NPE!
>
> > >                        data=​dataOld;
>
> > You forgot the curly braces around the 'if' body.
>
> > If 'dataOld' is not 'null' and is empty, it will wipe out 'data' at this
> > point. Is that what you want? The logic is not obvious and should be
> > commented.
>
> > >                int Isdiferent=0;
>
> > Please follow the Java naming conventions: 'isDifferent'.
>
> > >                int treshold =50;
>
> > Java naming conventions would suggest 'threshold' for this variable name.
>
> > >                for (int x=0; x<data.length; x=+200)
>
> > Well, if somehow 'dataOld' was not 'null' and was empty, you got nothing
> > here.
>
> > >                {
> > >                        if(​Math.abs(data[x] - dataOld[x]) <= treshold )
> > >                        {
> > >                              ​  Isdiferent +=1;
>
> > You could also use the unary increment operator here.
>
> > >                        }
>
> > >                        float precentage = Isdiferent / data.length;
>
> > The Java naming conventions would suggest that this variable name be
> > 'percentage'.
>
> > >                        if (precentage > 20 )
>
> > You should use '20.0' since you're comparing floating-point values.
>
> > >                        {
> > >                        ​kamera.takePicture(null,null,​this);
> > >                        }
>
> > >                }
> > >        }
>
> > >        @Override
> > >        public void surfaceChanged(SurfaceHolder holder, int format, int
> > h, int w) {
> > >                kamera.​startPreview();
> > >        }
>
> > >        @Override
> > >        public void surfaceCreated(SurfaceHolder holder) {
> > >                kamera=Camera.​open();
>
> > >                try
> > >                {
> > >                        ​Camera.Parameters parameter =
>
> > kamera.getParameters();
>
> > Naming conventions would suggest that this variable be named in the plural.
>
> >  if(​this.getResources().​getConfiguration().orientation !=
>
> > 'this' in front of a method call is just silliness.
>
> > > Configuration.ORIENTATION_​LANDSCAPE)
> > >                        {
> > >                              ​  parameter.set("orientation",​"portrait");
> > >                              ​  kamera.​setDisplayOrientation(90);
> > >                        }
>
> > >                        else
> > >                        {
>
> >  ​  parameter.set("orientation",​"landscape");
>
> > >                              ​  kamera.​setDisplayOrientation(0);
> > >                        }
>
> > >                        ​kamera.setParameters(​parameter);
> > >                        ​kamera.setPreviewDisplay(​holder);
> > >                }
>
> > >                catch(​IOException e)
> > >                {
> > >                kamera.​release();
>
> > Is this the best way to handle this exception?
>
> > >            }
> > >                kamera.​startPreview();
> > >        }
>
> > >        @Override
> > >        public void surfaceDestroyed(SurfaceHolder holder) {
> > >                kamera.​stopPreview();
> > >                kamera.​release();
>
> > >        }
>
> > >        @Override
> > >        public void onPictureTaken(byte[] data, Camera kamera) {
>
> > What if either parameter is 'null'?
>
> > >                // TODO Auto-generated method stub
>
> > You should remove these auto-generated comments.
>
> > >                              ​  Uri imageFileUri =
> > >  getContentResolver().insert(​Media.EXTERNAL_CONTENT_URI,new
> > >  ContentValues());
> > >                              ​  try
>
> > >                              ​  {
> > >                              ​          /*String sdcardStorage =
> > >  Environment.​getExternalStorageDirectory().​toString();
>
> >  ​          imageFileUri=Uri.​parse(sdcardStorage + "/HeryMD/Test.jpg");*/
>
> > Don't include superfluous comments in forum posts.
>
> > >                              ​           String sdcardStorage =
> > > Environment.​getExternalStorageDirectory().​toString();
> > >                              ​           File f = new File(sdcardStorage
>
> > + "/HeryMD/Test.jpg");>                              ​           
> > OutputStream os = new
>
> > FileOutputStream(f);
>
> > >                              ​           os.write(data);
> > >                              ​           os.flush();
> > >                              ​           os.close();
>
> > You need to guarantee that the 'flush()' and 'close()' calls occur, which
> > you have not done.
>
> > >                              ​  } catch(FileNotFoundException e)
> > >                              ​  {
> > >                              ​          Toast t =
>
> > Toast.makeText(this,e.​getMessage(),>  Toast.LENGTH_SHORT);
> > >                              ​          t.show();
> > >                              ​  }
>
> > >                              ​  catch(IOException e)
> > >                              ​  {
> > >                              ​          Toast t =
>
> > Toast.makeText(this,e.​getMessage(),
>
> > >Toast.LENGTH_SHORT);
> > >                              ​          t.show();
> > >                              ​  }
>
> > >                              ​  kamera.startPreview();
> > >        }
> > > }
>
> > --
> > Lew

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to