【问题标题】:Cannot create directory and save picture taken by camera in storage/emulated/0无法创建目录并将相机拍摄的照片保存在 storage/emulated/0 中
【发布时间】:2019-01-07 11:25:41
【问题描述】:

首先,我正在使用我的 Google Pixel XL(第一代 32 GB 版本,运行 Android 9 API Level 28)测试此应用

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

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

到目前为止,我已经尝试了 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",在这种情况下,它完全可以工作!但是我真的想将图片保存到 /storage/emulated/0 目录,因为我希望用户以后能够轻松访问数据。

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

看到了吗?图片似乎成功保存到“/storage/emulated/0/Pictures/newPicture.jpg”但是当我去ES文件资源管理器检查图片时,没有创建文件夹“图片”,nada。

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

附:差点忘了说,我已经在AndroidManifest.xml添加了权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

【问题讨论】:

  • AndroidManifest 文件中是否允许外部存储?:&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;
  • @guy 嗨,伙计,感谢您的回复 :) 我做到了,是的,我忘了在帖子中说,我现在就编辑它。

标签: android camera storage external


【解决方案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

【讨论】:

  • 我不知道,这有点奇怪,因为如果我尝试使用“getExternalFilesDir()”方法,它会被保存到“/storage/emulated/0/Android/data/com.***.***[the package name]/files/Pictures/newPicture.jpg”中,对吗?好吧,吐司会显示它已保存在那里,当我用 ES 文件资源管理器检查它时,“newPicture.jpg' 是在那里创建的。重点是,我认为吐司显示的是正确的东西,只是由于某种原因它没有保存在那里.
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 2021-09-04
  • 2013-04-03
  • 2018-08-08
  • 2016-07-05
  • 1970-01-01
相关资源
最近更新 更多