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