Android有其自带的播放器,我们可以使用隐式Intent来调用它:通过传入一个Action为ACTION_VIEW同时,指定Data为所要播放的Audio的Uri对象,并指定格式信息,则我们就可以调用播放器来播放该Audio了。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri, MimeType);
startActivity(intent);
本文我们需要访问MediaStore,来获取所有Audio信息,我们首先将获取所有的Album,然后当用户点击某个Album时,显示该Album下所有的Audio,然后当用户点击某个Audio时,调用系统自带的播放器播放该Audio。
packagedemo.camera; importjava.io.File; importorg.apache.http.client.utils.URIUtils; importandroid.app.Activity; importandroid.app.ListActivity; importandroid.content.Intent; importandroid.database.Cursor; .Uri; importandroid.os.Bundle; importandroid.os.Environment; importandroid.provider.MediaStore; importandroid.provider.MediaStore.Audio; importandroid.provider.MediaStore.Audio.Albums; importandroid.view.View; importandroid.widget.Button; importandroid.widget.CursorAdapter; importandroid.widget.ListView; importandroid.widget.SimpleCursorAdapter; /** *本示例演示如何利用Android自带的Music来播放程序 *和Camera一样,可以通过Intent来启动它。 *我们需要指定一个ACTION_VIEW的Action *同时一个Uri来指定我们要播放文件的路径 *最后指定一个MIME类型,指定所要播放的文件类型 *每种文件类型对应的都有一个MIME,他一般是类似于audio/mp3格式 *前部分是一个较大的类型,后面是更具体的类型 * *同样的,对于Audio类型的多媒体,系统存储在MediaStore.Audio中 *包括Media,Album,Genre等信息体 * *本文将以列表的形式列出所有的Album信息,供用户选择 *当用户选择某个Album时,系统将打开这个ALbum下的所有Audio *@authorAdministrator * */publicclassAudioDemoextendsListActivity{ privateButtonbtnMusic; privatebooleanisAlbum=true;//true时,说明当前列表的内容是Album,false时,说明是Media privateCursorcursor;//游标对象, publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); this.setContentView(R.layout.audio); btnMusic=(Button)this.findViewById(R.id.btn_music); btnMusic.setOnClickListener(newView.OnClickListener(){ @OverridepublicvoidonClick(Viewv){ //Intentintent=newIntent(Intent.ACTION_VIEW); ////这里我们先从SDCard文件中获取指定文件的URi //Filesdcard=Environment.getExternalStorageDirectory();//这个是获取SDCard路径 //FileaudioFile=newFile(sdcard.getPath()+"/music/tt.mp3"); ////然后需要获取该文件的Uri //UriaudioUri=Uri.fromFile(audioFile); ////然后指定Uri和MIME //intent.setDataAndType(audioUri,"audio/mp3"); //startActivity(intent); //获取Album列表 getAlbums(); isAlbum=true; } }); } publicvoidonListItemClick(ListViewl,Viewv,intposition,longid){ //判断当前是哪个列表 if(isAlbum){ //如果是Album,当用户点击某一个时,获取该Album下的所有media //l.getChildAt(position); if(cursor.moveToPosition(position)){ getMedias(cursor.getInt(cursor.getColumnIndexOrThrow(Albums._ID))); isAlbum=false; } }else{ //如果是Media,则当用户点击某一个时,则播放该Media //调用系统自带的MediaPlayer来播放 if(cursor.moveToPosition(position)){ StringmediaUri=cursor.getString(cursor.getColumnIndexOrThrow(Audio.Media.DATA)); Stringtype=cursor.getString(cursor.getColumnIndexOrThrow(Audio.Media.MIME_TYPE)); Uridata=Uri.fromFile(newFile(mediaUri)); Intentintent=newIntent(Intent.ACTION_VIEW); intent.setDataAndType(data,type); startActivity(intent); } } //super.onListItemClick(l,v,position,id); } //获取所有Albums publicvoidgetAlbums(){ String[]columns=newString[]{ Albums._ID, Albums.ALBUM }; String[]from=newString[]{ Albums.ALBUM }; int[]to=newint[]{ android.R.id.text1 }; cursor=this.managedQuery(Albums.EXTERNAL_CONTENT_URI,columns,null,null,Albums.DEFAULT_SORT_ORDER); CursorAdapteradapter=newSimpleCursorAdapter(this,android.R.layout.simple_list_item_1,cursor,from,to); this.setListAdapter(adapter); //this.isAlbum=true; } //获取某个Albums下对应的medias publicvoidgetMedias(intalbumId){ String[]columns=newString[]{ Audio.Media._ID, Audio.Media.DATA, Audio.Media.DISPLAY_NAME, Audio.Media.MIME_TYPE }; Stringselection=Audio.Media.ALBUM_ID+"=?"; String[]selectionArgs=newString[]{ albumId+""}; String[]from=newString[]{ Audio.Media.DISPLAY_NAME }; int[]to=newint[]{ android.R.id.text1 }; cursor=this.managedQuery(Audio.Media.EXTERNAL_CONTENT_URI,columns,selection,selectionArgs,Audio.Media.TITLE); CursorAdapteradapter=newSimpleCursorAdapter(this,android.R.layout.simple_list_item_1,cursor,from,to); this.setListAdapter(adapter); } }