求助.....强制关闭了 不清楚是哪的原因
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;
}
}
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;
}
}
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
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 一下