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

 

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

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值