从android 6.0开始,sdcard路径不再是" / storage / sdcard1 /"," / storage / sdcard-ext /"或者其他的东西。
路径取决于手机。如果我使用Nexus 5x AVD,路径为" / storage / 1D15-3A1B /"。当我使用Nexus 6p AVD时,路径为" / storage / 4679-1802 /"。那么如何在程序中动态编写sdcard路径以在外部sdcard中找到文件?
谢谢!
答案 0 :(得分:0)
查看find
。
答案 1 :(得分:0)
似乎我找到了解决方案。
我正在使用访问存储框架。我通过处理uri字符串得到它并获得" 1D15-3A1B"部分,然后将其组合到SD卡路径。这是解决方案。
Welcome to Word.docx
时,我会intent
获得onActivityResult()
。String docId = DocumentsContract.getDocumentId(intent.getData())
获取DocumentId,因此字符串docId
为"1D15-3A1B:Welcome to Word.docx"
。String[] split = docId.split(":")
获取字符串数组,因此我们可以获得"1D15-3A1B"
split[0]
,而{sdcard "Welcome to Word.docx"
中的路径为split[1]
}。String newPath = "/storage/" + split[0] + "/" + split[1]
。更新:
实际上getExternalFilesDirs()
更容易做到这一点......谢谢@greenapps!
答案 2 :(得分:0)
我尝试了很多方法,包括:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
Environment.getExternalStorageDirectory()
我的应用程序仍无法看到DCIM / Camera中的图片文件。我可以看到目录名称,但任何这些目录上的listFiles()都返回null。 最后,我羞怯地发现我的Manifest没有包含魔术行android.permission.WRITE_EXTERNAL_STORAGE。 一旦我添加了许可,它就像一个魅力。
故事的道德:在这种情况下,Android不会警告/破坏/抛出异常。当它失败时,它会无声地失败!