求助.....强制关闭了   不清楚是哪的原因
package xiaohang.zhimeng;import java.io.BufferedOutputStream;   
import java.io.File;   
import java.io.FileOutputStream;   
import java.io.IOException;import android.app.Activity;   
import android.content.Context;   
import android.graphics.Bitmap;   
import android.graphics.BitmapFactory;   
import android.graphics.Canvas;   
import android.graphics.PixelFormat;   
import android.hardware.Camera;   
import android.hardware.Camera.PictureCallback;   
import android.os.Bundle;   
import android.view.KeyEvent;   
import android.view.SurfaceHolder;   
import android.view.SurfaceView;   
import android.view.Window;   
public class mains extends Activity {
/** Called when the activity is first created. */
private Preview mPreview; 

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
//setContentView(mPreview); 

requestWindowFeature(Window.FEATURE_NO_TITLE);   
        
        //Create our Preview view and set it as the content of our activity.   
        mPreview = new Preview(this);   
        setContentView(mPreview); 

}
public boolean onKeyUp(int keyCode, KeyEvent event){   
switch (keyCode) {   
case KeyEvent.KEYCODE_DPAD_CENTER:   
mPreview.takePicture();   
break;   
}   
return true;   
}   }
/*Preview-显示Preview*/  
class Preview extends SurfaceView implements SurfaceHolder.Callback{    SurfaceHolder mHolder;   
Camera mCamera;   
Bitmap cameraBitmap;    public Preview(Context context) {   
super(context);   
//得到SurfaceHolder对象   
mHolder = getHolder();   
//添加回调函数   
mHolder.addCallback(this);   
//设置SurfaceHolder 的类型   
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);   
}    //在Surface的大小发生改变时激发   
@Override  
public void surfaceChanged(SurfaceHolder holder, int format, int width,   
int height) {   
int h=480;
int w=320;
/*构建Camera.Parameters对相机的参数进行设置*/  
Camera.Parameters parameters = mCamera.getParameters();   
/*设置拍照的图片格式*/  
parameters.setPictureFormat(PixelFormat.JPEG);   
/*设置Preview(预览)的尺寸*/  
parameters.setPreviewSize(w, h);   
/*
parameters.setPreviewSize(320, 480);

parameters.setPictureSize(320, 480);
*/
mCamera.setParameters(parameters);   

 try {   
             mCamera.setPreviewDisplay(holder);   
         } catch (IOException e) {   
             e.printStackTrace();   
         } 
/*开始预览*/  
mCamera.startPreview();   
}    /*拍照片*/  
public void takePicture(){   
if (mCamera != null) {   
mCamera.takePicture(null, null, jpegCallback);   
}   
}   
/*拍照后输出图片*/  
private PictureCallback jpegCallback = new PictureCallback(){    @Override  
public void onPictureTaken(byte[] data, Camera camera) {   
// TODO Handle JPEG image data   
//解码一个不可变的位图 从指定的字节数组   
cameraBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);   
File myCaptureFile = new File("/sdcard/camera1.jpg");   
try {   
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));   
//压缩位图到指定的OutputStream   
cameraBitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);   
//刷新此缓冲区的输出流   
bos.flush();   
//关闭此输出流并释放与此流有关的所有系统资源   
bos.close();   
/*将拍到的图片绘制出来*/  
//锁定画布   
Canvas canvas = mHolder.lockCanvas();   
canvas.drawBitmap(cameraBitmap, 0, 0, null);   
//绘制后解锁,绘制后必须解锁才能显示   
mHolder.unlockCanvasAndPost(canvas);   
} catch (Exception e) {   
e.getMessage();   
}   
}   
};    //在创建Surface时激发   
@Override  
public void surfaceCreated(SurfaceHolder holder) {   
/*启动Camera*/  
mCamera = Camera.open();   
try {   
mCamera.setPreviewDisplay(holder);   
} catch (Exception e) {   
/*释放mCamera*/  
mCamera.release();   
mCamera = null;   
}   
}           //在销毁Surface时激发   
@Override  
public void surfaceDestroyed(SurfaceHolder holder) {   
/*停止预览*/  
mCamera.stopPreview();   
mCamera = null;   
}   
}  

解决方案 »

  1.   

    代码目的、错误信息Log、什么时候报错,简单说明一下。
      

  2.   

    建议学习一下,怎么看LOG 错误信息。
      

  3.   

    11-10 14:00:18.407: ERROR/AndroidRuntime(5482): FATAL EXCEPTION: main
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482): java.lang.RuntimeException: Fail to connect to camera service
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.hardware.Camera.native_setup(Native Method)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.hardware.Camera.<init>(Camera.java:118)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.hardware.Camera.open(Camera.java:91)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at xiaohang.zhimeng.Preview.surfaceCreated(mains.java:134)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.SurfaceView.updateWindow(SurfaceView.java:540)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.View.draw(View.java:6742)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.ViewGroup.drawChild(ViewGroup.java:1648)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.View.draw(View.java:6742)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1872)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.ViewRoot.draw(ViewRoot.java:1422)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1167)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1744)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.os.Handler.dispatchMessage(Handler.java:99)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.os.Looper.loop(Looper.java:144)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at android.app.ActivityThread.main(ActivityThread.java:4937)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at java.lang.reflect.Method.invokeNative(Native Method)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at java.lang.reflect.Method.invoke(Method.java:521)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482):     at dalvik.system.NativeStart.main(Native Method)
    11-10 14:00:18.407: WARN/ActivityManager(98):   Force finishing activity xiaohang.zhimeng/.mains
      

  4.   

    11-10 14:00:18.407: ERROR/AndroidRuntime(5482): FATAL EXCEPTION: main
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482): java.lang.RuntimeException: Fail to connect to camera service
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482): at android.hardware.Camera.native_setup(Native Method)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482): at android.hardware.Camera.<init>(Camera.java:118)
    11-10 14:00:18.407: ERROR/AndroidRuntime(5482): at android.hardware.Camera.open(Camera.java:91)
    //调用堆栈都打出来了, debug 一下 
      

  5.   

    加权限了吗?<uses-permission android:name="android.permission.CAMERA"></uses-permission>
      

  6.   

    我感觉是你的Draw有问题,不行就Debug啊,看什么地方出现的问题
      

  7.   

    程序无法连接Camera服务,请检查连接函数