android - 无法在 storage/emulated/0 中创建目录和保存相机拍摄的照片

标签 android camera storage external

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

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

但是,由于某些原因,即使我似乎能够做到这一点,但当我使用 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.***.***[包名]/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" />

最佳答案

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

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

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

关于android - 无法在 storage/emulated/0 中创建目录和保存相机拍摄的照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54073476/

相关文章:

android - 设置闪光模式 camera.parameters android 1.5

java - 相机权限在运行时不起作用

php - 拉拉维尔 : How to Store file uploaded path in database

java - 如何将文件写入sd卡? (Android)没有错误,但没有写入任何内容

android - Jmeter :Recevied fatal alert:certificate_unknown 中的 SSLhandshakeException

android - 将 AsyncTask 转换为 RxAndroid

ios - 如何从 UIImagePickerController 导入图像到新的 VC? swift

c - 以最有效的方式读取 CGI POST 数据

android - 不幸的是,应用程序已停止 - 在 if-else 条件下显示 Toast

java - 通过标签访问 ImageView