无法创建目录并将相机拍摄的照片保存在存储/仿真/ 0中

时间:2019-01-07 11:25:42

标签: android camera storage external

首先,我正在使用Google Pixel XL(第1代32 GB版本,运行Android 9 API级别28)测试此应用程序

基本上,我正在尝试基于Android Camera 2 API创建一个相机应用程序(我刚刚从https://github.com/googlesamples/android-Camera2Basic下载了示例代码)。并被卡住,因为我试图将相机拍摄的照片保存到“ /storage/emulated/0/”内的“ Pictures”文件夹中。

但是,由于某种原因,即使我似乎能够做到这一点,当我使用ES File Explorer检查它们时,文件夹和图片文件也不存在。

到目前为止,我已经尝试了3种方法:

尝试#1:

    mFile = new File(getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES), "newPicture.jpg");
    if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){

        mFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "picture.jpg");
        mFile.mkdirs();
    }

尝试#2:

    File filePath = new File(Environment.getExternalStorageDirectory().getPath(),"randomFolder");
    if(!filePath.exists()){
        filePath.mkdirs();
    }
    String fullPathName = filePath.getAbsolutePath() + "/" + "newPicture.jpg";
    mFile = new File(fullPathName);

尝试#3:

    mFile = new File(fullPathName);
    File filePath = new File(Environment.getExternalStorageDirectory() + "/Pictures/");
    if (!filePath.exists()){
        filePath.mkdirs();
    }
    mFile = new File(filePath,"newPicture.jpg");

mFile是将“ newPicture”保存到的文件路径,基本上应该保存为“ /storage/emulated/0/Pictures/newPicture.jpg”

现在,我尝试使用getExternalFilesDir()方法,以便将图片保存到/storage/emulated/0/Android/data/com.***.***[the package name]/files/Pictures/newPicture.jpg“,在这种情况下,它完全可以正常工作!但是我真的想将图片保存到{{1} }目录,因为我希望用户以后可以轻松访问数据。

为了更好地说明这一点,我记录了运行的应用程序,然后拍摄了一张照片并将其保存为gif,然后将其上传到imgur上: https://imgur.com/Szpc1HR

看到了吗?图片似乎已成功保存到“ /storage/emulated/0/Pictures/newPicture.jpg”中,但是当我进入ES File Explorer检查图片时,nada未创建“ Pictures”文件夹。

我在这里才是真正的智慧哈哈,有人知道这个问题的解决方案吗?任何建议将不胜感激

P.S。几乎忘了说了,我已经在/storage/emulated/0中添加了权限:

AndroidManifest.xml

1 个答案:

答案 0 :(得分:1)

正如某人在这篇文章中所说:

how-can-i-access-storage-emulated-0-dcim-on-android-device , “ / storage / emulated /”文件夹实际上并不存在。这就是所谓的“符号链接”,或更简单地说,是对实际数据存储位置的引用。您需要在设备上找到存储它的实际物理位置。

也许这个链接会有所帮助,或者这个Can't create a directory on /storage/emulated/0 on emulator