Hi, I have a problem with an app that lets the user take a picture. I've posted it on some forums already, but nobody seems to recognize the problem. Hopefully someone here knows a solution :)
I've put the code of taking a picture in a seperate activity. Then I call the camera intent from my main activity using activityForResult. In the camera intent, I use putExtra to return the camera image (as a byte[] without doing anything to it). But when the program transitions back from the camera intent to the parent intent that called it I get a Failed Binder Transaction error in the logcat because the byte[] is too big. But I don't understand this, because the image is not even taken using the maximum resolution :S The code of my camera intent is: 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(); } } And this is how I call the camera activity: Intent intent = new Intent(mainActivity.this, TakePicture.class); intent.putExtra("layoutWidth",layoutWidth); intent.putExtra("layoutHeight",layoutHeight); startActivityForResult(intent,0); The onActivityResult is never reached because the error occurs during the transition between intents. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en