在主存储和辅助存储上获取DCIM文件夹的路径

时间:2015-04-11 09:10:33

标签: android

我正在编写一个应用程序,它应该将相机拍摄的照片上传到内存和SD卡上的DCIM / Camera文件夹中。

这意味着在每次上传之前,必须检查是否存在任何图像。

我使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)访问主存储,可以是SD卡或内部存储器(取决于设备)。

来自文档:"Note: don't be confused by the word "external" here. This directory can better be thought as media/shared storage. It is a filesystem that can hold a relatively large amount of data and that is shared across all applications (does not enforce permissions). Traditionally this is an SD card, but it may also be implemented as built-in storage in a device that is distinct from the protected internal storage and can be mounted as a filesystem on a computer."

我的问题是,如何在不对路径进行硬编码的情况下访问辅助存储器以检查DCIM / Camera文件夹中是否存在图像,这样做效果不佳,因为SD卡可能会在不同的路径中进行模拟。 / p>

5 个答案:

答案 0 :(得分:2)

getExternalStorageDirectory仅从内部存储数据中检索,但不从二级存储图像中检索

这是我们从Android获取二级存储图像的方式或从二级存储访问的任何文件夹这是代码......

String secStore = System.getenv("SECONDARY_STORAGE");
File file = new File(secStore + "/DCIM");
File[] listFiles = file.listFiles();

答案 1 :(得分:0)

尝试 File [] aDirArray = ContextCompat.getExternalFilesDirs(context,null);

参见http://developer.android.com/reference/android/support/v4/content/ContextCompat.html#getExternalFilesDirs(android.content.Context,java.lang.String)

请记住,未模拟外部存储(SD卡),并且所有用户都可以看到所有路径。以上(如果返回非null)返回每个已安装的外部存储的根路径(File)。所以如果aDirArray.length> 1,然后以下内容为您提供可移动存储上正在寻找的DCIM路径。

文件aExtDcimDir =新文件(aDirArray [1],Environment.DIRECTORY_DCIM);

也许在您的情况下,您想要检查aDirArray [0],aDirArray [1],...(数组中返回的所有文件)是否存在Environment.DIRECTORY_DCIM。

请注意,Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)返回与新文件相同的内容(aDirArray [0],Environment.DIRECTORY_DCIM)。

答案 2 :(得分:0)

File[] aDirArray = ContextCompat.getExternalFilesDirs(MainActivity.this, null);
File path = new File(aDirArray.length>1?aDirArray[1]:aDirArray[0], Environment.DIRECTORY_DCIM);
像Dave Truby写的那样

答案 3 :(得分:0)

File[] aDirArray = ContextCompat.getExternalFilesDirs(SDCardExample.this, null);
        File path = new File(aDirArray[1], Environment.DIRECTORY_DCIM);
        String data=path.toString();
        int index=data.indexOf("Android");
        String subdata=data.substring(0,index);
        File sec=new File(subdata+"DCIM/Camera");
        File[] secs=sec.listFiles();

答案 4 :(得分:0)

这是解决方案。 试试吧......

首先获取列表中的所有文件

var file=new Java.IO.File("storage/");
var listOfStorages=file.ListFiles();

var isSDPresent=false;
if(listOfStorages[1].Name.Containes("emulated")||listOfStorages[0].Name.Containes("-"))
{
   isSDPresent=true;
   var sdCardName=listOfStorages[0].Name;
}

有效。