如何使用相机 Intent 在没有预览的情况下拍照?

How to take picture without preview using camera Intent?

我正在通过使用以下代码

在服务中使用相机意图拍照
 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
 try {
      getApplication().startActivity(intent);
  } catch (final ActivityNotFoundException e) {
    e.printStackTrace();
  } catch (final Exception e) {
    e.printStackTrace();
  }

可以拍照;然而,每次它显示预览 GUI(有捕获的图片、保存和丢弃按钮)。我想忽略这一步,就像默认的捕捉相机一样(捕捉和保存没有预览)。我该如何修改代码?谢谢大家

请注意:我不想使用 camera2API 制作新应用。我想使用默认的相机应用程序。有人说

"The camera app doesn't give other apps the option to disable the confirmation screen, even though the camera app itself doesn't show the confirmation screen.

因此不显示确认屏幕是不可能的。"

过去看起来很糟糕。我正在使用 Android 5.0。现在可以吗?

这是不可能的。

您无法控制默认相机应用程序的行为。更糟糕的是,您不知道将使用哪个应用程序来实现您的 ACTION_IMAGE_CAPTURE 意图。最终用户拥有安装替代相机应用程序的全部权力,或者可能安装了伪装成相机应用程序的恶意软件(在这种情况下,作为相机应用程序意味着清单声明它可以执行 ACTION_IMAGE_CAPTURE)。但首先,ODM 预装的相机应用不一定与 AOSP 相机的行为方式相同。

此类应用可能会遵循 ACTION_IMAGE_CAPTURE 意图响应的合同,但不能保证。 SO 充满了关于预装相机应用程序无法正确识别附加功能或产生意外结果的情况的问题。

即使结果看起来正确,您的 应用程序也无法知道照片是否真的由相机拍摄。它可以是图库中的图像,也可以是假图像,如果相机应用选择的话。

我使用 adb 找到了一个很好的解决方案 shell

adb shell "am start -a android.media.action.STILL_IMAGE_CAMERA" && sleep 1 && adb shell "input keyevent 27"

注意动作是 STILL_IMAGE_CAMERA

引用Android 4.4 won't allow me to save a picture when captured using adb commands