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

来源:互联网 发布:西门子840dsl编程手册 编辑:程序博客网 时间:2024/04/28 21:04

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

解决问题就是通过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以我们自定义的方式显示

这里写图片描述

这里写图片描述

0 0