android音乐播放器开发教程
1、关于音乐列表的读取,不同的音乐播放器都会有不同的方案,有的是有多重方案并用。例如说,全盘扫描音乐格式文件等。首先我封装了一个Audio类来存储读取的音频信息:publicclassMediaUtils{publicstaticfinalString[]AUDIO_KEYS=newString[]{MediaStore.Audio.Media._ID,MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.TITLE_KEY,MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media.ARTIST_ID,MediaStore.Audio.Media.ARTIST_KEY,MediaStore.Audio.Media.COMPOSER,MediaStore.Audio.Media.ALBUM,MediaStore.Audio.Media.ALBUM_ID,MediaStore.Audio.Media.ALBUM_KEY,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Audio.Media.DURATION,MediaStore.Audio.Media.SIZE,MediaStore.Audio.Media.YEAR,MediaStore.Audio.Media.TRACK,MediaStore.Audio.Media.IS_RINGTONE,MediaStore.Audio.Media.IS_PODCAST,MediaStore.Audio.Media.IS_ALARM,MediaStore.Audio.Media.IS_MUSIC,MediaStore.Audio.Media.IS_NOTIFICATION,MediaStore.Audio.Media.MIME_TYPE,MediaStore.Audio.Media.DATA};publicstaticList<Audio>getAudioList(Contextcontext){List<Audio>audioList=newArrayList<Audio>();ContentResolverresolver=context.getContentResolver();Cursorcursor=resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,AUDIO_KEYS,null,null,null);for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){Bundlebundle=newBundle();for(inti=0;i<AUDIO_KEYS.length;i++){finalStringkey=AUDIO_KEYS[i];finalintcolumnIndex=cursor.getColumnIndex(key);finalinttype=cursor.getType(columnIndex);switch(type){caseCursor.FIELD_TYPE_BLOB:break;caseCursor.FIELD_TYPE_FLOAT:floatfloatValue=cursor.getFloat(columnIndex);bundle.putFloat(key,floatValue);break;caseCursor.FIELD_TYPE_INTEGER:intintValue=cursor.getInt(columnIndex);bundle.putInt(key,intValue);break;caseCursor.FIELD_TYPE_NULL:break;caseCursor.FIELD_TYPE_STRING:StringstrValue=cursor.getString(columnIndex);bundle.putString(key,strValue);break;
2、以上类来封装音乐媒体信息,一些变量看名字也能看出来是什么,例如说title,蟠校盯昂duration此类,无非就是疼绘绣筏歌曲名称,时长之类的信息,有些变量名字单词认识,但是并不知道干什么用,其实我也不知道是什么信息,虽然打印出来过,但是并不懂到底哪里能用到,反正一股脑都读出来了先,以后再打印输出看看都是些什么。 returnisMusic;}publicbooleanisNotification(){returnisNotification;}publicStringgetTitle(){returnmTitle;}publicStringgetTitleKey(){returnmTitleKey;}publicStringgetArtist(){returnmArtist;}publicintgetArtistId(){returnmArtistId;}publicStringgetArtistKey(){returnmArtistKey;}publicStringgetComposer(){returnmComposer;}publicStringgetAlbum(){returnmAlbum;}publicintgetAlbumId(){returnmAlbumId;}publicStringgetAlbumKey(){returnmAlbumKey;}publicStringgetDisplayName(){returnmDisplayName;}publicintgetYear(){returnmYear;
3、如此返回一个Audio的List,现在我们可以用这个List做一个列表展示。
4、Android本身有媒体库,可以读取本地媒体库的数据,来快速获知设备上的音乐。
5、在以往的Android开发中,遇到列表,都要用到RecyclerView,这是谷歌所提倡的用来代替ListView的控件。相比ListView要更灵活,自由度更大,比如在做表格分割线的时候,就比Listview好用多了。但是在使用RecyclerView的Adapter的时候,必须返回一个ViewHolder,类似于ListView的BaseAdapter中的getView方法。而且要根据不同的ViewType返回不同的ViewHolder,才能在一个RecyclerView中显示几个样式的数据。