sto giocando con l'originale esempio di barcode scanner qui:Accesso AutoFocus/Flash con Google Vision Barcode Reader
sono in grado di avviare l'autofocus/Flash all'interno della fabbrica macchina fotografica come questo:
// Creates and starts the camera. Note that this uses a higher resolution in comparison
// to other detection examples to enable the barcode detector to detect small barcodes
// at long distances.
CameraSource.Builder builder = new CameraSource.Builder(getApplicationContext(), barcodeDetector)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedPreviewSize(1600, 1024)
.setRequestedFps(15.0f);
// make sure that auto focus is an available option
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
builder = builder.setFocusMode(
autoFocus ? Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE : null);
}
mCameraSource = builder
.setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null)
.build();
Tuttavia questo metodo su CameraSource Builder è andato nella versione attuale e quindi questa impostazione non è possibile accedere. Inoltre ho bisogno di cambiare la FlashMode durante l'uso, quindi non è il modo di farlo neanche. Ho trovato questa brutta soluzione per l'accesso alla fotocamera:
public static Camera getCamera(@NonNull CameraSource cameraSource) {
Field[] declaredFields = CameraSource.class.getDeclaredFields();
for (Field field : declaredFields) {
if (field.getType() == Camera.class) {
field.setAccessible(true);
try {
Camera camera = (Camera) field.get(cameraSource);
if (camera != null) {
return camera;
}
return null;
} catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}
return null;
}
Anche se funziona, non aiuta: quando si chiama getParameters().setFocusMode()
sto ottenendo questa eccezione:
Attempt to invoke virtual method 'android.hardware.Camera$Parameters android.hardware.Camera.getParameters()' on a null object reference
Ovviamente quello che sto facendo non è un modo giusto per farlo, ma sembra che non ci sia documentazione a riguardo.
Grazie per i suggerimenti.
Questo ha funzionato alla grande per me. Grazie! Anche se Camera1 api è deprecato. Qualche possibilità su un aggiornamento Camera2? –
'getCamera' return' null' –
Sembra molto strano che questo non sia supportato ufficialmente, ma questo ha funzionato per me! – SleepingLlama