gram z oryginalnym przykładzie skanera kodów kreskowych tutaj:Dostęp AutoFocus/Flash z Google Vision Czytnik kodów kreskowych
są w stanie uruchomić autofokus/Flash w fabryce kamery tak:
// 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();
Jednak ta metoda na kreatorze cameraSource zniknęła w aktualnej wersji, więc nie można uzyskać dostępu do tego ustawienia. Również muszę zmienić FlashMode podczas użytkowania, więc nie jest to również sposób na to. Uważam, że ten brzydki rozwiązanie do dostępu do kamery:
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;
}
Chociaż to działa, to nie pomaga: Dzwoniąc getParameters().setFocusMode()
otrzymuję ten wyjątek:
Attempt to invoke virtual method 'android.hardware.Camera$Parameters android.hardware.Camera.getParameters()' on a null object reference
Oczywiście to, co robię, nie jest Właściwy sposób to zrobić, ale wydaje się, że nie ma na ten temat dokumentacji.
Dzięki za wskazówki.
To zadziałało dla mnie świetnie. Dzięki! Chociaż api Camera1 jest przestarzałe. Czy masz szansę na aktualizację Camera2? –
'getCamera' zwraca' null' –
Wydaje się bardzo dziwne, że nie jest to oficjalnie obsługiwane, ale to działało dla mnie! – SleepingLlama