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);
这样就结束了,很简单吧,现在让我们看一看运行效果。