Подтвердить что ты не робот

Предварительный просмотр камеры после блокировки экрана

Пользовательское приложение для камеры, которое я написал, перестает выдавать предварительный просмотр после блокировки экрана (нажатием кнопки блокировки или ожиданием в течение нескольких минут). Я не получаю исключения, что затрудняет поиск проблемы.

Блокировка экрана Android (если это правильный термин) приостанавливает/останавливает/... мое приложение (активность)?

Если бы это было так, может быть причиной моего метода onPause/onResume? Или это еще одна причина?

Заранее спасибо

4b9b3361

Ответ 1

Я столкнулся с такой же проблемой и исправил ее, выполнив следующие шаги:

  • Я создал предварительный просмотр камеры и добавил его в контейнер FrameLayout в onResume() родительской активности. Что-то вроде:

    public void onResume{
        super.onResume();
        mCamera = Camera.open();
        if(null != mCamera){
            mCamera.setDisplayOrientation(90);
            mPreview = new CameraOverlay(getActivity(), mCamera);
            frLyParent.addView(mPreview);
        }
    }
    
  • Я удалил представление в onPause(). Это фиксирует замораживание.

    public void onPause(){
        super.onPause();
        if(null != mCamera){
            mCamera.release();
            mCamera = null;
        }
        frLyParent.removeView(mPreview);
        mPreview = null;
    }
    

где CameraOverlay() - это класс, который расширяет SurfaceView и реализует SurfaceHolder.Callback. Дайте мне знать, если вам нужна эта реализация.

Ответ 2

Спасибо, я использовал модификацию этого, и он тоже работает для меня.

Я добавил mPreview.removeView(mPreview.mSurfaceView); в onpause() и mPreview.addView(mPreview.mSurfaceView); в onResume() перед тем, как открыть камеру.

Я также удалил addView(mSurfaceView); в классе предварительного просмотра.

Ответ 3

вот мой, он работает: -)

@Override
    public void onResume() {
        super.onResume();
        try {
            camera = Camera.open();
            holder.addCallback(this);
            surface.setVisibility(View.VISIBLE);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public void onPause() {
        try {
            surface.setVisibility(View.GONE);
            holder.removeCallback(this);
            camera.release();
        } catch (Exception e) {
            e.printStackTrace();
        }
        super.onPause();
    }

Ответ 4

В onResume() метод добавьте эту строку:

surfaceView.setVisibility(View.VISIBLE);

В onPaused() метод добавьте эту строку:

surfaceView.setVisibility(View.GONE);