首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MediaStore无法在Kotlin中列出手机内的所有视频。为什么?

MediaStore是Android系统提供的一个媒体库,用于管理设备上的音频、视频和图像文件。它提供了访问设备上媒体文件的接口和方法。

在Kotlin中无法直接列出手机内的所有视频,这是因为MediaStore的查询方法需要使用特定的URI和投影来过滤和检索媒体文件。在Kotlin中,需要使用ContentResolver来执行查询操作。

以下是一个示例代码,用于在Kotlin中列出手机内的所有视频:

代码语言:txt
复制
import android.content.ContentResolver
import android.content.Context
import android.provider.MediaStore

fun getAllVideos(context: Context): List<String> {
    val videos = mutableListOf<String>()
    val contentResolver: ContentResolver = context.contentResolver
    val projection = arrayOf(MediaStore.Video.Media.DATA)
    val cursor = contentResolver.query(
        MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
        projection,
        null,
        null,
        null
    )
    cursor?.use {
        val columnIndex = it.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)
        while (it.moveToNext()) {
            val videoPath = it.getString(columnIndex)
            videos.add(videoPath)
        }
    }
    return videos
}

这段代码使用了MediaStore.Video.Media.EXTERNAL_CONTENT_URI作为查询的URI,通过查询投影MediaStore.Video.Media.DATA来获取视频文件的路径。最后将路径添加到一个列表中并返回。

MediaStore的优势是可以方便地访问和管理设备上的媒体文件,包括音频、视频和图像。它提供了丰富的查询选项和方法,可以根据不同的条件过滤和检索媒体文件。

MediaStore的应用场景包括但不限于:

  • 多媒体应用程序:可以使用MediaStore来获取设备上的音频、视频和图像文件,并进行播放、编辑或分享等操作。
  • 相册应用程序:可以使用MediaStore来获取设备上的图像文件,并展示为相册的形式,方便用户浏览和管理照片。
  • 媒体文件管理器:可以使用MediaStore来扫描设备上的媒体文件,并提供文件管理功能,如复制、移动、删除等操作。

腾讯云提供了一系列与媒体处理相关的产品,包括云点播(Cloud VOD)、云直播(Cloud Live)、云剪(Cloud Video Editor)等。这些产品可以帮助开发者在云端进行媒体文件的存储、处理和分发,提供了丰富的功能和服务。

腾讯云云点播(Cloud VOD)是一款基于云计算和分布式存储架构的音视频点播服务,提供了视频上传、转码、截图、水印、审核、播放等功能。您可以通过以下链接了解更多关于腾讯云云点播的信息:腾讯云云点播产品介绍

请注意,以上答案仅供参考,具体的解决方案可能需要根据实际情况进行调整和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android Q 兼容那些事

后台 Activity 启动限制 首先我们说说为什么要限制后台 Activity 启动。 Android Q 之前情况如下: ?...考虑下面的几个场景: 我开车过程中使用导航地图进行导航 我使用拍照功能拍摄一个关键场景视频玩游戏,比如王者荣耀,正准备团战拿五杀时刻 …… 假设在上面的几个场景,突然后台 Activity...注意关键一个点是这个变化对所有 Android Q 上运行应用都会有影响。无论你 targetSDK 版本。 所以如果你 APP 存在这种场景情况下,你就需要做一下额外处理了。...一部分是 MediaStore 处理,另一部分是分区存储处理。 先说说 MediaStore,什么是 MediaStore 呢? ? 对于 MediaStore,Q 处理如下: ?...总结起来如下: 权限变更:没卸载情况下,自己 APP 写或者读 MediaStore 媒体文件不需要权限。读其他需要权限。卸载后读自己之前写入也需要权限。 ? ?

99610

Android 存储空间最佳实践

