1

我正在尝试在我的应用程序中拍照并将其保存到

Android/data/com.androidproject/files/Camera/photo.png

我正在使用此代码

 private class ClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

            File file = new File(getActivity().getExternalFilesDir("Camera"),
                    "photo.png");               
            Uri outputFileUri = Uri.fromFile(file);
            Log.v("FILE", "" + outputFileUri);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
            startActivityForResult(intent, CALL_BACK);
        }

    }

有人建议我将行File file = ...改为

File file = new File(getActivity().getFilesDir() + File.separator + "Camera" + File.separator + "photo.png");
file.mkdirs();

这会将路径目录更改为我想要的目录,它也会阻止相机完成动作。这意味着我点击我的按钮,相机加载,我按下蓝色圆圈拍摄照片,然后当我点击复选标记时它什么也不做。我可以重新加载并重新拍摄照片,或者按 x 并取消,但我无法选择复选标记。

有任何想法吗?

编辑

玩了几个小时后,我注意到了一些东西。当我点击复选标记并完成拍照操作时,文件夹中会创建一张照片。复选标记不会关闭屏幕并返回我的活动,但它会创建一个虚拟类型文件。它的大小为 0kb,命名为“1092-309403.jpeg”而不是“photo.png”。该文件也保存在“InternalStorage/DCIM/Camera”下。尽管我的应用程序从未在技术上完成操作,但它从未完全保存。只要我按 x,图片就会删除,就像它从未发生过一样。我也尝试清理我的项目,但这不起作用。

4

3 回答 3

1

相机是第三方应用程序,因此它无法访问您的应用程序的私人存储。您必须提供通往公共存储的路径。更多信息在这里相机意图不保存照片

于 2016-05-10T16:42:03.470 回答
0

您可能将文件夹命名photo.png为以前尝试的剩余文件夹。这可以防止相机应用程序创建具有相同名称的文件。检查外部存储上的 Android/data/com.androidproject/files/Camera/ ,如果那里有一个名为的文件夹photo.png,请将其删除。

于 2013-06-09T05:16:20.947 回答
0

我也有类似的问题,似乎Android不喜欢内部存储......顺便说一下,尝试使用createTempFile():

File dir = new File(getActivity().getFilesDir() + File.separator + "Camera" );
File file = File.createTempFile( "photo.png",  ".jpg", dir );
于 2015-01-27T13:42:09.600 回答