记我的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以我们自定义的方式显示
- 记我的WiFi音箱之一个网络在线播放及本地播放音乐器(四)
- 记我的WiFi音箱之一个网络在线播放及本地播放音乐器(序)
- 记我的WiFi音箱之一个网络在线播放及本地播放音乐器(一)
- 记我的WiFi音箱之一个网络在线播放及本地播放音乐器(二)
- 记我的WiFi音箱之一个网络在线播放及本地播放音乐器(三)
- 记我的WiFi音箱之一个网络在线播放及本地播放音乐器(五)
- Android本地及网络音乐播放器-网络音乐的试听和下载(四)
- WR720N上实现基于opwnwrt的Upnp音乐播放器(DLNA-wifi音箱移植)
- WR720N上实现基于opwnwrt的Upnp音乐播放器(DLNA-wifi音箱移植)
- Android开发本地及网络Mp3音乐播放器(四)实现音乐播放
- Android本地及网络音乐播放器-网络音乐的搜索(三)
- Android本地及网络音乐播放器-播放本地音乐(一)
- 基于android的网络音乐播放器-播放音乐及收藏音乐的效果展示(四)
- Android本地及网络音乐播放器-播放界面显示(二)
- 我的第一个音乐播放器
- Android开发本地及网络Mp3音乐播放器(六)实现独立音乐播放界面
- 我的音乐(Musicoco)- 本地音乐播放器开发总结
- Cone 音箱:会思考的音乐播放器
- wget cookies 欺骗
- Netty官方指南: User guide for 4.x
- hpu 1897 CZY找句子
- 英语学习
- curl
- 记我的WiFi音箱之一个网络在线播放及本地播放音乐器(四)
- [Tips] C++ plugin to QML
- 几道周赛题目(bfs,dfs,kmp,快速幂运算,并查集)
- html中含提示文字的输入框
- 202Happy Number
- 周赛2-F
- MySQL 中间表的使用语法记录
- Linux网卡数据包的接收
- 单链表操作