Camera API工作示例?

时间:2014-01-09 01:27:22

标签: android camera

这是我第一次使用Android上的Camera dev,我测试了我在链接https://thenewcircle.com/s/post/39/using__the_camera_api找到的CameraDemo

但是我对这段代码有些问题:(

首先,这似乎有必要将此行添加到预览代码(上下文上下文)

if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB)  

(如果我不添加此测试,程序会崩溃)

就在这一行之前

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  

因为setType()调用现在似乎已被弃用 (这就是我对Android Studio的说法)

其次,这似乎有必要将camera.setParameters()调用注释到SurfaceChanged(SurfaceHolder holder,int format,int w,int h)代码

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // Now that the size is known, set up the camera parameters and begin
    // the preview.
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPreviewSize(w, h);
    // camera.setParameters(parameters);
    camera.startPreview();

(如果取消注释此行,则会崩溃)

现在,这个示例在我的Android设备上启动时不会崩溃,我可以看到相机预览:)

但是当我旋转屏幕时它会崩溃:(

=&GT;在相机预览期间处理屏幕旋转的方法是什么? (因为camera.setParameters(参数)似乎已弃用...)

编辑:现在已部分解决:)

我做了这个小转变:

  • 添加一个布尔变量mPreviewRunning,它在开头被初始化为false

  • 当此变量已设置为true时添加camera.stopPreview()调用

  • 在调用camera.startPreview()之后将此变量设置为true;

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)  
{  
    // Now that the size is known, set up the camera parameters and begin  
    // the preview  
    // ERROR : setParameter() is deprecated  
    // Camera.Parameters parameters = camera.getParameters();  
    // parameters.setPreviewSize(w, h);   
    // camera.setParameters(parameters);  
    if( bPreviewRunning == true)  
    {  
        bPreviewRunning = false;  
        camera.stopPreview();  
    }  
    camera.startPreview();
    bPreviewRunning = true;  
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Now that the size is known, set up the camera parameters and begin // the preview // ERROR : setParameter() is deprecated // Camera.Parameters parameters = camera.getParameters(); // parameters.setPreviewSize(w, h); // camera.setParameters(parameters); if( bPreviewRunning == true) { bPreviewRunning = false; camera.stopPreview(); } camera.startPreview(); bPreviewRunning = true; }

但是应用程序有时会崩溃,但我不明白为什么:(
(在纵向模式下预览处于错误方向)

2 个答案:

答案 0 :(得分:0)

此处Google相机API 2的官方示例:

https://github.com/googlesamples/android-Camera2Basic

谷歌工程师开发的新图书馆,帮助您轻松支持Camera API 1和Camera API 2(请注意,尚未完全稳定,这不是官方示例):

https://github.com/google/cameraview

答案 1 :(得分:-1)

以下是一些例子:

https://stackoverflow.com/a/19312182/192373
https://stackoverflow.com/a/20883662/192373
https://stackoverflow.com/a/19599599/192373

选择一个适合您需要的(改变相机方向,或保持活动固定,或其他)。