代码是这样的:
package com.example.camera;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream; 
import android.R.string;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Display;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends Activity implements SurfaceHolder.Callback { private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private Button btn;
private Camera camera;
private static String imgPath = Environment.getExternalStorageDirectory().getPath() + "/"+"img";;  
public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
       MainActivity.this.setContentView(R.layout.activity_main);  
       btn=(Button) findViewById(R.id.btn);
        surfaceHolder=surfaceView.getHolder();
        surfaceHolder.addCallback((Callback) this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        //首先【检车SD卡是否存在。。
        checkSoftStage();
         /*拍摄按钮后*/
        btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//自动开始对焦。。
         camera.autoFocus(new AutoFoucus());

}
});
}
   /*对焦的实现--内部类*/
private final class  AutoFoucus implements AutoFocusCallback{
public void onAutoFocus(boolean success, Camera camera) {
    if (success) {
    //按下快门,回调函数
camera.takePicture(mShutterCallback, null, mCallback);
}
}

}
/*在相机快门关闭时候的回调接口,通过这个接口来通知用户快门关闭的事件,  
    * 普通相机在快门关闭的时候都会发出响声,根据需要可以在该回调接口中定义各种动作, 例如:使设备震动  
    */    
private final ShutterCallback mShutterCallback = new ShutterCallback() {    
        public void onShutter() {    
            Log.d("ShutterCallback", "...onShutter...");    
        }    
    };  
/*实例化本界面的一个PictureCallback
 * 当用户拍完后出发。这是对图片处理并保存
 */
private  final PictureCallback mCallback=new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera){
BufferedOutputStream outputStream = null;
String filename=System.currentTimeMillis()+".jpg";
File file=new File(imgPath, filename);
Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0,data.length);
try {
 outputStream=new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 60, outputStream);
outputStream.flush();
outputStream.close();

//下一步,要跳转到另外一个活动。
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
};
/*
 * 检测手机是否存在SD卡,以及网络是否连接正常
 */
private void checkSoftStage() {
   if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
//String path=Environment.getExternalStorageDirectory().getPath();
File file=new File(imgPath);
if (!file.exists()) {
file.mkdirs();
}
else {
     //显示一个对话框:
new AlertDialog.Builder(this).setMessage("检测到手机没有插入内存卡,请插入内" 
+"存卡再开启本程序").setPositiveButton("确定", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
          finish();

}
}).show();

}
}

}
/*
 *初始化相机。。
 * @see android.view.SurfaceHolder.Callback#surfaceChanged(android.view.SurfaceHolder, int, int, int)
 */
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Parameters  parameters=camera.getParameters();
parameters.setPreviewFormat(PixelFormat.JPEG);
parameters.setPictureSize(320,400);
camera.setParameters(parameters);
camera.startPreview();

}
   /*
    开始预览
    * @see android.view.SurfaceHolder.Callback#surfaceCreated(android.view.SurfaceHolder)
    */
public void surfaceCreated(SurfaceHolder holder) {   try {
camera=Camera.open(0);
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
camera.release();
camera=null;
}

}   /*
    * 
    * 关闭预览,释放资源
    */
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
if (camera!=null) {
camera.release();
camera=null;

}
}}
错误如下:

parameters

解决方案 »

  1.   

    你在AndroidManifest.xml中有没有注册你的com.example.camera.Activity.  中间的intentfilter写成下面的方式看看
    <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    还有我看你这个Activity里面的onCreate函数为什么没有setContentView(布局id).  你这样, 怎么能启动activity?
      

  2.   

      MainActivity.this.setContentView(R.layout.activity_main); 这个不是么??、
    如你所说,上面的都有。。所以才费解
      

  3.   

    亲,好好看看这句   surfaceHolder=surfaceView.getHolder();
    surfaceView都没实例化,怎么会不空指针