以编程方式创建时不显示相机预览

时间:2014-07-15 18:02:35

标签: android camera surfaceview preview

我正在尝试创建一个默认为后置摄像头(而不是前置摄像头)的摄像头(如果可用),但我无法进行预览显示。我已经看过很多关于SO的指南(并且其中一些指南用于创建我现在拥有的)以及Android api,但我找不到一种简单的方法来指定使用哪个相机。有人可以给我一个方法,或告诉我下面的代码有什么问题吗?

public Camera backCam()
{
    Camera cam;
    try{
        cam=Camera.open(0);
        return cam;
    }catch(Exception e){}
    try{
        cam=Camera.open(1);
        return cam;
    }catch(Exception e){}
cam=Camera.open();
return cam;
}
public void sneakyCamera()
{
    try{
        Log.i("aaa","init camera. total cams: "+Camera.getNumberOfCameras());
        Camera cam=backCam();

    SurfaceView view=new SurfaceView(getApplicationContext());
    cam.setPreviewDisplay(view.getHolder());
    cam.startPreview(); 


        Camera.PictureCallback mCall = new Camera.PictureCallback()
        {
            @Override
            public void onPictureTaken(byte[] data, Camera camera)
            {
                File picFile = new File("/mnt/sdcard/","psychPic"+getTime()+".jpg");
                FileOutputStream fos;
                try {
                    fos = new FileOutputStream(picFile);
                    fos.write(data);
                    fos.close();
                }  catch (IOException e) {
                    Log.i("aaa","pic tken error: "+e);
                }
            }
        };

    //shuttr callback, pic callback raw, pic callback 
    cam.takePicture(null, null,mCall);
    }catch(Exception e)
    {
        Log.i("aaa","Camera error: "+e);
    }
}

1 个答案:

答案 0 :(得分:0)

可能从Activity onCreate()调用此sneakyCamera()。此方法创建视图,但要查看预览,您必须将此视图添加到窗口层次结构中。

最简单的解决方法是添加

 parentActivity.setContentView(view);

之前

cam.setPreviewDisplay()