您的位置:首页 > 产品设计 > UI/UE

content provider 的query使用查询系统数据,获取所有音乐的title

2016-11-18 20:35 417 查看
 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);

 

 这样就结束了,很简单吧,现在让我们看一看运行效果。

 

 

 


 





大小: 79.2 KB
查看图片附件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