ContentProvider是Android里一个很重要的组件,可以让我们很方便地读取系统内各种共享的数据,如联系人,音频,视频,图片等.在系统开机,或者插入SD卡后,系统会自动索引卡内的媒体文件,存入数据库,其他应用程序需要调用时可以通过ContentProvider来获取.ContentProvider的使用跟SQLite数据库非常相似,只是查询的表名改成了相应的Uri.
package com.hello;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ContentResolver cr = getContentResolver();
//ContentProvider只能由ContentResolver发送请求
Uri AUDIO_URI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//获取音频文件的URI,
//视频 MediaStore.Video.Media.EXTERNAL_CONTENT_URI
//图片MediaStore.Images.Media.EXTERNAL_CONTENT_URI
String[] columns = new String[] {MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA};
//要读的列名,这些常量可以查GOOGLE官方开发文档,TITLE是标题 DATA是路径
Cursor cursor = cr.query(AUDIO_URI, columns, MediaStore.Audio.Media.DURATION+">?", new String[]{"10000"}, null);
//跟查询SQL一样了,除了第一个参数不同外.后面根据时长过滤小于10秒的文件
while(cursor.moveToNext()){
//循环读取第一列,即文件路径,0列是标题
System.out.println(cursor.getString(1));
}
cursor.close();
}
}