首页 > 解决方案 > 由于现有相机用户,相机“0”的手电筒不可用

问题描述

我想创建一个应用程序,该应用程序具有一个用于录制视频的按钮和另一个用于在录制视频期间打开闪光灯的单独切换按钮。

我已经使用 camera2 API 为最近的 androids 构建了相机应用程序,该应用程序由图像按钮访问。我将手电筒模式访问设置为切换按钮,但这根本不起作用。但是切换按钮可以单独访问闪光灯。

public class MainActivity extends AppCompatActivity {


    private TextureView.SurfaceTextureListener mSurfaceTextureListener = new TextureView.SurfaceTextureListener() {
        @Override
        public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
            setupCamera(width,height);
            connectCamera();
        }

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

        createFolder();

        mMediaRecorder = new MediaRecorder();

        mTextureView = (TextureView) findViewById(R.id.textureView);
        mRecordButtonimg = (ImageButton) findViewById(R.id.video_online_button);
                mRecordButtonimg.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                if (misRecording) {
                    misRecording = false;
                    mRecordButtonimg.setImageResource(R.mipmap.ic_launcher);
                    mMediaRecorder.stop();
                    mMediaRecorder.reset();
                    startPreview();
                } else {
                    checkWriteStoragePermission();
                    misRecording = true;
                    mRecordButtonimg.setImageResource(R.mipmap.ic_launcher_round);
                }
            }
        });

        mButtonLights = (ToggleButton) findViewById(R.id.buttonLights);
        mButtonLights.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    cameraManager.setTorchMode(mCameraId, mButtonLights.isChecked());
                }catch (CameraAccessException e){
                    e.printStackTrace();
                }
            }
            });
    }
}

我刚刚将设置的手电筒模式添加到 onClickListener。我应该在其他地方添加它吗?因为它不会将其添加到预览中!而且我已经在代码中检查后置摄像头(带手电筒的 id 为 0),所以我不知道为什么代码不起作用。

标签: androidandroid-camera2

解决方案


弄清楚如何在相机预览时打开和关闭手电筒。在按钮上单击以打开/关闭灯,使用以下代码:

//at some other function where camera is initialised and start preview
//...
Camera camera = Camera.open();
camera.startPreview();
//...
boolean lightOn = false;
//...

buttonLight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                Camera.Parameters p = camera.getParameters();

                if (!lightOn) {
                    lightOn = true;
                    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                    camera.setParameters(p);
                } else {
                    lightOn = false;
                    p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                    camera.setParameters(p);
                }
        }
    });

快乐编码!:D


推荐阅读