getFilesDir()阻止相机完成操作

时间:2013-06-08 23:34:37

标签: android android-camera

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

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,图片就会删除,就像它从未发生过一样。我也试过清理我的项目,但这不起作用。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我也有类似的问题,看起来Android并不像内部存储......顺便说一下,尝试使用createTempFile():

File dir = new File(getActivity().getFilesDir() + File.separator + "Camera" );
File file = File.createTempFile( "photo.png",  ".jpg", dir );

答案 2 :(得分:0)

相机是第三方应用程序,因此无法访问应用程序的私有存储。你必须提供公共存储的路径。更多信息请访问Camera Intent not saving photo