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. Oracle 11g客户端在Linux系统上的配置步骤详解

    Oracle 11g客户端在Linux系统上的配置步骤详解 2011-07-26 10:47 newhappy2008 CSDN博客 字号:T | T 本文我们主要介绍了Oracle 11g客户端在L ...

  2. C++中构造函数详解及显式调用构造函数

    C++构造函数详解及显式调用构造函数                                         c++类的构造函数详解                        一. 构造函 ...

  3. git常见问题解决办法

    1,git status乱码 git config --global core.quotepath false 执行完后再使用时,就显示正常了

  4. 汉诺塔问题II(模拟)

    汉诺塔问题II Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1556  Solved: 720 Description 汉诺塔(又称河内塔)问题是源于 ...

  5. bootstrap之双日历时间段选择控件示例—daterangepicker(汉化版)

    效果图: 参考代码: <link href="/public/static/common/css/daterangepicker.min.css?ver=0.6" rel=& ...

  6. Linux下使用fdisk扩展分区容量

    导读 我们管理的服务器可能会随着业务量的不断增长造成磁盘空间不足的情况,比如:共享文件服务器硬盘空间不足,在这个时候我们就需要增加磁盘空间,来满足线上的业务:又或者我们在使用linux的过程中, 有时 ...

  7. 栈应用hanoi

    /* 课本p54页*/ #include<stdio.h> #include <iostream> using namespace std; void move(int n, ...

  8. python 的编码问题

    老是碰到这个问题,决定好好给整理一番思路. 翻阅资料和实践证明,以下论述为真理: 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将 ...

  9. Linux&shell之高级Shell脚本编程-创建函数

    写在前面:案例.常用.归类.解释说明.(By Jim) 使用函数 #!/bin/bash # testing the script function myfun { echo "This i ...

  10. 使用ajax解决ie缓存问题

    1.在XMLHttpRequest/发送的请求之前 加上 XMLHttpRequest.setRequestHeader("If-Modified-Since","0&q ...