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

如何访问AndroidQ中的所有图片?

扈沛
2023-03-14

我想做一个像相册一样的lib改编成Android Q

由于范围存储,不推荐使用mediastore.images.imageColumns.data

我们不能直接通过/storage/emulated/0/dcim/xxx.png这样的路径读取文件

mediastore.images.imageColumns没有URI之类的值,因此我无法通过ContentProvider获取图片。

我们可以通过这种方式只打开一个图片(下面的代码),并且在回调中接收到一个URI;

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);

// Filter to only show results that can be "opened", such as a
// file (as opposed to a list of contacts or timezones).
intent.addCategory(Intent.CATEGORY_OPENABLE);
// Filter to show only text files.
intent.setType("image/*");

但是我想访问所有的图片,那么,我如何扫描所有的图片在Android Q?

共有1个答案

史烈
2023-03-14

这就是我总是如何检索所有图像而不需要mediastore.mediaColumns.data常量

val externalUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI

val cursor = context.contentResolver
                .query(
                    externalUri,
                    arrayOf(MediaStore.MediaColumns._ID, MediaStore.MediaColumns.DATE_MODIFIED),
                    null,
                    null,
                    "${MediaStore.MediaColumns.DATE_MODIFIED} DESC"
                )

if(cursor != null){
    while(cursor.moveToNext()){
        val id = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns._ID))
        val uri = ContentUris.withAppendedId(externalUri, id.toLong())

        //do whatever you need with the uri
    }
}

cursor?.close()

它是用Kotlin编写的,但如果转换成java应该不难的话

 类似资料:
  • 听说Android Q推出了一个名为“范围存储”的新安全功能,限制外部存储中的访问文件。我的问题是我必须从应用程序中保存一个文本文档到用户指定的位置。这是否需要任何类型的权限,而不是Q设备中的和?

  • 问题内容: 我正在尝试访问所有显示的URL,但它首先访问的不是全部 Google搜索网址https://www.google.co.uk/search?q=Rashmi&oq=Rashmi&aqs=chrome..69i57j69i60l3.6857j0j1&sourceid=chrome&ie=UTF-8#q=Rashmi+Custom+Tailors 问题答案: 您的问题是使用以下方法导致的

  • 问题内容: 我有一个像这样的json块: 我如何获取此令牌包含的所有关键项目。例如,从上面的代码中,我希望具有“ ADRESS_LOCATION”,“ LOCATION”,“ FLOOR_NUMBER”和“ self”。 问题答案: 您可以将转换为,然后使用方法获取对象属性的列表。从那里,您可以轻松获得名称。 像这样: 输出:

  • 问题内容: 我有一个main.go文件,其中有: 在我要声明,可在我的应用程序的任何地方访问的全局变量。有可能吗?我试过了: 但是,即使在同一包中,我也无法访问变量。 问题答案: 在顶层声明变量-在任何函数之外: 由于变量的名称以大写字母开头,因此在导入定义变量的包并使用包名对其进行限定时,变量将在当前包中通过其名称可用-在任何其他包中都可用。 这是另一个示例(同样在Go游乐场中:https :

  • 从Lollipop开始,应用程序可以访问真正的SD卡(在Kitkat上无法访问,之前的版本还没有正式支持),正如我在这里询问的那样。 因为现在已经很少看到支持SD卡的Lollipop设备了,因为模拟器没有这个功能(或者真的有吗?)为了模拟SD卡支持,我花了很长时间来测试它。 不管怎样,似乎不是使用普通的文件类来访问SD卡(一旦获得了权限),而是需要使用URI,使用DocumentFile。 这限制

  • 问题内容: 我正在尝试在包api中的蓝图内访问访问应用程序配置。我在初始化的蓝图其在使用。 init.py authorisation.py 我收到RuntimeError:在应用程序上下文之外工作 我知道为什么会这样,但是访问这些配置设置的正确方法是什么? ----更新----暂时,我已经做到了。 问题答案: 你可以用来代替蓝图中的应用程序。 注:该代理仅在的情况下可要求。