2013-05-06 7 views
20

L'app per fotocamera personalizzata che ho scritto smette di dare l'anteprima dopo lo schermo (premendo blocco blocco o in attesa di un paio di minuti). Non ottengo un'eccezione, il che rende piuttosto difficile trovare il problema.L'anteprima della fotocamera si blocca dopo il blocco dello schermo

Il blocco dello schermo di Android (se è il termine corretto) sospende/interrompe/... la mia app (attività)?

In questo caso, la causa potrebbero essere i metodi onPause/onResume? O è un'altra causa più probabile?

Grazie in anticipo

+2

Sì, devi fermare l'anteprima delle camere in 'onPause' e ​​riprenderla in 'onResume' – asloob

risposta

29

ho affrontato lo stesso problema e fissato utilizzando seguenti fasi:

  1. ho creato la mia anteprima macchina fotografica e ha aggiunto al FrameLayout contenitore onResume() dell'attività genitore. Qualcosa di simile:

    public void onResume{ 
        super.onResume(); 
        mCamera = Camera.open(); 
        if(null != mCamera){ 
         mCamera.setDisplayOrientation(90); 
         mPreview = new CameraOverlay(getActivity(), mCamera); 
         frLyParent.addView(mPreview); 
        } 
    } 
    
  2. ho tolto la vista in onPause(). Questo risolve il blocco.

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

dove CameraOverlay() è la classe che estende SurfaceView e implementa SurfaceHolder.Callback. Fammi sapere se hai bisogno di questa implementazione.

+0

Questo ha fatto il trucco , Grazie! –

+0

Ciao. Potresti aggiornare ciò che hai provato a scrivere al passaggio 2. Grazie. – Paul

+3

Sei un genio! grazie! Non ho usato frLyParen.removeView (mPreview), è fondamentale! –

4

Grazie, ho usato una modifica di questa e funziona anche per me

ho aggiunto mPreview.removeView(mPreview.mSurfaceView); in onpause(), e mPreview.addView(mPreview.mSurfaceView); in onResume() prima di aprire la fotocamera.

Ho anche eliminato addView(mSurfaceView); nella classe di anteprima.

4

qui è mio, funziona :-)

@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(); 
    } 
1

In onResume() metodo Add questa linea:

surfaceView.setVisibility(View.VISIBLE); 

In onPaused() metodo Add questa linea:

surfaceView.setVisibility(View.GONE); 
+0

Questa dovrebbe essere la risposta corretta, perché risolve il problema. – epx

Problemi correlati