Android多媒体学习五:调用Android自带的播放器播放Audio

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。

 

[java]  view plain copy
  1. package demo.camera;  
  2. import java.io.File;  
  3. import org.apache.http.client.utils.URIUtils;  
  4. import android.app.Activity;  
  5. import android.app.ListActivity;  
  6. import android.content.Intent;  
  7. import android.database.Cursor;  
  8. import android.net.Uri;  
  9. import android.os.Bundle;  
  10. import android.os.Environment;  
  11. import android.provider.MediaStore;  
  12. import android.provider.MediaStore.Audio;  
  13. import android.provider.MediaStore.Audio.Albums;  
  14. import android.view.View;  
  15. import android.widget.Button;  
  16. import android.widget.CursorAdapter;  
  17. import android.widget.ListView;  
  18. import android.widget.SimpleCursorAdapter;  
  19. /** 
  20.  * 本示例演示如何利用Android自带的Music来播放程序 
  21.  * 和Camera一样,可以通过Intent来启动它。 
  22.  * 我们需要指定一个ACTION_VIEW的Action 
  23.  * 同时一个Uri来指定我们要播放文件的路径 
  24.  * 最后指定一个MIME类型,指定所要播放的文件类型 
  25.  * 每种文件类型对应的都有一个MIME,他一般是类似于audio/mp3格式 
  26.  * 前部分是一个较大的类型,后面是更具体的类型 
  27.  *  
  28.  * 同样的,对于Audio类型的多媒体,系统存储在MediaStore.Audio中 
  29.  * 包括Media,Album,Genre等信息体 
  30.  *  
  31.  * 本文将以列表的形式列出所有的Album信息,供用户选择 
  32.  * 当用户选择某个Album时,系统将打开这个ALbum下的所有Audio 
  33.  * @author Administrator 
  34.  * 
  35.  */  
  36. public class AudioDemo extends ListActivity {  
  37.       
  38.     private Button btnMusic;  
  39.       
  40.     private boolean isAlbum = true//true时,说明当前列表的内容是Album,false时,说明是Media  
  41.       
  42.     private Cursor cursor; //游标对象,  
  43.       
  44.     public void onCreate(Bundle savedInstanceState){  
  45.         super.onCreate(savedInstanceState);  
  46.         this.setContentView(R.layout.audio);  
  47.         btnMusic = (Button)this.findViewById(R.id.btn_music);  
  48.         btnMusic.setOnClickListener(new View.OnClickListener() {  
  49.               
  50.             @Override  
  51.             public void onClick(View v) {  
  52.                   
  53. //              Intent intent = new Intent(Intent.ACTION_VIEW);  
  54. //              //这里我们先从SDCard文件中获取指定文件的URi  
  55. //              File sdcard = Environment.getExternalStorageDirectory(); //这个是获取SDCard路径  
  56. //              File audioFile = new File(sdcard.getPath()+"/music/tt.mp3");  
  57. //              //然后需要获取该文件的Uri  
  58. //              Uri audioUri = Uri.fromFile(audioFile);  
  59. //              //然后指定Uri和MIME  
  60. //              intent.setDataAndType(audioUri, "audio/mp3");  
  61. //              startActivity(intent);  
  62.                   
  63.                 //获取Album列表  
  64.                 getAlbums();  
  65.                 isAlbum = true;  
  66.             }  
  67.         });  
  68.           
  69.     }  
  70.       
  71.     public void onListItemClick(ListView l, View v, int position, long id){  
  72.           
  73.         //判断当前是哪个列表  
  74.         if(isAlbum){  
  75.             //如果是Album,当用户点击某一个时,获取该Album下的所有media  
  76.             //l.getChildAt(position);  
  77.             if(cursor.moveToPosition(position)){  
  78.                 getMedias(cursor.getInt(cursor.getColumnIndexOrThrow(Albums._ID)));  
  79.                 isAlbum = false;  
  80.             }  
  81.         }else{  
  82.             //如果是Media,则当用户点击某一个时,则播放该Media  
  83.             //调用系统自带的MediaPlayer来播放  
  84.             if(cursor.moveToPosition(position)){  
  85.                 String mediaUri = cursor.getString(cursor.getColumnIndexOrThrow(Audio.Media.DATA));  
  86.                 String type = cursor.getString(cursor.getColumnIndexOrThrow(Audio.Media.MIME_TYPE));  
  87.                 Uri data = Uri.fromFile(new File(mediaUri));  
  88.                 Intent intent = new Intent(Intent.ACTION_VIEW);  
  89.                 intent.setDataAndType(data, type);  
  90.                 startActivity(intent);  
  91.             }  
  92.         }  
  93.           
  94.         //super.onListItemClick(l, v, position, id);  
  95.     }  
  96.       
  97.       
  98.     //获取所有Albums  
  99.     public void getAlbums(){  
  100.         String[] columns = new String[]{  
  101.                 Albums._ID,  
  102.                 Albums.ALBUM  
  103.         };  
  104.         String[] from = new String[]{  
  105.                 Albums.ALBUM  
  106.         };  
  107.         int[] to = new int[]{  
  108.                 android.R.id.text1  
  109.         };  
  110.         cursor = this.managedQuery(Albums.EXTERNAL_CONTENT_URI, columns, nullnull, Albums.DEFAULT_SORT_ORDER);  
  111.         CursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to);  
  112.         this.setListAdapter(adapter);  
  113.         //this.isAlbum = true;  
  114.           
  115.     }  
  116.       
  117.     //获取某个Albums下对应的medias  
  118.     public void getMedias(int albumId){  
  119.         String[] columns = new String[]{  
  120.                 Audio.Media._ID,  
  121.                 Audio.Media.DATA,  
  122.                 Audio.Media.DISPLAY_NAME,  
  123.                 Audio.Media.MIME_TYPE  
  124.         };  
  125.         String selection = Audio.Media.ALBUM_ID + "=?";  
  126.         String[] selectionArgs = new String[]{  
  127.                 albumId+""  
  128.         };  
  129.           
  130.         String[] from = new String[]{  
  131.                 Audio.Media.DISPLAY_NAME  
  132.         };  
  133.         int[] to = new int[]{  
  134.                 android.R.id.text1  
  135.         };  
  136.           
  137.         cursor = this.managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, columns, selection, selectionArgs, Audio.Media.TITLE);  
  138.         CursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1,cursor,from,to);  
  139.         this.setListAdapter(adapter);  
  140.     }  
  141. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值