获取系统的图片,音频和视频文件

Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,通过Content Provider的方式提供给用户。当设备开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上的媒体文件,如audio,video,图片等,将相应的信息放到定义好的数据库表格中。在这个程序中,我们不需要关心如何去扫描手机中的文件,只要了解如何查询和使用这些信息就可以了。

        MediaStore中定义了一系列的数据表格,通过ContentResolver提供的查询接口,我们可以得到各种需要的信息。通过以下两个URI可以扫描设备外部和内部的媒体文件


我们可以获取以下媒体文件的以下信息


先了解一下ContentResolver的查询接口:
Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);

Uri:指明要查询的数据库名称加上表的名称,从MediaStore中我们可以找到相应信息的参数,具体请参考开发文档。
Projection: 指定查询数据库表中的哪几列,返回的游标中将包括相应的信息。可以定义字符串数组,null则返回所有信息。
selection: 指定查询条件,可以设置为null
selectionArgs:参数selection里有 ?这个符号是,这里可以以实际值代替这个问号。如果selection这个没有?的话,那么这个String数组可以为null。
SortOrder:指定查询结果的排列顺序,如果为null就使用默认排序

下面是扫描设备上的音频、视频和图片

[java]  view plain copy
  1. package com.example.scansdfile;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.os.Bundle;  
  6. import android.provider.MediaStore;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10. import android.app.Activity;  
  11. import android.database.Cursor;  
  12.   
  13. /** 
  14.  * 扫描设备上的文件,可以是图片、视频、音频、文本 
  15.  *  
  16.  * @author Administrator 
  17.  *  
  18.  */  
  19. public class MainActivity extends Activity {  
  20.   
  21.     private Button imageBtn = null;  
  22.     private Button videoBtn = null;  
  23.     private Button audioBtn = null;  
  24.   
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.main);  
  29.         InitBtn();  
  30.         SetListener();  
  31.     }  
  32.   
  33.     private void InitBtn() {  
  34.         imageBtn = (Button) findViewById(R.id.imageBtn);  
  35.         videoBtn = (Button) findViewById(R.id.videoBtn);  
  36.         audioBtn = (Button) findViewById(R.id.audioBtn);  
  37.     }  
  38.   
  39.     private void SetListener() {  
  40.         imageBtn.setOnClickListener(new OnClickListener() {  
  41.   
  42.             @Override  
  43.             public void onClick(View v) {  
  44.                 // TODO Auto-generated method stub  
  45.                 ArrayList<String> listImage = new ArrayList<String>();  
  46.                 // 扫描外部设备中的照片  
  47.                 String str[] = { MediaStore.Images.Media._ID,  
  48.                         MediaStore.Images.Media.DISPLAY_NAME,  
  49.                         MediaStore.Images.Media.DATA};  
  50.                 Cursor cursor = MainActivity.this.getContentResolver().query(  
  51.                         MediaStore.Images.Media.EXTERNAL_CONTENT_URI, str,  
  52.                         nullnullnull);  
  53.   
  54.                 while (cursor.moveToNext()) {  
  55.                     System.out.println(cursor.getString(0)); // 图片ID  
  56.                     System.out.println(cursor.getString(1)); // 图片文件名  
  57.                     System.out.println(cursor.getString(2)); // 图片绝对路径  
  58.                     listImage.add(cursor.getString(2));  
  59.                 }  
  60.             }  
  61.         });  
  62.   
  63.         videoBtn.setOnClickListener(new OnClickListener() {  
  64.   
  65.             @Override  
  66.             public void onClick(View v) {  
  67.                 // TODO Auto-generated method stub  
  68.                 ArrayList<String> listVideo = new ArrayList<String>();  
  69.                 // 扫描外部设备中的视频  
  70.                 String str[] = { MediaStore.Video.Media._ID,  
  71.                         MediaStore.Video.Media.DISPLAY_NAME,  
  72.                         MediaStore.Video.Media.DATA};  
  73.                 Cursor cursor = MainActivity.this.getContentResolver().query(  
  74.                         MediaStore.Video.Media.EXTERNAL_CONTENT_URI, str, null,  
  75.                         nullnull);  
  76.   
  77.                 while (cursor.moveToNext()) {  
  78.                     System.out.println(cursor.getString(0)); // 视频ID  
  79.                     System.out.println(cursor.getString(1)); // 视频文件名  
  80.                     System.out.println(cursor.getString(2)); // 视频绝对路径  
  81.                     listVideo.add(cursor.getString(2));  
  82.                 }  
  83.             }  
  84.         });  
  85.   
  86.         audioBtn.setOnClickListener(new OnClickListener() {  
  87.   
  88.             @Override  
  89.             public void onClick(View v) {  
  90.                 // TODO Auto-generated method stub  
  91.                 ArrayList<String> listAudio = new ArrayList<String>();  
  92.                 // 扫描外部设备中的音频  
  93.                 String str[] = { MediaStore.Audio.Media._ID,  
  94.                         MediaStore.Audio.Media.DISPLAY_NAME,  
  95.                         MediaStore.Audio.Media.DATA,  
  96.                         MediaStore.Audio.Media.SIZE};  
  97.                 Cursor cursor = MainActivity.this.getContentResolver().query(  
  98.                         MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, str, null,  
  99.                         nullnull);  
  100.                 System.out.println("count = " + cursor.getCount());  //获取总共有多少个条目  
  101.                 while (cursor.moveToNext()) {  
  102.                     //每个条目有多少项信息  
  103.                     System.out.println("ColumnCount = " + cursor.getColumnCount());  
  104.                     System.out.println(cursor.getString(0)); // 音频ID  
  105.                     System.out.println(cursor.getString(1)); // 音频文件名  
  106.                     System.out.println(cursor.getString(2)); // 音频绝对路径  
  107.                     System.out.println(cursor.getString(3)); // 音频的大小 字节  
  108.                     listAudio.add(cursor.getString(2));  
  109.                 }  
  110.             }  
  111.         });  
  112.     }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值