Podgląd kamery zawiesza się po zablokowaniu ekranu

Aplikacja custom camera, którą napisałem, przestaje dawać Podgląd po zablokowaniu ekranu (naciskając przycisk lock butten lub czekając na kilka minut). Nie dostaję wyjątku, co sprawia, że dość trudno znaleźć problem.

Czy blokada ekranu Androida (jeśli jest to poprawne określenie) zatrzymuje / zatrzymuje/... moja aplikacja (aktywność)?

Gdyby tak było, czy przyczyną mogą być moje metody onPause/onResume? A może inna przyczyna jest prawdopodobna?

Z góry dzięki

Author: Hendrik De Blanger, 2013-05-06

4 answers

Napotkałem ten sam problem i naprawiłem go za pomocą następujących kroków:

  1. Utworzyłem mój podgląd kamery i dodałem go do kontenera FrameLayout w onresume () aktywności rodzica. Coś w stylu:

    public void onResume{
        super.onResume();
        mCamera = Camera.open();
        if(null != mCamera){
            mCamera.setDisplayOrientation(90);
            mPreview = new CameraOverlay(getActivity(), mCamera);
            frLyParent.addView(mPreview);
        }
    }
    
  2. Usunąłem widok w onpause (). To naprawia zamrożenie.

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

Gdzie CameraOverlay() jest klasą rozszerzającą SurfaceView i implementującą SurfaceHolder./ Align = "left" / Daj mi znać, jeśli potrzebujesz tego wdrożenia.

 30
Author: itsviks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-02 02:10:02

Tutaj jest mój, działa: -)

@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();
    }
 5
Author: Afrig Aminuddin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-04 01:35:05

Dzięki, użyłem modyfikacji tego i u mnie też działa

Dodałem mPreview.removeView(mPreview.mSurfaceView); w onpause() i mPreview.addView(mPreview.mSurfaceView); w onResume() przed otwarciem aparatu.

Usunąłem również addView(mSurfaceView); w klasie podglądu.

 4
Author: user2793015,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-18 20:27:30

W metodzie onResume() Dodaj ten wiersz:

surfaceView.setVisibility(View.VISIBLE);

W metodzie onPaused() Dodaj ten wiersz:

surfaceView.setVisibility(View.GONE);
 2
Author: Hantash Nadeem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-01 08:05:36