in packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/MethodCallHandlerImpl.java [58:365]
public void onMethodCall(@NonNull MethodCall call, @NonNull final Result result) {
switch (call.method) {
case "availableCameras":
try {
result.success(CameraUtils.getAvailableCameras(activity));
} catch (Exception e) {
handleException(e, result);
}
break;
case "create":
{
if (camera != null) {
camera.close();
}
cameraPermissions.requestPermissions(
activity,
permissionsRegistry,
call.argument("enableAudio"),
(String errCode, String errDesc) -> {
if (errCode == null) {
try {
instantiateCamera(call, result);
} catch (Exception e) {
handleException(e, result);
}
} else {
result.error(errCode, errDesc, null);
}
});
break;
}
case "initialize":
{
if (camera != null) {
try {
camera.open(call.argument("imageFormatGroup"));
result.success(null);
} catch (Exception e) {
handleException(e, result);
}
} else {
result.error(
"cameraNotFound",
"Camera not found. Please call the 'create' method before calling 'initialize'.",
null);
}
break;
}
case "takePicture":
{
camera.takePicture(result);
break;
}
case "prepareForVideoRecording":
{
// This optimization is not required for Android.
result.success(null);
break;
}
case "startVideoRecording":
{
camera.startVideoRecording(result);
break;
}
case "stopVideoRecording":
{
camera.stopVideoRecording(result);
break;
}
case "pauseVideoRecording":
{
camera.pauseVideoRecording(result);
break;
}
case "resumeVideoRecording":
{
camera.resumeVideoRecording(result);
break;
}
case "setFlashMode":
{
String modeStr = call.argument("mode");
FlashMode mode = FlashMode.getValueForString(modeStr);
if (mode == null) {
result.error("setFlashModeFailed", "Unknown flash mode " + modeStr, null);
return;
}
try {
camera.setFlashMode(result, mode);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "setExposureMode":
{
String modeStr = call.argument("mode");
ExposureMode mode = ExposureMode.getValueForString(modeStr);
if (mode == null) {
result.error("setExposureModeFailed", "Unknown exposure mode " + modeStr, null);
return;
}
try {
camera.setExposureMode(result, mode);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "setExposurePoint":
{
Boolean reset = call.argument("reset");
Double x = null;
Double y = null;
if (reset == null || !reset) {
x = call.argument("x");
y = call.argument("y");
}
try {
camera.setExposurePoint(result, new Point(x, y));
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "getMinExposureOffset":
{
try {
result.success(camera.getMinExposureOffset());
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "getMaxExposureOffset":
{
try {
result.success(camera.getMaxExposureOffset());
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "getExposureOffsetStepSize":
{
try {
result.success(camera.getExposureOffsetStepSize());
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "setExposureOffset":
{
try {
camera.setExposureOffset(result, call.argument("offset"));
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "setFocusMode":
{
String modeStr = call.argument("mode");
FocusMode mode = FocusMode.getValueForString(modeStr);
if (mode == null) {
result.error("setFocusModeFailed", "Unknown focus mode " + modeStr, null);
return;
}
try {
camera.setFocusMode(result, mode);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "setFocusPoint":
{
Boolean reset = call.argument("reset");
Double x = null;
Double y = null;
if (reset == null || !reset) {
x = call.argument("x");
y = call.argument("y");
}
try {
camera.setFocusPoint(result, new Point(x, y));
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "startImageStream":
{
try {
camera.startPreviewWithImageStream(imageStreamChannel);
result.success(null);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "stopImageStream":
{
try {
camera.startPreview();
result.success(null);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "getMaxZoomLevel":
{
assert camera != null;
try {
float maxZoomLevel = camera.getMaxZoomLevel();
result.success(maxZoomLevel);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "getMinZoomLevel":
{
assert camera != null;
try {
float minZoomLevel = camera.getMinZoomLevel();
result.success(minZoomLevel);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "setZoomLevel":
{
assert camera != null;
Double zoom = call.argument("zoom");
if (zoom == null) {
result.error(
"ZOOM_ERROR", "setZoomLevel is called without specifying a zoom level.", null);
return;
}
try {
camera.setZoomLevel(result, zoom.floatValue());
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "lockCaptureOrientation":
{
PlatformChannel.DeviceOrientation orientation =
CameraUtils.deserializeDeviceOrientation(call.argument("orientation"));
try {
camera.lockCaptureOrientation(orientation);
result.success(null);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "unlockCaptureOrientation":
{
try {
camera.unlockCaptureOrientation();
result.success(null);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "pausePreview":
{
try {
camera.pausePreview();
result.success(null);
} catch (Exception e) {
handleException(e, result);
}
break;
}
case "resumePreview":
{
camera.resumePreview();
result.success(null);
break;
}
case "dispose":
{
if (camera != null) {
camera.dispose();
}
result.success(null);
break;
}
default:
result.notImplemented();
break;
}
}