android - 在代码中的哪里设置相机参数?

标签 android android-camera

我用它来使用 android 相机:

公共(public)类 Login extends Activity implements SurfaceHolder.Callback {

public int idCamera(int id) {
    if (id == 0) { id = 1; } else { id = 0; }
    int tcam = Camera.getNumberOfCameras();
    if (tcam == 1) { id = 0; }
    return id;
}

public class idCameraV {
    public int id;
}

public static class camHolder {
    public static SurfaceHolder id;
}

private Camera camera;
private SurfaceView surfaceView;

static String senha2;

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

    final idCameraV idCam = new idCameraV();
    idCam.id = 0;

    camera = Camera.open(idCam.id);
    Camera.Parameters parametro = camera.getParameters(); // WORKS OK
    parametro.setFlashMode("on"); // WORKS OK
    camera.setParameters(parametro); // WORKS OK

    surfaceView = (SurfaceView) findViewById(R.id.preview);
    surfaceView.getHolder().addCallback(this);

    final ImageButton button1 = (ImageButton) findViewById(R.id.bt_camera);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            camera.stopPreview();
            camera.release();
            idCam.id = idCamera(idCam.id);
            camera = Camera.open(idCam.id); 
            Camera.Parameters parametro = camera.getParameters();
            parametro.setFlashMode("on"); // THIS LINE AND ABOVE WORKS. I CAN READ BY GETFLASHMODE
            camera.setParameters(parametro); // ERROR IN HERE
            camera.startPreview();
                try {
            camera.setPreviewDisplay(camHolder.id);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

    final ImageButton button2 = (ImageButton) findViewById(R.id.bt_login);
    button2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {                
            EditText senha = (EditText)findViewById(R.id.senha);
            senha2 = senha.getText().toString();                
            ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            RelativeLayout aviso = (RelativeLayout) findViewById(R.id.aguarde);
            aviso.setVisibility(View.VISIBLE);              
            LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            String coordenadas = GPS.coordenadas(locationManager);
            String android_id = Secure.getString(getBaseContext().getContentResolver(), Secure.ANDROID_ID);
            camera.takePicture(null, null, new TiraFoto(getApplicationContext(), android_id, coordenadas, aviso, connMgr, "LOGIN_", camera));
        }
    });

}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (camera != null) { camera.release(); }
}

@Override
protected void onPause() {
    super.onPause();
    if (camera != null) { camera.stopPreview(); }
}

@SuppressWarnings("static-access")
@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        camera.setPreviewDisplay(holder);
        camera.startPreview();
        final camHolder camHolderId = new camHolder();
        camHolderId.id = holder;
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    if (holder.getSurface() != null) {
        try {
            camera.stopPreview();
        } catch (Exception e) {
    }
        try {
            camera.setPreviewDisplay(holder);
            camera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {}

它工作正常,但是当我进行相机交换时,应用程序卡住了。我在第一次打开相机时设置了闪光灯模式,它可以正常工作,但是当我进行交换时,出现设置参数错误。我必须在哪里设置这个参数?

最佳答案

前置摄像头不支持闪光灯模式,也许下面的代码可以工作

if(idCam.id == 0)
    parametro.setFlashMode("on");

关于android - 在代码中的哪里设置相机参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16693906/

相关文章:

Android:一旦 fragment 停止就停止新线程

android - 无法缩放或翻转 surfaceview 矩阵

android - 如何使用后置摄像头使 Android 屏幕透明?

Android "Permission Denial: can' t 使用相机”

Android 2.2 屏幕锁定安全

android - 添加原始资源时遇到问题

java - 设置缩小的相机预览以获得正确的图像宽高比

使用 setRepeatingRequest 的 Android Camera 2 API 1fps

android - 在 Android 中使用 Intent 时将变量传递给 An Activity

java - OkHttp 回调吞噬异常 - 设计缺陷或常见做法