如果我理解正确,那么在Android Q中,您的应用可以使用api读取/写入非移动存储上的downloads目录:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
翻译为
/storage/emulated/0/Downloads
或可移动存储(Android Q中的新增功能)上的公共下载目录,即
/storage/08E7-324HI/Downloads
如何使用API获取第二个目录?
答案 0 :(得分:0)
实际上不建议使用Environment.getExternalStorageDirectory()和Environment. getExternalStoragePublicDirectory(String type)方法,并且在Android Q(或更高版本)设备上调用它们将返回空的File对象。
从下表中可以看出(摘自Android开发者文档here),现在访问“下载”目录的最佳方法是使用Storage Access Framework:
通过Storage Access Framework打开文件是一个两步过程。
首先,按如下所示激发启动系统文件选择器的意图:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "*/*"
startActivityForResult(intent, OPEN_DOCUMENT_REQUEST_CODE)
第二,在活动的onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)方法中侦听结果,如下所示:
if (requestCode == OPEN_DOCUMENT_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
val uri = data?.data
if (uri == null) {
showAlertDialog("Error", "Got back a null URI")
return
}
val inputStream = contentResolver.openInputStream(uri)
if (inputStream == null) {
showAlertDialog("Error", "Failed reading the contents of the selected file")
return
}
// TODO: read the input stream as makes sense in your application
} else {
showToast("No file selected")
}
}
您可以参考Storage Access Framework开发人员指南,以类似方式查看如何创建,编辑或删除文件。