• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps Failed binder transaction when returning camera image

android88

Newbie
Jan 6, 2010
17
0
Hi, I get the Failed binder transaction error when returning the image taken with the camera from the camera intent back to the parent intent (as a byte[]). I don't understand why, its not like its a big bitmap or anything. It only happens when i take pictures with lots of light, because then the byte[] is bigger. Does anyone see a mistake in my code?

Here is my code:

Code:
package example.imaging.ape;

import java.io.IOException;
import java.util.Iterator;
import java.util.Set;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnTouchListener;

public class TakePicture extends Activity implements SurfaceHolder.Callback{
    Camera mCamera;
    Boolean mPreviewRunning = false;
    int imageLayoutHeight;
    int imageLayoutWidth;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //setup camera surface
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.cameralayout);

        SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.hist_surface_camera);
        SurfaceHolder mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        Bundle extras = getIntent().getExtras();
        imageLayoutHeight = extras.getInt("layoutHeight");
        imageLayoutWidth = extras.getInt("layoutWidth");
        
        OnTouchListener touchListener = new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent e) {

                System.out.println("MAKING PICTURE");
                mCamera.autoFocus(cb);              
                return false;
            }
        }; 

        //setup touch listener
        mSurfaceView.setOnTouchListener(touchListener);
        
    }
    
    AutoFocusCallback cb = new AutoFocusCallback() {
        public void onAutoFocus(boolean success, Camera c) {
            c.takePicture(null, null, mPictureCallback);
        }    
    };
    
    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
        public void onPictureTaken(byte[] imageData, Camera c) {
            System.out.println("Picture taken, now returning");            
            Intent resultIntent = new Intent();
            resultIntent.putExtra("cameraImage", imageData);
            System.out.println("put Extra");
            setResult(Activity.RESULT_OK, resultIntent);
            finish();            
        }
    };
    
    //initialize camera
    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open();
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        if (mPreviewRunning) {
            mCamera.stopPreview();
        }

        Camera.Parameters p = mCamera.getParameters();
        
        p.setPreviewSize(h, w);
        System.out.println("PreviewSize: " + h + "," + w);
        p.setPictureSize(h*3,w*3); // is around 1200x900
        p.set("rotation", 90);
        mCamera.setParameters(p);

        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }

        mCamera.startPreview();
        mPreviewRunning = true;
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mPreviewRunning = false;
        mCamera.release();
    }
    
}
 

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones