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

问题描述 投票:0回答:3

我正在使用相机意图通过以下代码在服务中拍照

 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来制作新应用程序。我想使用默认的相机应用程序。有人这么说

“相机应用程序不会为其他应用程序提供禁用确认屏幕的选项,即使相机应用程序本身不显示确认屏幕。

因此不可能不显示确认屏幕。”

过去看起来很糟糕。我使用的是安卓5.0。现在可以吗

android android-intent android-camera android-camera-intent
3个回答
2
投票

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

adb shell“am start -a android.media.action.STILL_IMAGE_CAMERA”&& sleep 1 && adb shell“输入 keyevent 27”

注意该操作是 STILL_IMAGE_CAMERA

参考 Android 4.4 不允许我在使用 adb 命令捕获时保存图片


1
投票

这是不可能的。

您无法控制默认相机应用程序的行为。更糟糕的是,您不知道将使用什么应用程序来实现您的

ACTION_IMAGE_CAPTURE
意图。最终用户完全有权安装替代相机应用程序,或者可能安装了冒充相机应用程序的恶意软件(作为相机应用程序意味着在这种情况下清单声明它可以执行
ACTION_IMAGE_CAPTURE
)。但首先,ODM 预装了相机应用程序,其行为不一定与 AOSP 相机相同。

此类应用程序可能会遵循合同进行

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

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


0
投票

如果您遇到错误:

'sleep' is not recognized as an internal or external command,
operable program or batch file.

尝试

timeout
而不是
sleep

adb shell "am start -a android.media.action.STILL_IMAGE_CAMERA" && timeout 3 && adb shell "input keyevent 27"
© www.soinside.com 2019 - 2024. All rights reserved.