android - 无法从我的 android 应用 (Android Studio) 访问可移动 SD 卡
问题描述
我正在开发一个应用程序,我必须在我的内部存储和可移动 SD 卡中搜索 PDF 文件。这是我正在使用的代码:
private void Search_Dir(File dir) {
try {
String pdfPattern = displayName; //(displayName = pdf_name.pdf)
File FileList[] = dir.listFiles();
if(FileList != null)
{
for(int i = 0 ; i < FileList.length ; i++)
{
if(FileList[i].isDirectory())
{
Search_Dir(FileList[i]);
}
else
{
if(FileList[i].getName().endsWith(pdfPattern))
{
path = FileList[i].toString();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
这里的路径是一个字符串,它将包含我要搜索的 PDF 的路径。我正在搜索的 PDF 的名称是displayName
我这样调用这个方法:
Search_Dir(Environment.getExternalStorageDirectory());
但不幸的是,这种方法仅在我的内部存储中搜索 PDF。我已经定义了 READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE并且我也在请求这些权限运行时间。
我不知道这是否重要,但它以前工作得很好。我也得到了位于 SD 卡中的 PDF 文件的路径。但是我在手机上重置了出厂数据,然后我再次安装了我的应用程序。从那时起它就不起作用了。
它正在处理位于我的内部存储中的文件,例如 /storage/emulated/0/..... 但不在可移动 SD 卡上。
我的问题:我做错了什么。或者我应该使用任何其他方法来搜索可在内部存储和可移动 SD 卡上使用的文件。
谢谢你。
解决方案
Environment.getExternalStorageDirectory() 为您提供设备主存储的路径,您也可以将其称为内部存储。
您必须获取可移动存储的根路径(如果可用)才能在那里搜索文件。如果您不想太头疼,那么您可以简单地制作一个存储选择器或从一堆已经可用和经过测试的选择器中实现任何一个。