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

use*_*096 5 android adb nexus-5

我的目标是使用前置和后置摄像头自动执行捕获和保存图片的过程.

我正在使用运行Android版本4.4.2的Nexus 5,但我没有使用它.

我使用以下命令分别打开前后摄像头:

>adb shell am start -a android.media.action.IMAGE_CAPTURE --ei android.intent.extras.CAMERA_FACING 1


>adb shell am start -a android.media.action.IMAGE_CAPTURE --ei android.intent.extras.CAMERA_FACING 0
Run Code Online (Sandbox Code Playgroud)

(我在之前的stackoverflow post-> ADB命令中找到了这些命令来切换android设备中的摄像头模式)

问题是,当设备处于其中一种模式,它将只捕获未保存的图像时,我执行以下命令:

>adb shell input keyevent KEYCODE_CAMERA
Run Code Online (Sandbox Code Playgroud)

运行此命令后,屏幕上会显示照片以及用于保存,丢弃或重新拍摄照片的按钮.但是,保存选项似乎没有做任何事情.

我有两个具体问题:

1.)是否有任何替代命令可用于打开任一相机?

2.)如何确保图像未保存在某个意外位置?

我真的很感激这个问题的一些帮助.

编辑:我不需要将图片存储在我的电脑上,我希望它在/ sd/card/DCIM/Camera或手机上的其他地方.

Hel*_*rld 2

我在…2020年在我正在回收的“旧”设备(android KitKat 4.4)上面临着同样的问题,这个问题首先出现在Google上。

所以看起来至少有两种方法可以调用相机应用程序(回到android 4.4):(IMAGE_CAPTURE你所说的)和STILL_IMAGE_CAMERA.

第一个请求在adb shell input keyevent KEYCODE_CAMERA发送后进行确认,但我找不到发送来验证拍摄的关键代码。因此,照片未保存。

后者不要求确认,直接保存图片。因此,作为结论,这里是我在KitKat手机上拍照时输入的所有行(将 : 替换IMAGE_CAPTURESTILL_IMAGE_CAMERA)。

adb shell "am start -a android.media.action.STILL_IMAGE_CAMERA"
adb shell "input keyevent KEYCODE_FOCUS"
adb shell "input keyevent KEYCODE_CAMERA" #actually takes photo and saves it
Run Code Online (Sandbox Code Playgroud)

以及相应的一行:

adb shell "am start -a android.media.action.STILL_IMAGE_CAMERA" && sleep 1 &&  adb shell "input keyevent KEYCODE_FOCUS" && sleep 1 &&  adb shell "input keyevent KEYCODE_CAMERA"
Run Code Online (Sandbox Code Playgroud)

如果它仍然不适合您,请继续阅读:

事实上,我忽略了 Pragy Agarwal 的评论,因为它首先不起作用。但它不起作用,因为手机屏幕关闭了。因此,必须先按下电源键才能打开屏幕(但如果屏幕已经打开,则不要按此处的建议):

adb shell dumpsys power | grep "mScreenOn=true" | xargs -0 test -z && adb shell "input keyevent KEYCODE_POWER"
Run Code Online (Sandbox Code Playgroud)

如果对我来说它仍然不起作用,因为相机应用程序以某种方式显示最后拍摄的照片,则在进入相机应用程序时必须先按后退按钮:

adb shell input keyevent KEYCODE_BACK
Run Code Online (Sandbox Code Playgroud)

所以总而言之

adb shell dumpsys power | grep "mScreenOn=true" | xargs -0 test -z && adb shell "input keyevent KEYCODE_POWER" # switch the screen on

adb shell "am start -a android.media.action.STILL_IMAGE_CAMERA"

adb shell input keyevent KEYCODE_BACK # go back to the "real time" camera not the gallery

adb shell "input keyevent KEYCODE_FOCUS"
adb shell "input keyevent KEYCODE_CAMERA" # shoots the picture and saves it
Run Code Online (Sandbox Code Playgroud)

这变成:

adb shell "dumpsys power" | grep "mScreenOn=true" | xargs -0 test -z && adb shell "input keyevent KEYCODE_POWER" && sleep 1 && adb shell "am start -a android.media.action.STILL_IMAGE_CAMERA" && sleep 1 && adb shell "input keyevent KEYCODE_BACK" && sleep 1 &&   adb shell "input keyevent KEYCODE_FOCUS" && sleep 1 &&  adb shell "input keyevent KEYCODE_CAMERA"
Run Code Online (Sandbox Code Playgroud)

对于一台已经使用了 7 年以上但仍在正常工作的设备来说,这是一个多么长的答案啊!