在Android 11中,应用程序不再可以直接访问外部存储空间中的文件,需要使用特定的URI或媒体存储库API进行访问。以下是访问文件的代码示例:
val uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else {
Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString())
}
val cursorLoader = CursorLoader(
context,
uri,
arrayOf(MediaStore.Files.FileColumns.DISPLAY_NAME, MediaStore.Files.FileColumns.SIZE),
null,
null,
null)
val cursor = cursorLoader.loadInBackground()
在上面的示例中,我们首先使用MediaStore.Downloads.getContentUri()
方法获取文件的URI,该方法将返回MediaStore API中定义的特定URI。然后,我们使用CursorLoader
类加载URI中的数据,并在后台线程中执行。请注意,根据Android版本,我们需要使用不同的URI获取方法。