通过Android应用程序预览摄像头

时间:2013-01-15 10:05:07

标签: android

为了预览相机,我在下面编写了代码段。我无法预览。你能帮我解决一下这个问题吗?

我已使用权限配置我的应用程序;

    <uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />

我创建了表面场所

<SurfaceView
    android:id="@+id/cameraView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" />

我在下面编写代码段来预览相机;

public class MainActivity extends Activity  {

SurfaceView surfaceView;
SurfaceHolder surfaceHolder;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWindow().setFormat(PixelFormat.UNKNOWN);
        surfaceView = (SurfaceView)findViewById(R.id.cameraView);
        surfaceHolder = surfaceView.getHolder();
}

 private void preview ( ) {

    try {
             camera.setPreviewDisplay(surfaceHolder);
             camera.startPreview();
    } catch ( IOException void_) {
        ;
    }
}

3 个答案:

答案 0 :(得分:1)

您可以使用..

从相机捕捉图像
  1. 意图(打开默认摄像头和捕获图像)
  2. 相机API (获取图片预览,您也可以自定义相机功能)
  3. 请逐步阅读本文解决方案,我发现这非常有帮助

    Android Camera API - Tutorial

    如果你有任何麻烦,请告诉我,我已经完成了

    修改

    您可以使用管理员政策停用相机

    使用示例代码检查official document here this文章也可以帮助你

答案 1 :(得分:0)

在4.0之前,Google提供的Android SDK除了支持动画外不提供任何相机模拟。由于Google还没有提供有效的实施方案(甚至是可用的日期)。

有一些链接可以帮助您实现您的要求。 请参阅thisthis链接。

希望它可以帮助你:)

答案 2 :(得分:0)

为摄影机预览实现此类,并在活动的oncreate方法中调用其构造函数。

    public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
    private SurfaceHolder mSurfaceHolder;
    private Camera mCamera;

    @SuppressWarnings("deprecation")
    public CameraPreview(Context context, Camera camera) {
        super(context);
        this.mCamera = camera;
        this.mSurfaceHolder = this.getHolder();
        this.mSurfaceHolder.addCallback(this);
        this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        try {
            mCamera.setPreviewDisplay(surfaceHolder);
            mCamera.startPreview();
        } catch (IOException e) {
            // left blank for now
        }
    }


    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        mCamera.stopPreview();
        mCamera.release();
    }


    public void surfaceChanged(SurfaceHolder surfaceHolder, int format,
            int width, int height) {
        // start preview with new settings
        try {
            mCamera.setPreviewDisplay(surfaceHolder);
            mCamera.startPreview();
        } catch (Exception e) {
            // intentionally left blank for a test
        }
    }
}