Мне нужно дважды нажать кнопку, прежде чем получить доступ к камере - PullRequest
0 голосов
/ 24 июня 2018

В настоящее время я работаю над приложением для Android, которое позволяет мне получить доступ к камере, и, нажав одну кнопку, я переключаюсь на переднюю камеру.Я нажимаю другую кнопку, я возвращаюсь к задней камере.Тем не менее, я столкнулся с проблемой при нажатии кнопок.Если я нахожусь у задней камеры (которая используется по умолчанию при запуске приложения) и нажимаю кнопку передней камеры, камера останавливается.Он остается в режиме паузы, пока я снова не нажму переднюю кнопку, и не переключится на переднюю.То же самое происходит с задней камерой.Я проверил logcat, и он говорит, что «камера простаивает».Кто-нибудь сталкивался с такой проблемой раньше?

Спасибо

Способ, которым открывается камера, состоит в том, что она проходит через openCamera () и затем в функцию обратного вызова состояния.

openCamera () используется для заднего кулачка.SwitchCam () используется для передней камеры.Я не знал, как переключить камеру, поэтому использовал ту же функцию, но изменил индекс с 0 на 1.

private void openCamera() {
    CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);

    Log.e(TAG, "is camera open");
    try {
        cameraId = manager.getCameraIdList()[0];
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
        StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        assert map != null;
        imageDimension = map.getOutputSizes(SurfaceTexture.class)[2];
        // Add permission for camera and let user grant the permission
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CAMERA_PERMISSION);
            return;
        }
       // manager.openCamera(cameraId, stateCallback, null);
        manager.openCamera(cameraId,stateCallback,null);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    Log.e(TAG, "openCamera X");
}


protected void switchCam() {
    CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    Log.e(TAG, "is camera open");
    try {
        cameraId = manager.getCameraIdList()[1];
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
        StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        assert map != null;
        imageDimension = map.getOutputSizes(SurfaceTexture.class)[2];
        // Add permission for camera and let user grant the permission
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CAMERA_PERMISSION);
            return;
        }
        manager.openCamera(cameraId, stateCallback, null);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    Log.e(TAG, "openCamera X");
}


private final CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {
    @Override
    public void onOpened(CameraDevice camera) {
        //This is called when the camera is open
        Log.e(TAG, "onOpened");

        cameraDevice = camera;

        createCameraPreview();
    }



    @Override
    public void onDisconnected(CameraDevice camera) {
        cameraDevice.close();
    }

    @Override
    public void onError(CameraDevice camera, int error) {
        cameraDevice.close();
        cameraDevice = null;
    }


    public void onPause(CameraDevice camera){
        cameraDevice=camera;
    }
};
...