Android系统启动时会去扫描系统文件,并将系统支持的视频文件(mp4,3gp,wmv)扫描到媒体库(MediaStore)中,下面代码演示如何获得这些文件的信息:

publicstatic List<VideoInfo> sysVideoList = null;// 视频信息集合 
sysVideoList = new ArrayList<VideoInfo>();   
setVideoList();

privatevoid setVideoList() {   
// MediaStore.Video.Thumbnails.DATA:视频缩略图的文件路径 
        String[] thumbColumns = { MediaStore.Video.Thumbnails.DATA,   
                MediaStore.Video.Thumbnails.VIDEO_ID };

// MediaStore.Video.Media.DATA:视频文件路径; 
// MediaStore.Video.Media.DISPLAY_NAME : 视频文件名,如 testVideo.mp4 
// MediaStore.Video.Media.TITLE: 视频标题 : testVideo 
        String[] mediaColumns = { MediaStore.Video.Media._ID,   
                MediaStore.Video.Media.DATA, MediaStore.Video.Media.TITLE,   
                MediaStore.Video.Media.MIME_TYPE,   
                MediaStore.Video.Media.DISPLAY_NAME };

cursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,   
                mediaColumns, nullnullnull);

if(cursor==null){   
            Toast.makeText(SystemVideoChooseActivity.this, "没有找到可播放视频文件", 1).show();   
return;   
        }   
if (cursor.moveToFirst()) {   
do {   
                VideoInfo info = new VideoInfo();   
int id = cursor.getInt(cursor   
                        .getColumnIndex(MediaStore.Video.Media._ID));   
                Cursor thumbCursor = managedQuery(   
                        MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,   
                        thumbColumns, MediaStore.Video.Thumbnails.VIDEO_ID   
                                + "=" + id, nullnull);   
if (thumbCursor.moveToFirst()) {   
                    info.setThumbPath(thumbCursor.getString(thumbCursor   
                            .getColumnIndex(MediaStore.Video.Thumbnails.DATA)));   
                }   
                info.setPath(cursor.getString(cursor   
                        .getColumnIndexOrThrow(MediaStore.Video.Media.DATA)));   
                info.setTitle(cursor.getString(cursor   
                        .getColumnIndexOrThrow(MediaStore.Video.Media.TITLE)));

info.setDisplayName(cursor.getString(cursor   
                        .getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME)));  
                LogUtil.log(TAG, "DisplayName:"+info.getDisplayName());   
                info.setMimeType(cursor   
                        .getString(cursor   
                                .getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE)));

sysVideoList.add(info);   
            } while (cursor.moveToNext());   
        }   
    }

  有一点需要注意的是:系统的媒体库并不会在我们添加视频文件后自动更新,我们如何去手动扫描媒体库,或者重启系统才能从媒体库中得到更新的视频文件:

  sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"

  + Environment.getExternalStorageDirectory())));

如何扫描出Android系统媒体库中视频文件的更多相关文章

  1. Android使用OKHttp库实现视频文件的上传到服务器

    目录 1 服务器接口简介 2 Android端代码实现 2.1 xml布局文件 2.2 Activity类 2.3 Okhttp网络通信类 1 服务器接口简介 此处我使用的服务器接口是使用Flask编 ...

  2. Android media媒体库分析之:MediaProvider

    在做Android媒体应用程序时(Audio.Image.Video)需要对Android的媒体提供者(MediaProvider)做详细的分析,下面记录一下我的收获: 一.获取MediaProvid ...

  3. 在Team Foundation Server (TFS)的代码库或配置库中查找文件或代码

    [update 2017.2.11] 最新版本的TFS 2017已经增加了代码搜索功能,可以参考这个链接 https://blogs.msdn.microsoft.com/visualstudioal ...

  4. Atitit.android播放smb 网络邻居视频文件解决方案

    Atitit.android播放smb 网络邻居视频文件解决方案 Android4.4 1.1. Android4视频播放器不能直接地支持smb协议..子好先转换成个http流 1.2. ES文件浏览 ...

  5. 【原创】Git删除暂存区或版本库中的文件

    0 基础     我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的 ...

  6. 彻底删除SVN版本库中部分文件或文件夹

    例:假设SVN库路径为E:/svn/project,库中的目录结构为 QA/Trunk Software/Tags/test.exe 删除Software/Tags/目录下的test.exe文件 操作 ...

  7. c/c++标准库中的文件操作总结

    1 stdio.h是c标准库中的标准输入输出库 2 在c++中调用的方法 直接调用即可,但是最好在函数名前面加上::,以示区分类的内部函数和c标准库函数. 3 c标准输入输出库的使用 3.1 核心结构 ...

  8. Android系统应用信息中存储和缓存的计算方法

    进行例如以下操作: 设置->应用->选择一个应用->应用信息 会到达例如以下界面: 能够看到这个应用占用的磁盘空间. 先说结果,这几项会计算哪些文件(夹). 1.应用,由三项相加组成 ...

  9. TortoiseGit版本库中某个文件显示问号或叹号的问题解决办法

    这是一个怪问题,原因就是文件名大小写与版本库管理的大小写不一致. 解决办法: 1.先把文件夹中的物理文件名改为版本库浏览器中显示的文件名(版本库浏览器中的文件名不知道怎么改),改了以后这个文件图标就变 ...

随机推荐

  1. C语言的一点操作(学习笔记)

    #include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...

  2. centos6.4yum搭建lamp环境

    1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 8 ...

  3. centOS6.4 extundelete工具恢复rm -rf 删除的目录

    PS:补充下,我在fedora 19上运行的时候遇到的一个问题: [root@localhost extundelete-]# ./configure Configuring extundelete ...

  4. easyui 删除行bug

    easyui删除行,出现了bug.(经常使用这个框架的人几乎都会遇到) 我也非常纳闷,今天特地试了很久. 最后发现,如果是自己datagrid('getRows') 然后迭代出来,最后算出行号,可以成 ...

  5. Stanford机器学习---第四讲. 神经网络的表示 Neural Networks representation

    原文 http://blog.csdn.net/abcjennifer/article/details/7749309 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...

  6. 前端 解决swiper js 手动滑动一下后不能自动播放

    用户操作swiper之后,是否禁止autoplay.默认为true:停止.如果设置为false,用户操作swiper之后自动切换不会停止,每次都会重新启动autoplay.操作包括触碰,拖动,点击pa ...

  7. 工作中常用shell之ssh登陆不用输入"yes"

    ip="192.168.5.166"ssh $ip -o StrictHostKeyChecking=no           //ssh登陆不用输入"yes" ...

  8. sina第三方登录

    Sina  第三方登录 添加网站的流程如下: Sina接入主要审核点: • 1.网站可正常访问:若页面无法打开,或加载时间过长,或未建设完成的网站.或空白网站将无法通过审核: • 2.站点已部署微连接 ...

  9. Java for LeetCode 042 Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...

  10. Java for LeetCode 026 Remove Duplicates from Sorted Array

    Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...