【发布时间】:2015-11-26 14:45:41
【问题描述】:
我正在尝试创建一个auto-backup 应用程序,其中从Camera 拍摄的所有照片都将上传到 Cloudinary。但是,我似乎无法让我的代码正常工作。我做错了什么?
class UploadPhotos implements Runnable {
@Override
public void run() {
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File[] listOfFiles = storageDir.listFiles();
if (listOfFiles != null) {
System.out.println("code does not get this far");
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
try {
cloudinary.uploader().upload(listOfFiles[i], ObjectUtils.emptyMap());
System.out.print(listOfFiles[i] + " should have uploaded");
} catch (IOException e) {
e.printStackTrace();
}
} else if (listOfFiles[i].isDirectory()) {
System.out.println("Directory " + listOfFiles[i].getName());
}
}
}
}
}
storageDir 路径在 Android Studio emulator 中显示为 /storage/0804-0A1C/DCIM,但 listOfFiles 为空(尽管使用相机拍摄了几张照片)。
【问题讨论】:
-
可能是因为您的文件系统没有该路径。
-
首先,这不是相机应用程序外部存储上推荐的基本目录。那将是
DIRECTORY_DCIM。其次,没有要求任何相机应用程序将照片存储在任何特定位置,更不用说您可以访问的位置了。有数千种 Android 设备型号。这些相机预装了数百种不同的相机应用程序,并且通过 Play 商店等分销渠道提供了无数其他相机应用程序。他们都可以为所欲为。 -
@CommonsWare 谢谢,我已将其更正为 DCIM 并将编辑该帖子。但是,这仍然导致 listOfFiles 为空。肯定有办法找到设备上默认相机应用的保存位置吗?
-
“肯定有办法找到设备上默认相机应用的保存位置吗?” - 不。顺便说一句,所有
DIRECTORY_位置都是基本目录。文件不一定直接存储在其中。对于DIRECTORY_DCIM,相机应用程序通常会设置一个子目录。因此,您将需要进行递归扫描。这在您的特定情况下无济于事(我的猜测:模拟器相机应用程序实际上并没有拍照),并且仍然无法在所有可能的设备上运行,但它至少会稍微改进您当前的算法。 -
@CommonsWare 那么,比如说,Facebook 应用程序如何在有人想要发帖时找到图像(例如insidefacebook.com/wp-content/uploads/2011/06/…)? Android Studio 确实通过网络摄像头拍照,并且它会持续重启,因此必须将图像保存在某个地方。
标签: java android image android-studio photo-gallery