从android 6.0开始,sdcard路径不再是“/storage/sdcard1/”、“/storage/sdcard-ext/”什么的。
路径取决于电话。如果我使用 Nexus 5x AVD,路径是“/storage/1D15-3A1B/”。当我使用 Nexus 6p AVD 时,路径是“/storage/4679-1802/”。那么如何在程序中动态写入sdcard路径来定位外部sdcard中的文件呢?
谢谢!
从android 6.0开始,sdcard路径不再是“/storage/sdcard1/”、“/storage/sdcard-ext/”什么的。
路径取决于电话。如果我使用 Nexus 5x AVD,路径是“/storage/1D15-3A1B/”。当我使用 Nexus 6p AVD 时,路径是“/storage/4679-1802/”。那么如何在程序中动态写入sdcard路径来定位外部sdcard中的文件呢?
谢谢!
我尝试了很多方法,包括:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
Environment.getExternalStorageDirectory()
我的应用程序仍然看不到我在 DCIM/Camera 中的图片文件。我可以看到目录名称,但这些目录中的任何一个上的 listFiles() 返回 null。最后,不好意思地,我发现我的 Manifest 没有包含神奇的行 android.permission.WRITE_EXTERNAL_STORAGE。一旦我添加了权限,它就像一个魅力。
故事的寓意:在这种情况下,Android 不会警告/中断/抛出异常。当它失败时,它会默默地失败!
看来我找到了解决方案。
我正在使用访问存储框架。我通过处理 uri 字符串并获取“1D15-3A1B”部分来获取它,然后将其组合到 sdcard 路径。这是解决方案。
Welcome to Word.docxsdcard 根路径中的文件时,我得到了intentby onActivityResult()。String docId = DocumentsContract.getDocumentId(intent.getData()),因此字符串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!
看看getExternalFilesDirs()。