2015-04-08 14 views
24

Ho una fotocamera personalizzata che funziona bene su alcuni dispositivi. Funziona bene su Samsung Galaxy Gran Duos (samsung-gt i9082, Android 4.2.2) ma quando provo a catturare un'immagine, che ho ingrandito prima, si blocca, nessun arresto, l'unico modo per uscire è premere il tasto tasto indietro. Questo succede solo nel Samsung Galaxy Gran Duos.Fotocamera Android bloccata dopo lo zoom

Il codice che ho usato per fare una foto:

Camera.PictureCallback photoCallback = new Camera.PictureCallback() { 

    public void onPictureTaken(byte[] data, Camera camera) { 

     try { 

     } catch (Exception e) { 
      if (flePicture== null){ 
       Log.d("camera", "Error creating media file, check storage permissions: " + 
         e.getMessage()); 
       return; 
      } 
     } 

     try { 
      FileOutputStream fos = new FileOutputStream(flePicture); 
      fos.write(data); 
      fos.close(); 
     } catch (FileNotFoundException e) { 
      Log.d("camera", "File not found: " + e.getMessage()); 
     } catch (IOException e) { 
      Log.d("camera", "Error accessing file: " + e.getMessage()); 
     } 
    } 
}; 

E il codice utilizzato per lo zoom in:

private void zoomIn() { 
    if (pblnInPreview) { 
     Camera.Parameters parameters = camCamera.getParameters(); 

     if ((parameters.getZoom() + 1) < parameters.getMaxZoom()) { 
      parameters.setZoom(parameters.getZoom() + 1); 
      camCamera.setParameters(parameters); 
     } 
    } 
} 

LogCat:

04-07 17:21:14.386: E/BrcmCamera(130): processControlBuffer: Corrupt stream error raised by camera - sensor communication failure 
+0

L'errore si verifica quando si riprendono immagini con tutte le risoluzioni? È accettabile scattare foto a una risoluzione inferiore sui dispositivi interessati? – samgak

+0

@samgak: Sì, succede in tutte le risoluzioni. Nessun problema con la risoluzione più bassa, lo sto già usando! Grazie. –

+0

Hai provato ad avviare l'anteprima dopo aver impostato i parametri? – Cynapsis

risposta

0

Questo non è fortemente risposta correlata. Lo so.

Ma mi piacerebbe dire che Samsung 4.2.2 ha molti problemi difettosi. Ha crash di ClipboardManager, arresto di ActionBar AppCompat e così via.

Basta filtrarlo con la semplice clausola if e salvarti la vita.

if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR1 && Build.MANUFACTURER.toUpperCase().contains("SAMSUNG")){ 
    // ignore 
}else{ 
    // your logic on the go 
} 
+0

Questo non è lo scopo della domanda. Abbiamo bisogno di vedere una soluzione al problema senza andare oltre la fonte del problema. Questo è già fatto oggi, per evitare che si verifichi l'errore, ma non è l'ideale per noi. –

+0

@JulioBorges // perché non pensi che questo modello possegga un driver Camera difettoso o che lasci alcuni pacchetti nel firmware? Samsung 4.2.2 ha davvero problemi. – Youngjae

+0

@Youngjae: Samsung ha i suoi dettagli, quello che hai detto è vero, ma la clausola "se" evita solo il problema. L'ho fatto prima di postare qui ... Grazie comunque! –

0

si avvia di nuovo l'anteprima della fotocamera dopo aver scattato una foto?

aggiungere questo camera.startPreview();

Prova questa

 Camera.PictureCallback photoCallback = new Camera.PictureCallback() { 

    public void onPictureTaken(byte[] data, Camera camera) { 
      camera.startPreview(); 
     try { 

     } catch (Exception e) { 
      if (flePicture== null){ 
       Log.d("camera", "Error creating media file, check storage permissions: " + 
         e.getMessage()); 
       return; 
      } 
     } 

     try { 
      FileOutputStream fos = new FileOutputStream(flePicture); 
      fos.write(data); 
      fos.close(); 
     } catch (FileNotFoundException e) { 
      Log.d("camera", "File not found: " + e.getMessage()); 
     } catch (IOException e) { 
      Log.d("camera", "Error accessing file: " + e.getMessage()); 
     } 
    } 
}; 
+0

Innanzitutto grazie! Ci ho provato ma non ha funzionato. La foto è scattata senza problemi, il problema si verifica quando provo ad applicare lo zoom, lo schermo si blocca e nessuna immagine viene catturata e il problema più grande è che l'app è ancora attiva e nulla viene mostrato in LogCat. –

1

penso che è necessario confermare che la fotocamera supporta lo zoom utilizzando camera.isZoomSupported() allora se supportata è necessario annullare messa a fuoco automatica con camera.cancelAutoFocus() per impedire immagine distorsioni. Ma funziona solo se il tuo dispositivo supporta effettivamente lo zoom. In caso contrario, è necessario acquisire l'immagine di attesa e ingrandire dopo aver utilizzato Bitmap.createBitmap una sezione desiderata.

0

È un problema con un tipo specifico di kernel.

Prova questo approccio.

private static final String TAG = Test.class.getSimpleName(); 

private boolean isPreviewStarted; 
private Camera camera; 

Camera.PictureCallback photoCallback = new Camera.PictureCallback() { 
    public void onPictureTaken(byte[] data, Camera camera) { 

     // check if this needs to stop the preview 
     if (deviceNeedsStopPreviewToShoot()) { 
      stopPreview(); 
     } 

     // save your image 

     // restart preview if needed. 
     startPreview(); 

    } 
}; 

public void startPreview() { 
    if (!isPreviewStarted && camera != null) { 
     camera.startPreview(); 
     isPreviewStarted = true; 
    } 
} 

public void stopPreview() { 
    if (isPreviewStarted && camera != null) { 
     camera.stopPreview(); 
     isPreviewStarted = false; 
    } 
} 

public static boolean deviceNeedsStopPreviewToShoot() { 
    String[] oldDevices = {"smdk4210", "aries"}; 
    boolean needs = Arrays.asList(oldDevices).contains(Build.BOARD); 
    Log.e(TAG, "Device " + Build.BOARD + (needs ? " needs " : " doesn't need ") + "to stop preview"); 
    return needs; 
} 
Problemi correlati