我正在编写一个应用程序,它应该将相机拍摄的照片上传到内存和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>
答案 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;
}
有效。