我们制作了一个简单图片,列出了每种用例以及其不同系统版本实践总结: 展示多个文件夹图片和视频文件 使用 query() API 查询媒体集合。...展示特定文件夹内文件和视频 使用以下方法: 使用 "请求应用权限" 一文描述最佳实践来请求 READ_EXTERNAL_STORAGE 权限。...系统会将拍摄照片存储于 MediaStore.Images 表。  与其他应用共享媒体文件 使用 insert() 方法将记录直接加入 MediaStore。...举例来说,您可以通过以下代码找到所有的 PDF、ODT 和 TXT 文件: Kotlin 代码 startActivityForResult( Intent(Intent.ACTION_OPEN_DOCUMENT...而对于那些需要互相之间分享文件所有应用,我们推荐为每一个应用使用 内容提供程序,然后将应用添加到集合时同步数据。 缓存非媒体文件 您应使用方法取决于需要缓存文件类型。

1.6K10
  • Now in Android | 11 月刊 · 2019

    为 Java 开发者准备 Kotlin 教程 Kotlin 之所以 Android 开发者如此流行,首先是因为它是一种很好语言,同样值得一提是它与 Java 语言强大互操作性。...我们一生能输入字符数量是有限为什么要在不必要语法和表达式上浪费生命? 深受困扰开发者们看来,Android 开发不断出现样板代码中最恼人就是 findViewById()。...,这种做法本质是,与布局文件关联绑定对象为视图创建变量。...与此同时,Nicole Borrelli Github 上 Storage Samples 项目中创建了 MediaStore 示例来帮助您快速上手。...我们近期连载发布 2019 Android 开发者峰会中文视频也有一个关于分区存储演讲,分享了一些最新更新和接下来 Android 版本里改变。

    63240

    targetSdk27 FileProvider 摄像和照相

    = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); // MediaStore.EXTRA_VIDEO_QUALITY 表示录制视频质量,从...app开发过程需要用到FileProvider主要有 相机拍照以及图片裁剪 调用系统应用安装器安装apk(应用升级) 2....当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上媒体文件,如audio,video,图片等,将相应信息放到定义好数据库表格。...MediaStore定义了一系列数据表格,通过ContentResolver提供查询接口,我们可以得到各种需要信息。...MediaStore.Audio获取音频信息MediaStore.Images获取图片信息 MediaStore.Video获取视频信息 为什么是错误示范呢?

    92410

    2016级移动应用开发在线测试14-MediaPlayer

    MediaStore类是android系统提供一个多媒体数据库,android多媒体信息都可以从这里提取。...日常开发,我们经常会使用MediaStore来获取手机音频、图片、视频等相关信息。...(存放图片信息),MediaStore.Video(存放视频信息)┋ 当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上多媒体文件,如声音、图片、视频等,将相应信息放入到定义好数据库...┋ 程序,并不需要关心如何去扫描手机系统文件,只要通过ContentProvider提供查询接口,我们便可以得到各种手机上多媒体信息。...┋ 获取所有外部存储卡上音乐文件信息方法: Cursor cursor = query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null

    83730

    Android 存储概览

    这将应用写权限完全限制了本应用相关目录(专属目录和本应用创建媒体文件)。...如需了解详情,请参阅有管理存储设备上所有文件。 共享文件 存储您应用打算与其它应用共享文件,包括媒体(图片、音频文件、视频)、其它类型文件。 媒体文件 使用 MediaStore API 访问。...除访问自己媒体文件外,访问其它应用媒体文件需要权限—— Android 11(API 30)或更高版本,需要 READ_EXTERNAL_STORAGE; Android 10(API 29)...,需要 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE;更低版本,访问所有文件均需要相关权限。...DataStore 基于Kotlin 协程和Kotlin.Flow以异步、一致事务方式存储数据。

    8710

    利用Kotlin协程实现简单异步加载详解

    因此实际开发我通常把耗时操作放在一个新线程(比如从网络获取数据,从SD卡读取图片等操作),但是呢androidUI更新只能在UI主线程中进行更新,因此当我们非UI线程执行某些操作时候想要更新...本篇文章呢我想给大家分享是使用KotlinCoroutine(协程)来实现耗时操作异步加载,现在有RxJava这么屌库我们为什么还要了解这个呢?...因为这是一个IO操作,如果我们UI主线程调用这段代码,将可能导致程序卡顿或产生ANR崩溃,所以我们需要在新开线程调用下边代码 val bitmap = MediaStore.Images.Media.getBitmap...第一个协程里边我们又调用了launch(UI)创建并启动了一个新协程,这儿UI并不是我们自己创建,他是KotlinAndroid平台里边预定义一个CoroutineContext,代表着UI...我们在所有实现LifecycleOwner接口扩展了一个load函数。

    2.1K20

    Android10填坑适配指南(实际经验代码)

    Application添加如下节点代码 <application android:usesCleartextTraffic="true" 第二种解决方案:res目录新建xml目录,已建跳过 ...xml目录新建一个xml文件network_security_config.xml,然后AndroidManifest.xmlApplication添加如下节点代码 android:networkSecurityConfig...7.剪切板兼容 Android Q只有当应用处于可交互情况(默认输入法本身就可交互)才能访问剪切板和监听剪切板变化,onResume回调也无法直接访问剪切板,这么做好处是避免了一些应用后台疯狂监听响应剪切板内容...8.第三方分享图片等操作,直接使用文件路径,如QQ图片分享,都需要注意,这是不可行,都只能通过MediaStore等API,拿到Uri来操作 这些是我们根据sdk升级到29时遇到实际问题而罗列出...,不是翻译AndroidQ行为变更,具体问题请根据自身实际自行解决。

    1K21

    详解Android10分区存储机制(Scoped Storage)适配教程

    简介 大家应该都有过这样体会,手机用着用着里面就充斥着各种不懂文件夹和文件。甚至是连已经删除软件文件夹还存在。 为什么会发生这样问题呢?...发布Android10时候官方明确表态: 2020年,主要平台版本将要求所有应用都使用分区存储,无论应用目标 SDK 级别是多少。因此,您应该提前确保您应用能够使用分区存储。...翻译成通俗语言,不管是使用requestLegacyExternalStorage=true方式以兼容模式运行还是降低targetSDK都无法接下来2020年Android(API 29)10更新中被豁免...应用自己创建照片、视频和音频(通过MediaStore访问)。 分区存储将影响Android10系统首次安装启动、且targetSdkVersion =29应用。...应用想要获取当前应用专有存储目录路径是可以用Context.getExternalFilesDir()方式获取。

    3.4K32

    AndroidQ分区存储权限变更及适配实现

    分区存储 Android Q引入了分区储存功能,在外部存储设备为每个应用提供了一个“隔离存储沙盒”。其他应用无法直接访问应用沙盒文件。...2、这些文件位于以下其中一个明确定义媒体集合: 照片:存储 MediaStore.Images 视频:存储 MediaStore.Video 。...卸载后保留应用文件 文件存储应用私有目录下,卸载该应用后,系统会清除该应用目录所有文件(有点类似Android/data/xxx目录)。...特定文件访问适配 分享媒体文件 如果你应用有分享照片和视频需求。请使用 MediaStore存储需要共享文件。... MediaStore 对象调用setRequireOriginal(),调用时传入照片 URI。

    1.5K31

    定义和测量延迟

    其他一些内容提供商希望开发具有交互功能个人广播服务,并且在这种情形下一般视频信号30秒延迟无法接受。此外,那些想要开发同步第二屏幕,社交会议等应用程序的人需要在更精细级别上控制流式传输延迟。...延迟方面,通常会有三个级别,有两个边界划分,高边界和低边界,表一列出了不同级别延迟划分。...较高层面上,以下方式可以减少延迟: 优化视频编码传输管道 根据要求选择合适segment持续时间 构建适当架构 优化(或替换)视频播放器 怎样测量延迟 延迟优化过程第一步是知道传输链每个部分在总延迟占比...捕获延迟(capture latency) 可以视频编码参数预处理部分激活AWS Elemental Live上时间码刻录; 需要为编码阶梯每个比特率激活它。 ? 图2....示例事件视频编码参数 我们例子,我们平板电脑时间为13:27:19.32,VLC时间为13:27:16.75。 ? 图6.

    1.8K30

    Android 11适配攻略

    照片、视频、音频这类媒体文件。使用MediaStore 访问,无法直接使用File。访问其他应用媒体文件时需要READ_EXTERNAL_STORAGE权限。 其它目录。... Android 11 上,应用无法再访问外部存储任何其他应用专用应用特定目录文件。...其它细节详见以下文档: Google介绍Scoped Storage视频:https://www.bilibili.com/video/av77198618 Android 11 存储更新...之前接入微信支付时候,文档就有提示Android 11 第三方应用无法拉起应用适配,适配方案为主工程AndroidManifest.xml 增加 标签。...AsyncTask AsyncTaskAndroid 11已经不建议使用,建议迁移至Kotlin协程。 此外 Handler未指定 Looper 构造方法也已不建议使用。

    3.9K11

    安卓手机如何打开.pdf(1)文件_手机pdf格式怎么使用查找功能

    PDF和纸质发票,刚开始使用文件管理器搜索手机内PDF文件,4.4系统上面打开文件管理器可以过滤掉非.pdf格式文件,6.0及以上系统没有过滤掉,用是intent打开url方式打开文件管理器...,返回结果根据URL转化为文件,然后上传。...,但是小米手机上有个最近文件记录打开时返回报错,由于时间和项目着急上线,所以没有适配6.0及以上系统手机,采用了第2种方式—-通过ContentProvider搜索手机内.pdf格式文件 3.通过...ContentProvider搜索pdf格式文件核心代码如下: 博主搜索是.pdf格式文件,如果想搜索其他格式文件方法类似,改后缀名比如.txt,.doc,.png等等,小伙伴们可以自行尝试下,看看效果如何...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    3.4K20

    相册适配 Android 11 绕那些弯路

    定位问题 首先,我相册Demo把 targetSdk 设置到 30, 然后 Android 10 测试机上运行,发现缩略图完美的显示了出来。...正当我兴奋地觉得马上要完工时候,点了一下视频预览 ......对于这些情况,Android 提供了一种名为“所有文件访问权限”特殊应用访问权限 这段话里说某些应用,比如「杀毒应用」「文件浏览器」,需要扫描 sdcard 所有文件,如果没有权限就没法正常工作(...v=RjyYCUW-9tY&feature=youtu.be image.png 视频对我们有用信息大概是这样, Android 10 时候,很多开发者都反应了类似的问题,使用一些 native...我适配过程也跟了一下 glide 加载缩略图流程,也搞清了一些问题,顺便分享给大家 1. 为什么向 Glide 传 content-uri 不会出错,传 file path 会报错?

    1.7K30

    AndroidQ 沙箱适配多媒体文件(小结)

    综述 所有内容访问变化见下图: ? 外部媒体文件扫描,读取和写入 最容易被踩坑应该是,对外部媒体文件,照片,视频,图片读取或写入。 扫描 首先是扫描。...扫描依然是使用 query MediaStore 方式。一句话介绍 MediaStoreMediaStore 就是Android系统一个多媒体数据库。...} // 注意,DATA 数据 Android Q 以前代表了文件路径,但在 Android Q上该路径无法被访问,因此没有意义。...(MediaStore.Video.Media.MIME_TYPE); // ID 是 Android Q 上读取文件关键字段 ixId = mCursor.getColumnIndexOrThrow...因此,目前对于 MediaStore 扫描出来文件可能不存在情况,没有直接好方法可以解决过滤。

    95220

    【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )

    10 以前存储机制 ---- Android 10 之前文件系统 , 内存分为两块 , 应用私有目录 , 和 共享存储空间 ; 私有目录 : 只能保存本应用数据 , 其它应用无法读写该目录数据...---- Android 10 及以后文件系统 : 私有目录 : 与之前保持一致 , 只能保存本应用数据 , 其它应用无法读写该目录数据 , 应用卸载时 , 该目录自动删除 ; 共享存储空间...存储过渡方案 ---- Android 10 版本是过渡版本 , 该版本可以选择启用分区存储 , 也可以选择不用 , 清单文件 application 节点设置 requestLegacyExternalStorage..., 只有开启分区存储时 , 才将所有的文件都保存在该数据库表 ; 生成文件索引 : 老版本文件系统 , 只有将文件放在 Pictures , Movies , Music , Document...等目录下时 , 才生文件索引放在数据库 , SD 卡其它位置创建文件 , 不会生成文件索引 ; 新版本分区存储 , 上述数据表管理所有 SD 卡上文件 , 所有的文件和目录都会显示在上述数据库

    2.9K40

    拖不得了,Android11真的来了,最全适配实践指南奉上

    但是android10时候,Google还是为开发者考虑,留了一。...以下是关于分区存储会遇到所有情况,给大家罗列出来了,先上代码: fun saveFile() { if (checkPermission()) { //...(intent) //无法唤起第三方相机了,只能唤起系统相机 这点对普通相机应用还是有点打击,官方给建议是如果要使用特定第三方相机应用来代表其捕获图片或视频,可以通过为intent设置软件包名称或组件来使这些...元数据文件声明“无障碍”按钮使用情况 “从 Android 11 开始,您无障碍服务无法在运行时声明与系统“无障碍”按钮关联。...android:foregroundServiceType="location|camera|microphone" /> 适配Android11机 此模块修改内容针对所有项目

    7K340266

    Android 10适配要点,作用域存储

    第一,存储SD卡文件不会计入到应用程序占用空间当中,也就是说即使你SD卡存放了1G文件,你应用程序设置显示占用空间仍然可能只有几十K。...另外,存储SD卡上文件属于公有文件,所有的应用程序都有权随意访问,这也对数据安全性带来了很大挑战。 为了解决上述问题,GoogleAndroid 10当中加入了作用域存储功能。...注意,虽然本篇文章我是以图片来举例,但是获取音频、视频用法也是基本相同。...不同于过去可以直接获取到相册图片绝对路径,作用域存储当中,我们只能借助MediaStore API获取到图片Uri,示例代码如下: val cursor = contentResolver.query...其实将文件下载到Download目录,和向相册添加一张图片过程是差不多,Android 10MediaStore中新增了一种Downloads集合,专门用于执行文件下载操作。

    2.2K10

    android MediaRecorder实现录屏时带录音功能

    下面说说android事把 最近是不是也会遇到需求需要用到录屏录音功能,最近也是遇到 现在整理完记录一下 首先呢,录音录屏需要权限 先贴一个动态权限类 public class TalAllow...插入个链接 (上面那个类code码为100) 判断是否有权限 下面重点来了 首先说明一下这个录屏和录音是服务里面做,所以呢贴一个服务类 这个代码绝对有质量 做了很多处理,下面一行一行解读把 /...TalFileUtils.getSDFreeMemory() / (1024 * 1024) < 4; if (enough) { //空间不足,停止录屏 str = "空间不足"; //停止录屏时 通过接口回调一个信息,是因为什么停止录屏..., videoTime * 1000); // 时长 values.put(MediaStore.Video.Media.WIDTH, videoWidth); // 视频宽 values.put(MediaStore.Video.Media.HEIGHT..., videoHeight); // 视频高 values.put(MediaStore.Video.Media.SIZE, size); // 视频大小; values.put(MediaStore.Video.Media.DATE_TAKEN

    2.3K20
    领券