首先,我正在使用我的 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/