我正在一个项目上,我需要允许用户从外部SD卡或内部存储器进行读取和写入,但是无论我尝试什么,都只能找到一个存储位置。
我正在使用Android模拟器,该模拟器具有android studio托管的SD卡和内部存储,在加载solid Explorer时显示它们可用。
我正在使用以下代码来获取存储位置:
File[] files = ContextCompat.getExternalFilesDirs(this, null);
for (int i = 0; i < files.length; i++)
{
Log.d("BasePicker", "Name: " + files[i].getName() + " Path: " + files[i].getParentFile().getParentFile().getParentFile().getParentFile());
}
以下输出以下内容:
Name: files Path: /storage/emulated/0
我正在做getPatentFile()
4次,显示每个存储位置的根,否则路径将类似于/ storage / emulated / 0 / package_name / files
然后我尝试使用以下方法获取外部存储位置:
Log.d("BasePicker", Environment.getExternalStorageDirectory().getPath());
,但是我得到的存储路径与“ / storage / emulated / 0”完全相同。
我也尝试了以下方法:
Map<String, File> storageLocations = new HashMap<>(10);
File sdCard = Environment.getExternalStorageDirectory();
storageLocations.put(SD_CARD, sdCard);
final String rawSecondaryStorage = System.getenv(ENV_SECONDARY_STORAGE);
if (!TextUtils.isEmpty(rawSecondaryStorage)) {
String[] externalCards = rawSecondaryStorage.split(":");
for (int i = 0; i < externalCards.length; i++) {
String path = externalCards[i];
storageLocations.put(EXTERNAL_SD_CARD + String.format(i == 0 ? "" : "_%d", i), new File(path));
}
}
但这又只返回/ storage / emulated / 0
所以问题是,如何获得内部和外部存储位置(如果可用),以便我可以允许用户选择他们要使用的存储位置,并且可以浏览和读取/写入任何位置他们想要的存储位置?
更新
我已经使用adb shell找到了从我的SD卡上的Solid Explorer中创建的文件位于/mnt/media_rw/1AF7-1E14
中,但这似乎只能以root身份访问,普通用户看不到它。
答案 0 :(得分:0)
您检查了此帖子吗?
completely differently
根据该帖子,您正在寻找System.getenv("SECONDARY_STORAGE")
。
如果这不起作用,我会在/ storage中获得目录列表,模拟为您的内部存储,另一个文件夹应为SD卡。