This code shouldn't even compile, this line is wrong: mCamera.takePicture(null, mPictureCallback); // requires 3 callback functions
Camera is only supported in landscape mode. Cupcake release will "unofficially" support portrait mode (there will be no API for it, but I'll probably put some sample code out that shows how to do it). On Feb 16, 9:35 pm, cindy <[email protected]> wrote: > I tried google's camera API sample code. I found there are 2 problems: > 1> It only can take picture in Landscape orientation > 2> After click the space "key", the application crashes. WOw:) > > XML: > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ > android" > android:layout_width="fill_parent" > android:layout_height="fill_parent" > android:orientation="vertical"> > <SurfaceView android:id="@+id/surface" > android:layout_width="fill_parent" > android:layout_height="10dip" > android:layout_weight="1"> > </SurfaceView> > </LinearLayout> > Java code: > /** > * Copyright (c) 2007, Google Inc. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > * You may obtain a copy of the License at > * > * http://www.apache.org/licenses/LICENSE-2.0 > * > * Unless required by applicable law or agreed to in writing, > software > * distributed under the License is distributed on an "AS IS" BASIS, > * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > * See the License for the specific language governing permissions > and > * limitations under the License. > */ > > package com.android.cameraapitest; > > import android.app.Activity; > import android.content.Intent; > import android.graphics.Canvas; > import android.graphics.Paint; > import android.graphics.PixelFormat; > import android.graphics.Rect; > import android.net.Uri; > import android.os.Handler; > import android.os.Message; > import android.os.Bundle; > import android.provider.MediaStore.Images; > import android.provider.MediaStore.Video; > import android.view.Menu; > import android.view.MenuItem; > import android.view.SurfaceHolder; > import android.view.SurfaceView; > import android.view.KeyEvent; > import android.hardware.Camera; > > import android.util.Log; > > public class CameraApiTest extends Activity implements > SurfaceHolder.Callback > { > private static final String TAG = "CameraApiTest"; > Camera mCamera; > boolean mPreviewRunning = false; > > public void onCreate(Bundle icicle) > { > super.onCreate(icicle); > > Log.e(TAG, "onCreate"); > > getWindow().setFormat(PixelFormat.TRANSLUCENT); > > setContentView(R.layout.camera_api_test); > mSurfaceView = (SurfaceView)findViewById(R.id.surface); > > mSurfaceHolder = mSurfaceView.getHolder(); > mSurfaceHolder.addCallback(this); > mSurfaceHolder.setType > (SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); > } > > public boolean onCreateOptionsMenu(android.view.Menu menu) { > MenuItem item = menu.add(0, 0, 0, "goto gallery"); > item.setOnMenuItemClickListener(new > MenuItem.OnMenuItemClickListener() { > public boolean onMenuItemClick(MenuItem item) { > Uri target = Uri.parse("content://media/external/ > images/media"); > Intent intent = new Intent(Intent.ACTION_VIEW, > target); > startActivity(intent); > return true; > } > }); > return true; > } > > @Override > protected void onRestoreInstanceState(Bundle savedInstanceState) > { > super.onRestoreInstanceState(savedInstanceState); > } > > Camera.PictureCallback mPictureCallback = new > Camera.PictureCallback() { > public void onPictureTaken(byte[] data, Camera c) { > Log.e(TAG, "PICTURE CALLBACK: data.length = " + > data.length); > mCamera.startPreview(); > } > }; > > public boolean onKeyDown(int keyCode, KeyEvent event) > { > if (keyCode == KeyEvent.KEYCODE_BACK) { > return super.onKeyDown(keyCode, event); > } > > if (keyCode == KeyEvent.KEYCODE_SPACE) { > mCamera.takePicture(null, mPictureCallback); > return true; > } > > return false; > } > > protected void onResume() > { > Log.e(TAG, "onResume"); > super.onResume(); > } > > protected void onSaveInstanceState(Bundle outState) > { > super.onSaveInstanceState(outState); > } > > protected void onStop() > { > Log.e(TAG, "onStop"); > super.onStop(); > } > > public void surfaceCreated(SurfaceHolder holder) > { > Log.e(TAG, "surfaceCreated"); > mCamera = Camera.open(); > //mCamera.startPreview(); > } > > public void surfaceChanged(SurfaceHolder holder, int format, int > w, int h) > { > Log.e(TAG, "surfaceChanged"); > > // XXX stopPreview() will crash if preview is not running > if (mPreviewRunning) { > mCamera.stopPreview(); > } > > Camera.Parameters p = mCamera.getParameters(); > p.setPreviewSize(w, h); > mCamera.setParameters(p); > mCamera.setPreviewDisplay(holder); > mCamera.startPreview(); > mPreviewRunning = true; > } > > public void surfaceDestroyed(SurfaceHolder holder) > { > Log.e(TAG, "surfaceDestroyed"); > mCamera.stopPreview(); > mPreviewRunning = false; > mCamera.release(); > } > > private SurfaceView mSurfaceView; > private SurfaceHolder mSurfaceHolder; > > } --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---

