I have some codes of takeing picture working at Android 2.1 and 2.2.
But these codes broke at Android 2.3.
After spending a time to fix this issue in vain, I would like to ask for
help here.


My code flow to take picture is like this:

1. create a class Camlayer extends SurfaceView

        public class CamLayer extends SurfaceView implements
SurfaceHolder.Callback {

            private void init(Context context){
                // Install a SurfaceHolder.Callback so we get notified when
the
                // underlying surface is created and destroyed.
                mHolder = getHolder();
                mHolder.addCallback(this);
                mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

                mCamera = Camera.open();
            }

            public CamLayer(Context context) {
                super(context);
                init(context);
            }

            public CamLayer(Context context, AttributeSet attrs) {
                super(context, attrs);
                init(context);
            }

            public void surfaceChanged(SurfaceHolder holder, int format, int
w, int h) {
                Log.i(TAG+".surfaceChanged", "being called!");
                Log.i(TAG+".surfaceChanged", "w="+w);
                Log.i(TAG+".surfaceChanged", "h="+h);

                if (isPreviewRunning) {
                    mCamera.stopPreview();
                }

                   try {
                    mCamera.setPreviewDisplay(holder);
                    mCamera.setPreviewCallback(mPreviewCallback);
                } catch (IOException e) {
                    Log.e(TAG+".surfaceCreated",
"mCamera.setPreviewDisplay(holder);");
                }

                Camera.Parameters p = mCamera.getParameters();
                setOptimalSize(p, w, h, SIZEOFPREVIEW);
                setOptimalSize(p, w, h, SIZEOFPICTURE);
                mCamera.setParameters(p);


                mCamera.startPreview();
                isPreviewRunning = true;
            }

            public void takePicture(){
                Log.i(TAG+".takePicture", "being called!");
                mCamera.takePicture(null, null, mPictureCallback);
                Log.i(TAG+".takePicture", "call ended!");
            }


2. CamLayer.takePicture() will be called by external classes to start


3. The problem is that at Android 2.3.3, the takePicture will hang, so an
ANR problem is found. In /data/anr/traces.txt, below are found. As u can
see, the native_takePicture never returns.

DALVIK THREADS:

(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)

"main" prio=5 tid=1 NATIVE

  | group="main" sCount=1 dsCount=0 obj=0x40022170 self=0xce68

  | sysTid=2411 nice=0 sched=0/0 cgrp=default handle=-1345006464

  at android.hardware.Camera.native_takePicture(Native Method)

  at android.hardware.Camera.takePicture(Camera.java:746)

  at android.hardware.Camera.takePicture(Camera.java:710)

  at oms.cj.tube.camera.CamLayer.takePicture(CamLayer.java:256)

  at oms.cj.tube.camera.DefineColor.takePicture(DefineColor.java:61)

  at oms.cj.tube.camera.DefineColor.onKeyUp(DefineColor.java:71)

  at android.view.KeyEvent.dispatch(KeyEvent.java:1280)

  at android.app.Activity.dispatchKeyEvent(Activity.java:2078)

  at
com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:16
66)
  at
android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2571)

  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2546)

  at android.view.ViewRoot.handleMessage(ViewRoot.java:1878)

  at android.os.Handler.dispatchMessage(Handler.java:99)

  at android.os.Looper.loop(Looper.java:123)

  at android.app.ActivityThread.main(ActivityThread.java:3691)

  at java.lang.reflect.Method.invokeNative(Native Method)

  at java.lang.reflect.Method.invoke(Method.java:507)

  at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)

  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)

  at dalvik.system.NativeStart.main(Native Method)



Is there anybody having the same problem? And know how to fix it?

-- 
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