Android 查看外部SD卡上文件夹的更改
我试图在Android Api 26+上监听外部SD卡上的文件夹更改,问题是我没有得到真正的路径,我只得到了内容URI。 我几乎什么都试过了: 1-第三方库 2-Environment.getExternalStorageDirectory() 3-System.getenv(“辅助存储”) 4-System.getenv(“外部存储”) 5-Environment.getExternalStoragePublicDirectory() 我无法访问外部SD卡,我需要一个实际路径来添加到FileObserver中。Android 查看外部SD卡上文件夹的更改,android,android-sdcard,Android,Android Sdcard,我试图在Android Api 26+上监听外部SD卡上的文件夹更改,问题是我没有得到真正的路径,我只得到了内容URI。 我几乎什么都试过了: 1-第三方库 2-Environment.getExternalStorageDirectory() 3-System.getenv(“辅助存储”) 4-System.getenv(“外部存储”) 5-Environment.getExternalStoragePublicDirectory() 我无法访问外部SD卡,我需要一个实际路径来添加到FileO
关于如何监听SD卡上的文件夹,或者如何获取其路径,有什么建议吗?因此,在调试之后,我找到了获取所选文件夹路径的方法 首先,我使用文档树构建uri
Uri docUri = DocumentsContract.buildDocumentUriUsingTree(uri,
DocumentsContract.getTreeDocumentId(uri));
并对其进行了查询
cursor = context.getContentResolver().query(contentUri, null, null, null, null);
并在document\u id
列中获取数据
String string = cursor.getString(cursor.getColumnIndex("document_id"));
如果它在sd卡中,则类似于XXX-XXX:DCIM/ffmpeg
,如果它在内部存储器中,则类似于primary:DCIM/ffmpeg
最后,我能够通过以下方法获得真实路径:
String[] strings = string.split(":");
String newPath = "/storage/" +
(strings[0].equals("primary")?"emulated/0/"+strings[1]:
string.replaceAll(":", "/"));
这将把列中的数据分成两部分(我对第一个字符串感兴趣,只是想知道它是否在sd卡中)。如果它在sd卡中,它将添加前缀/storage/
,并用正斜杠替换所有冒号;如果它在主存储中,它将添加前缀/storage/emulated/0/
,并用正斜杠替换冒号
我已经用很多设备(甚至是模拟器)测试过它,它工作得很好。您想要的是从
content://
中获得:path,对吗?是的,我想要一个真正的路径在FileObserver中传递它。请尝试GetExternalFileDirs()。它将返回两个项目,其中第二个项目位于SD卡上(如果有)。getExternalFilesDirs()返回SD卡中的应用程序文件夹,我要SD卡的根目录。这有什么关系?您可以删除../Android/data//files部分。那你就有根了。没有其他方法。在第一个代码块中,您有docUri
,但在第二个代码块中,您使用contentUri
。这些都是相同的吗?