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



 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 musicList = new ArrayList();

    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 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

 

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

 

 

 content provider 的query使用查询系统数据,获取所有音乐的title_第1张图片

 

你可能感兴趣的:(android)