-1

从android 6.0开始,sdcard路径不再是“/storage/sdcard1/”、“/storage/sdcard-ext/”什么的。

路径取决于电话。如果我使用 Nexus 5x AVD,路径是“/storage/1D15-3A1B/”。当我使用 Nexus 6p AVD 时,路径是“/storage/4679-1802/”。那么如何在程序中动态写入sdcard路径来定位外部sdcard中的文件呢?

谢谢!

4

3 回答 3

0

我尝试了很多方法,包括:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
Environment.getExternalStorageDirectory()

我的应用程序仍然看不到我在 DCIM/Camera 中的图片文件。我可以看到目录名称,但这些目录中的任何一个上的 listFiles() 返回 null。最后,不好意思地,我发现我的 Manifest 没有包含神奇的行 android.permission.WRITE_EXTERNAL_STORAGE。一旦我添加了权限,它就像一个魅力。

故事的寓意:在这种情况下,Android 不会警告/中断/抛出异常。当它失败时,它会默默地失败!

于 2017-02-19T03:14:24.807 回答
0

看来我找到了解决方案。

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

  1. 当我单击Welcome to Word.docxsdcard 根路径中的文件时,我得到了intentby onActivityResult()
  2. 通过 获取 DocumentId String docId = DocumentsContract.getDocumentId(intent.getData()),因此字符串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]

更新:实际上getExternalFilesDirs()这样做更容易......谢谢@greenapps!

于 2016-07-28T23:15:02.700 回答
0

看看getExternalFilesDirs()

于 2016-07-28T22:21:03.950 回答