2015-04-08 23 views
24

Mam niestandardową kamerę, która działa dobrze w niektórych urządzeniach. Działa dobrze na Samsung Galaxy Gran Duos (samsung-gt i9082, Android 4.2.2), ale kiedy próbuję uchwycić obraz, który wcześniej powiększałem, to zawiesza się, nie ma awarii, jedynym sposobem na wyjście jest naciśnięcie Przycisk powrotu. Dzieje się tak tylko w Samsung Galaxy Gran Duos.Zamrożona kamera Android po powiększeniu

Kod, który kiedyś zrobić zdjęcie:

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

a kod używany do powiększania:

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

Czy błąd występuje podczas robienia zdjęć we wszystkich rozdzielczościach? Czy dopuszczalne jest robienie zdjęć w niższej rozdzielczości na zaatakowanych urządzeniach? – samgak

+0

@samgak: Tak, dzieje się to we wszystkich rozdzielczościach. Nie ma problemu z niższą rozdzielczością, już go używam! Dzięki. –

+0

Czy próbujesz uruchomić podgląd po ustawieniu parametrów? – Cynapsis

Odpowiedz

0

To nie jest silnie odpowiednia odpowiedź. Wiem.

Ale chciałbym powiedzieć, że Samsung 4.2.2 ma wiele wadliwych problemów. Ma awarię ClipboardManager, awarię ActionBar AppCompat i tak dalej.

Po prostu odfiltruj go, używając prostej klauzuli if i ocal swoje życie.

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

Nie jest to celem pytania. Musimy zobaczyć rozwiązanie tego problemu, nie przechodząc przez źródło problemu. Robimy to już dziś, aby zapobiec występowaniu błędu, ale nie jest to dla nas idealne. –

+0

@JulioBorges // dlaczego nie uważasz, że ten model może mieć wadliwy sterownik aparatu lub upuścić niektóre pakiety w oprogramowaniu? Samsung 4.2.2 naprawdę ma problemy. – Youngjae

+0

@Youngjae: Samsung ma swoje szczegóły, to, co powiedziałeś, jest prawdą, ale klauzula "jeśli" pozwala tylko uniknąć problemu. Zrobiłem to przed postem tutaj ... Dzięki i tak! –

0

Czy po uruchomieniu zdjęcia ponownie uruchamiasz podgląd kamery?

dodać ten camera.startPreview();

Spróbuj

 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

Po pierwsze dziękuję! Próbowałem, ale nie działał. Zdjęcie zrobione bez problemu, problem pojawia się, gdy próbuję zastosować zoom, ekran się zawiesza i nie ma przechwyconego obrazu, a największym problemem jest to, że aplikacja wciąż żyje i nic nie jest wyświetlane w LogCat. –

1

myślę, że trzeba potwierdzić, że aparat obsługuje zoom za pomocą camera.isZoomSupported() wtedy, gdy jest obsługiwana trzeba anulować automatyczne ustawianie ostrości z camera.cancelAutoFocus() aby zapobiec wizerunek dystorsje. Ale to zadziała tylko wtedy, gdy urządzenie faktycznie obsługuje zoom. Jeśli nie, musisz przechwycić obraz zatrzymania i powiększyć go, używając odpowiedniej sekcji.

0

To jest pewien problem z określonym rodzajem jądra.

Wypróbuj to podejście.

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; 
} 
Powiązane problemy