记我的WiFi音箱之一个网络在线播放及本地播放音乐器(四)

这两天因为坐火车,所以就给耽搁了点,实在不好意思,接着上次的来说开始实现本地音乐播放的实现,首先第一步要做的就是获取本地音乐的数据,如何获得呢??

解决问题就是通过ContentResolver获取本地音乐数据,下载的本地音乐会默认的在data/data/com.android.providers.media文件夹的databases中的external.db本地数据库中audio-(View)中自动添加音乐数据,如图所示

然而我们可以通过ContentResolver进行增、删、改、查等常见操作

ContentProvider向外界提供数据操作的接口:
query(Uri, String[], String, String[], String)
insert(Uri, ContentValues)
update(Uri, ContentValues, String, String[])
delete(Uri, String, String[])

这里主要讲解ContentResolve.query(Uri uri,String[] projection, String selection, String[] selectionArgs,String sortOrder)

Uri :统一资源定位符
projection:列的字段名
selection:设置条件,相当于SQL语句中的where
selectionArgs:设置的参数,与selection结合使用
sortOrder:排序的方式

具体示例如下:

MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 这为本地音乐的Uri路径
projection就是我们要取的列名,Import一个media类

SongsActivity.java

public class SongsActivity extends Activity {

    private List<MusicData> list=new ArrayList<MusicData>();
    private MediaPlayer mp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_songs);
        final ListView listview=(ListView)findViewById(R.id.listView);

        String[] projection = new String[]{MediaStore.Audio.Media._ID, 
                MediaStore.Audio.Media.TITLE, 
                MediaStore.Audio.Media.DURATION,
                MediaStore.Audio.Media.DATA,
                MediaStore.Audio.Media.ARTIST};   

       Cursor cursor=getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);


               if (cursor != null)
                {
                    cursor.moveToFirst();

                    int colNameIndex = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
                    int colTimeIndex = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
                    int colPathIndex = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
                    /**
                     * 直接截取字符串 ,吧作家名取出来
                     *ypc20150708
                     *by1656612697@qq.com 
                     */
                    //int colArtistIndex = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);


                    int fileNum = cursor.getCount();  
                    for(int counter = 0; counter < fileNum; counter++){        

                        MusicData data = new MusicData();
                        data.mMusicName = cursor.getString(colNameIndex);
                        //System.out.println(data.mMusicName);
                        data.mMusicTime = cursor.getInt(colTimeIndex);
                        //System.out.println(data.mMusicTime);
                        data.mMusicPath = cursor.getString(colPathIndex);
                        //System.out.println(data.mMusicPath);
                        data.mMusicAritst=data.mMusicName.split("-")[0];
                        //data.mMusicAritst = cursor.getString(colArtistIndex);
                        //System.out.println(data.mMusicAritst);

                        list.add(data);
                        cursor.moveToNext();
                    }

                    cursor.close();
                }


        final ListViewAdapter myadapter=new ListViewAdapter(SongsActivity.this, list);


        listview.setAdapter(myadapter);

        listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    final int position, long id) {
                // TODO Auto-generated method stub


                    new Thread(new Runnable() {

                        @Override
                        public void run() {      



                            Intent intent=new Intent(SongsActivity.this,PlayActivity.class);

                            intent.putExtra("songName",list.get(position).mMusicName);
                            intent.putExtra("playName",list.get(position).mMusicAritst);
                            intent.putExtra("url", list.get(position).mMusicPath);
                            intent.putExtra("duration", list.get(position).mMusicTime);


                            startActivity(intent);
                            //player.playUrl(url);



                        }
                    }).start();
            }
        });
    }



}   

MusicData.java

public class MusicData implements Parcelable{

    public final static String KEY_MUSIC_DATA = "MusicData";

    private final static String KEY_MUSIC_NAME = "MusicName";
    private final static String KEY_MUSIC_TIME = "MusicTime";
    private final static String KEY_MUSIC_PATH = "MusicPath";
    private final static String KEY_MUSIC_ARITST = "MusicAritst";

    public String mMusicName;   
    public int  mMusicTime; 
    public String mMusicPath;
    public String mMusicAritst;


    public MusicData()
    {
        mMusicName = "";
        mMusicTime = 0;
        mMusicPath = "";
        mMusicAritst = "";
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub

        Bundle mBundle=new Bundle(); 

        mBundle.putString(KEY_MUSIC_NAME, mMusicName);
        mBundle.putInt(KEY_MUSIC_TIME, mMusicTime);
        mBundle.putString(KEY_MUSIC_PATH, mMusicPath);
        mBundle.putString(KEY_MUSIC_ARITST, mMusicAritst);
        dest.writeBundle(mBundle);
    }

     public static final Parcelable.Creator<MusicData> CREATOR = new Parcelable.Creator<MusicData>()
     {

        @Override
        public MusicData createFromParcel(Parcel source) {
            // TODO Auto-generated method stub
            MusicData Data = new MusicData();

            Bundle mBundle=new Bundle(); 
            mBundle = source.readBundle();
            Data.mMusicName = mBundle.getString(KEY_MUSIC_NAME);
            Data.mMusicTime = mBundle.getInt(KEY_MUSIC_TIME);
            Data.mMusicPath = mBundle.getString(KEY_MUSIC_PATH);
            Data.mMusicAritst = mBundle.getString(KEY_MUSIC_ARITST);


            return Data;
        }

        @Override
        public MusicData[] newArray(int size) {
            // TODO Auto-generated method stub
            return new MusicData[size];
        }

     };
}

这样我们就得到了一个有关音乐属性例如作曲名,文件大小,专辑名等属性的一个list对象集合,下次将配合自定义的BaseAdapter将这个list以我们自定义的方式显示

这里写图片描述

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值