无法在android 6.0中找到sdcard文件(不是硬代码)

时间:2016-07-28 22:08:20

标签: android android-6.0-marshmallow android-sdcard mobile-development

从android 6.0开始,sdcard路径不再是" / storage / sdcard1 /"," / storage / sdcard-ext /"或者其他的东西。

路径取决于手机。如果我使用Nexus 5x AVD,路径为" / storage / 1D15-3A1B /"。当我使用Nexus 6p AVD时,路径为" / storage / 4679-1802 /"。那么如何在程序中动态编写sdcard路径以在外部sdcard中找到文件?

谢谢!

3 个答案:

答案 0 :(得分:0)

查看find

答案 1 :(得分:0)

似乎我找到了解决方案。

我正在使用访问存储框架。我通过处理uri字符串得到它并获得" 1D15-3A1B"部分,然后将其组合到SD卡路径。这是解决方案。

  1. 当我点击sdcard根路径中的文件Welcome to Word.docx时,我会intent获得onActivityResult()
  2. String docId = DocumentsContract.getDocumentId(intent.getData())获取DocumentId,因此字符串docId"1D15-3A1B:Welcome to Word.docx"
  3. 拆分字符串并按String[] split = docId.split(":")获取字符串数组,因此我们可以获得"1D15-3A1B" split[0],而{sdcard "Welcome to Word.docx"中的路径为split[1] }。
  4. 如果我们想获取之前点击的文件的uri,只需要构建一个新的字符串String newPath = "/storage/" + split[0] + "/" + split[1]
  5. 更新: 实际上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不会警告/破坏/抛出异常。当它失败时,它会无声地失败!