2013-05-23 13 views
6

Pracuję nad aplikacją, która wymaga skanowania kodu QR i klikania obrazów, ale czasami zdarza się, że aplikacja aparatu ulega awarii i mówi, że kamera z Androidem przestała działać, a urządzenie musi zostać ponownie uruchomione w celu prawidłowego działania.Jak zwolnić kamerę po zakończeniu aktywności na Androidzie?

Chcę móc zwolnić kamerę z mojej aktywności, aby w późniejszym czasie uniknąć awarii. Potrzebna pomoc!

KOD przypadku skanowania:

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

KOD za klikanie obrazku:

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. 
    } 
} 

Odpowiedz

17

Umieść poniższy kod w swoim sposobie aktywności onDestroy:

protected void onDestroy(){ 

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

      camera.release(); 
      camera = null; 
     } 


} 

Jeśli używasz oddzielnego Klasa podglądu następnie dodaj poniżej kod:

public void surfaceDestroyed(SurfaceHolder holder) { 

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

      camera.release(); 
      camera = null; 
     } 

    } 
+0

Co, jeśli po prostu przekazuję intencję do kamery i aplikacji do skanowania? Jak mam zrobić to samo? –

+0

następnie umieść pierwszy kod w aplikacji do skanowania. – Riser

+5

Wykonaj tę czynność metodą onPause swojej aktywności, a następnie ją tam zwolnij. –

Powiązane problemy