我正在尝试在没有预览的情况下拍照,当我的应用程序开始运行时,然后将图片保存在新文件夹中 - " pictures123",在根文件夹中。 有人可以告诉我我的代码中有什么问题吗?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File directory = new File(Environment.getExternalStorageDirectory() + "/pictures123/");
if (!directory.exists()) {
directory.mkdir();
}
Camera camera = Camera.open(0);
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
camera.setParameters(parameters);
SurfaceView mview = new SurfaceView(getBaseContext());
camera.setPreviewDisplay(mview.getHolder());
camera.setPreviewDisplay(null);
camera.startPreview();
camera.takePicture(null,null,photoCallback);
camera.stopPreview();
}
Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
try {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/pictures123");
File file = new File (myDir, "pic1.jpeg");
FileOutputStream out = new FileOutputStream(file);
out.write(data);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e)
{
e.printStackTrace();
}
finish();
}
};
权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
答案 0 :(得分:8)
如果没有预览,您无法拍摄照片,但无需在屏幕上显示预览。您可以将输出定向到SurfaceTexture(API 11 +)。
有关详细信息,请参阅this answer。
答案 1 :(得分:0)
我认为主要问题是你在startPreview之后立即调用takePicture,这实际上需要时间来完成它的设置。因此,在这两者之间添加延迟可以暂时解决此问题,look here for more details。
答案 2 :(得分:0)
没有预览就无法拍照。您应该阅读Android在线参考:http://developer.android.com/reference/android/hardware/Camera.html#takePicture。
注意: 此方法仅在预览处于活动状态时(startPreview()之后)有效。拍摄图像后将停止预览;如果呼叫者想要重新开始预览或拍摄更多照片,则必须再次调用startPreview()。不应在start()和stop()之间调用它。
答案 3 :(得分:0)
如果您使用的是 Camera 2 API ,则无需预览或午餐设备的相机应用即可秘密拍照,您可以在github上检查我的项目。
https://github.com/botyourbusiness/android-camera2-secret-picture-taker
希望有帮助:)