bounty将在6天后过期。回答此问题可获得+50声望奖励。Mathlight希望引起更多人关注此问题。
我试图递归读取一个给定的目录,并找到所有的文件夹和文件。目录和子目录被找到,但没有文件。
我的虚拟设备上的存储结构:
用于“遍历给定目录”的代码
import android.util.Log
import java.io.File
// path = "/storage/1B10-1D17/ReadTest/"
class FileHelper {
fun walkTest(path: String){
File(path).walkTopDown().forEach {
// println(it)
Log.e("walkTest extension", it.extension)
if(it.isDirectory){
Log.e("walkTest", "Directory: ${it.name}")
}else{
Log.e("walkTest", "File: ${it.name}")
}
}
}
}
这将输出以下内容:
E/walkTest extension:
E/walkTest: Directory: ReadTest
E/walkTest extension:
E/walkTest: Directory: SubFolder
在我的android manifest文件中,我有以下行,并授予权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我的代码中有什么缺陷,我如何才能找到存储在这些目录中的三个pdf文件?
更新1/2
如下面的屏幕截图所示,介质访问权限已被授予:
如果我运行下面的命令(按照dan 1st的建议),我会得到下面的输出,其中显示了pdf文件:
> adb shell ls /storage/1B10-1D17/ReadTest/
File_1.pdf
SubFolder
1条答案
按热度按时间g6ll5ycj1#
一般来说,您无法访问可移动存储上的任意文件。
READ_EXTERNAL_STORAGE
不会改变这一点。你建议的解决方案是使用
MANAGE_EXTERNAL_STORAGE
。从技术上讲,这是可行的,而且对于个人使用的应用来说,这是一个很好的解决方案。如果你打算分发此应用,你需要向Google(可能还有其他应用商店)提交文件,证明你使用此权限的合理性。商店不同意你的理由,可能会选择不分发你的应用。或者,您可以使用存储访问框架。使用
ACTION_OPEN_DOCUMENT_TREE
/ActivityResultContracts.OpenDocumentTree
,让用户决定希望您的应用访问用户设备(或用户云存储)上的哪个位置。然后,您可以使用DocumentFile
遍历文档树以查找子树和文档。