Content Provider 相当于数据的接口,通过它可以 把程序内部的数据向其他应用公开,这样的话,
其他应用程序就可以通过Context.getContentResolver方法获得ContentResolver对象,
并使用ContentResolver.insert,ContentResolver.delete,ContentResolver.update,ContentResolver.query4个方法对程序内部的数据进行增删改查。
这里只用一个简单实例表明如何用content provider 的query获取所有音乐的title
先写一个类 MusicLoader
package com.life.testmusic;
import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore.Audio.Media;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class MusicLoader {
private static final String TAG = "com.example.nature.MusicLoader";
private static List<MusicInfo> musicList = new ArrayList<MusicInfo>();
private static MusicLoader musicLoader;
private static ContentResolver contentResolver;
//单例模式
public static MusicLoader instance(ContentResolver pContentResolver) {
if (musicLoader == null) {
//pContentResolver由activity的getContentResolver()方法传过来,
contentResolver = pContentResolver;
musicLoader = new MusicLoader();
}
return musicLoader;
}
@SuppressLint("LongLogTag")
private MusicLoader() {
//query()返回Cursor 对象,类似与数据库的Cursor ,通过它来查询数据
//第一个参数是一个Uri,对应了获取哪种信息,这里是获取音乐媒体信息,其余暂时都设置为null
Cursor cursor = contentResolver.query(Media.EXTERNAL_CONTENT_URI, null, null, null, null);
if (cursor == null) {
Log.i(TAG, "Music Loader cursor == null.");
//光标移动到第一行
} else if (!cursor.moveToFirst()) {
Log.v(TAG, "Music Loader cursor.moveToFirst() returns false.");
} else {
//获取到title列的索引displayNameCol
int displayNameCol = cursor.getColumnIndex(Media.TITLE);
do {
//传入displayNameCol 拿出title
String title = cursor.getString(displayNameCol);
MusicInfo musicInfo = new MusicInfo();
musicInfo.setTitle(title );
//加入list
musicList.add(musicInfo );
//移动到下一行继续获取下一首歌的信息
} while (cursor.moveToNext());
//关闭cursor.
cursor.close();
}
}
public List<MusicInfo> getMusicList() {
return musicList;
}
//内部类,用于存储歌曲信息
public static class MusicInfo {
private long id;
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
这个类写好之后,就要在activity里面来使用它呈现数据了。
//获取单例,通过单例来getMusicList();,
//其中参数是getContentResolver()获取到的ContentResolver对象
musicList=MusicLoader.instance(getContentResolver()).getMusicList();
String name="";
for (int i=0;i<musicList.size();i++)
name+=musicList.get(i).getTitle()+"\n";
//textview, tvSongs用于呈现歌曲title
tvSongs.setText(name);
这样就结束了,很简单吧,现在让我们看一看运行效果。