2013-05-23 15 views
6

Sto lavorando a un'applicazione che richiede la scansione di un codice QR e faccio clic sulle immagini, ma a volte capita che l'applicazione della videocamera si arresti e dice che la videocamera Android ha smesso di funzionare e il dispositivo deve essere riavviato per funzionare correttamente.Come rilasciare la fotocamera dopo che l'attività termina in Android?

Desidero essere in grado di rilasciare la fotocamera dalla mia attività stessa per evitare che si arresti in seguito in ogni caso. Aiuto necessario!

CODICE DI SCANSIONE:

@Override 
public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 


     try{ 
     Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
      intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
      startActivityForResult(intent, 0); 
     } 
     catch(Exception e) 
     { 
     // ERROR 
     } 
    } 

public void onActivityResult(int requestCode, int resultCode, Intent intent) 
    { 
    if (requestCode == 0) 
     { 
     if (resultCode == RESULT_OK) 
    { 
     String contents = intent.getStringExtra("SCAN_RESULT"); 
     showPass(contents); 

    } 
     else if (resultCode == RESULT_CANCELED) 
     { 
      showFail(); 
     } 
     } 
    } 

CODICE PER scegliere Immagine:

public void takephoto(View v) 
{ 

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(cameraIntent, CAMERA_REQUEST); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (requestCode == CAMERA_REQUEST) 
    { 
       Bitmap photo = (Bitmap) data.getExtras().get("data"); 
       // some action. 
    } 
} 

risposta

17

Mettere Sotto codice nel tuo onDestroy metodo della vostra attività:

protected void onDestroy(){ 

if(camera!=null){ 
      camera.stopPreview(); 
      camera.setPreviewCallback(null); 

      camera.release(); 
      camera = null; 
     } 


} 

Se si utilizza separata Anteprima classe quindi aggiungere sotto il codice in questo:

public void surfaceDestroyed(SurfaceHolder holder) { 

     if(camera!=null){ 
      camera.stopPreview(); 
      camera.setPreviewCallback(null); 

      camera.release(); 
      camera = null; 
     } 

    } 
+0

Cosa succede se sto passando semplicemente un intento alla fotocamera e all'applicazione di scansione? Come faccio a fare lo stesso allora? –

+0

quindi inserisci il primo codice nell'applicazione di scansione. – Riser

+5

Per favore fallo nel metodo onPause della tua attività, è meglio rilasciarlo lì. –

Problemi correlati