当前位置: 首页 > 知识库问答 >
问题:

在Android 11上构建文件资源管理器

白志勇
2023-03-14

因此,正如他们在这里所说:

在清单中声明MANAGE_EXTERNAL_STORAGE权限。

使用ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION意图操作将用户引导到系统设置页面,在该页面中,用户可以为应用程序启用以下选项

val projectionDownloads = arrayOf(
    MediaStore.Downloads._ID,
    MediaStore.Downloads.DISPLAY_NAME,
  )
val selectionDownloads = ""
val selectionArgsDownloads = emptyArray<String>()
val sortOrderDownloads = "${MediaStore.Downloads.DISPLAY_NAME} ASC"

context.applicationContext.contentResolver.query(
    MediaStore.Downloads.EXTERNAL_CONTENT_URI,
    projectionDownloads,
    selectionDownloads,
    selectionArgsDownloads,
    sortOrderDownloads
  )?.use { cursor ->
        Log.i("SeeMedia", "we got cursor! $cursor")
        val idColumn = cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)
        val nameColumn = cursor.getColumnIndex(MediaStore.Files.FileColumns.DISPLAY_NAME)

        while (cursor.moveToNext()) { //Here return false
            Log.i("SeeMedia", "Move to next!")
            val id = cursor.getLong(idColumn)
            val name = cursor.getString(nameColumn)
            Log.i("SeeMedia", "ID = $id AND NAME= $name")
        }
    }

我的应用程序包含两个权限:

问题3:如果我想查询其他未知的文件/目录,例如html" target="_blank">下载中有另一个文件夹等等,该怎么办?“downloads/folder1/folder2”我想我应该用mediastore.files,对吧?那么访问这些文件的URI是怎样的呢?

编辑1:SDK 29=Android 10

SDK 30=Android 11

    null

如果我做错了什么,请告诉我,因为现在我的脑子里充满了很多杂乱无章的东西,因为我看了很多视频、文档和问题,我只是试图理解一些关键点。

这里有一个简单的代码,我最终可以用MediaStore查询根“/”,以防您想看到它,但不知道如何查询其他路径并检索它们的文件:

val projection = arrayOf(
    MediaStore.Files.FileColumns.DISPLAY_NAME
  )
context.applicationContext.contentResolver.query(
    MediaStore.Files.getContentUri("external"),
    projection,
    null,
    null,
    null
  )?.use { cursor ->
        Log.i("SeeMedia", "we got cursor! $cursor")
        val nameColumn = 
        cursor.getColumnIndex(MediaStore.Files.FileColumns.DISPLAY_NAME)
        while(cursor.moveToNext()){
            Log.i("SeeMedia", "Move to next!")
            val name = cursor.getString(nameColumn)
            Log.i("SeeMedia", "Name = $name")
        }
    }

共有1个答案

宰父君昊
2023-03-14

回答你的一些问题:

我是否需要其他权限来读取文件?

不,正如这里所述,您已经获得了所有可能的与文件相关的权限。

 类似资料:
  • 问题内容: 在Python中,如何跳到Windows资源管理器中的文件?我找到了跳到文件夹的解决方案: 但是我没有文件的解决方案。 问题答案: 来自Geoff Chappell的 Windows资源管理器命令行

  • 我开始做一些类似资源类的东西,在那里我可以为我的应用程序保存我所有的文件,像图像和声音,但它变得非常混乱,所有的东西都在应用程序的乞求中加载。 这是包含所有内容的类:https://sourceb.in/s8rjgqqgss(头文件)https://sourceb.in/cjiq78hdov(cpp文件的一部分) 我很抱歉把它贴在不同的网站上,但正如你所看到的,它真的很乱,我也不知道如何让它变得更

  • 这是我的HTML: 一个按钮用于打开文件资源管理器。这是我的Java代码: 我无法打开文件资源管理器,因此无法传递文件路径。

  • 我正在使用Drowpizard 0.7.1,但也许我会很快升级到0.8.4。 是否有人知道如何向dropwizard添加管理员资源,如下面示例中的操作菜单所示?

  • 我正在尝试创建许多文件,作为用户的一个功能。例如,我可能会编写一个应用程序,为他们过去几周听的每首歌创建一个文件(例如,一个带有歌词的文本文件)。我不能让用户为我生成的每个文件选择目录和文件名,这将花费他们数小时的时间。用户应该可以从其他应用程序访问这些文档。 在Android11中,存储访问框架似乎没有什么用处。我注意到最初有两个有趣的选项: 创建一个新文件(该文件创建启动用户与之交互的活动,以

  • 在Windows上使用VSCode时,我可以在文件资源管理器中导航,并在聚焦的文件上点击< kbd>Enter,文件将在编辑器中打开。但是,在我的Mac上,当我这样做时,VSCode将打开重命名输入,如下所示: 我不知道它为什么这样做。即使在其他文本编辑器(例如Atom)中,默认行为也是在回车上打开文件。有没有办法更改此行为,以便文件在回车上打开?到目前为止,我找到的唯一解决方法是CTRL回车,它