Android Camera openen/sluiten

Ik heb een applicatie voor videogesprekken geschreven met Activiteit die lidvariabele heeft  privé CameraMediaSource mCameraMediaSource;

Werkt prima maar na een tijdje wordt soms de camera niet meer weergegeven. Dan dood ik de hele app en het werkt weer. Weet u niet zeker hoe u met de camera moet omgaan tijdens de levenscyclus van activiteiten, zoals onPause (), onResume() etc. Moet de cameera ooit worden vrijgegeven? Hoe wis ik de camera, wanneer deze een foto pauzeert, blijft deze op het scherm staan. Bedankt

0
Je zou echt meer antwoorden moeten accepteren; De meegeleverde werkt prachtig in mijn ervaring.
toegevoegd de auteur Greyson, de bron

1 antwoord

Ja, de camera moet worden vrijgegeven. Minimaal in onDestroy maar waarschijnlijk veiliger om het in OnPause te doen.

De levenscyclus voor cameragebruik die voor mij heeft gewerkt in 1.6 - 3.x is:

  onResume:
   - get a ref to camera with Camera.open();
   - sv = (SurfaceView)this.findViewById(R.id.capture_SurfaceView);
                mHolder = sv.getHolder(); 
                mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
                mHolder.setSizeFromLayout();
                mHolder.addCallback(this); 
  surfaceChanged:
    - Camera.setPreviewDisplayHolder()
    - Camera.startPreview()
  onPause:
    - Camera.stopPreview
    - SurfaceHolder.removeCallback()
    - Camera.release()

Dit werkt goed voor mij wanneer het apparaat wordt uitgeschakeld en vervolgens weer wordt ingeschakeld, of omdat mijn app anders naar de achtergrond gaat.

Wees ook heel voorzichtig met niet-afgevangen uitzonderingen waardoor u de camera mogelijk niet kunt ontspannen. Dat kan er vaak toe leiden dat de camerahardware zo wordt vergrendeld dat het doden en opnieuw opstarten van je app de camera nog steeds niet kan openen. Als dat gebeurt, moet u het apparaat uit en weer inschakelen.

3
toegevoegd
OK. wat is het oppervlak Veranderd?
toegevoegd de auteur Androider, de bron
SurfaceChanged is onderdeel van de SurfaceHolder.Callback-interface. Het wordt gebruikt om u te laten weten wanneer de oppervlakteweergave gereed is om naar toe te worden getrokken. Zie: developer.android.com/reference/android/view/&ellell;
toegevoegd de auteur mmeyer, de bron