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

本文介绍如何在Android中使用系统自带的音乐播放器播放音频文件。通过Intent启动播放器并指定音频文件路径及MIME类型。此外,还展示了如何从MediaStore中获取音频信息并以列表形式展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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代码 复制代码 收藏代码
  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. private Button btnMusic;
  38. private boolean isAlbum = true; //true时,说明当前列表的内容是Album,false时,说明是Media
  39. private Cursor cursor; //游标对象,
  40. public void onCreate(Bundle savedInstanceState){
  41. super.onCreate(savedInstanceState);
  42. this.setContentView(R.layout.audio);
  43. btnMusic = (Button)this.findViewById(R.id.btn_music);
  44. btnMusic.setOnClickListener(new View.OnClickListener() {
  45. @Override
  46. public void onClick(View v) {
  47. // Intent intent = new Intent(Intent.ACTION_VIEW);
  48. // //这里我们先从SDCard文件中获取指定文件的URi
  49. // File sdcard = Environment.getExternalStorageDirectory(); //这个是获取SDCard路径
  50. // File audioFile = new File(sdcard.getPath()+"/music/tt.mp3");
  51. // //然后需要获取该文件的Uri
  52. // Uri audioUri = Uri.fromFile(audioFile);
  53. // //然后指定Uri和MIME
  54. // intent.setDataAndType(audioUri, "audio/mp3");
  55. // startActivity(intent);
  56. //获取Album列表
  57. getAlbums();
  58. isAlbum = true;
  59. }
  60. });
  61. }
  62. public void onListItemClick(ListView l, View v, int position, long id){
  63. //判断当前是哪个列表
  64. if(isAlbum){
  65. //如果是Album,当用户点击某一个时,获取该Album下的所有media
  66. //l.getChildAt(position);
  67. if(cursor.moveToPosition(position)){
  68. getMedias(cursor.getInt(cursor.getColumnIndexOrThrow(Albums._ID)));
  69. isAlbum = false;
  70. }
  71. }else{
  72. //如果是Media,则当用户点击某一个时,则播放该Media
  73. //调用系统自带的MediaPlayer来播放
  74. if(cursor.moveToPosition(position)){
  75. String mediaUri = cursor.getString(cursor.getColumnIndexOrThrow(Audio.Media.DATA));
  76. String type = cursor.getString(cursor.getColumnIndexOrThrow(Audio.Media.MIME_TYPE));
  77. Uri data = Uri.fromFile(new File(mediaUri));
  78. Intent intent = new Intent(Intent.ACTION_VIEW);
  79. intent.setDataAndType(data, type);
  80. startActivity(intent);
  81. }
  82. }
  83. //super.onListItemClick(l, v, position, id);
  84. }
  85. //获取所有Albums
  86. public void getAlbums(){
  87. String[] columns = new String[]{
  88. Albums._ID,
  89. Albums.ALBUM
  90. };
  91. String[] from = new String[]{
  92. Albums.ALBUM
  93. };
  94. int[] to = new int[]{
  95. android.R.id.text1
  96. };
  97. cursor = this.managedQuery(Albums.EXTERNAL_CONTENT_URI, columns, null, null, Albums.DEFAULT_SORT_ORDER);
  98. CursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to);
  99. this.setListAdapter(adapter);
  100. //this.isAlbum = true;
  101. }
  102. //获取某个Albums下对应的medias
  103. public void getMedias(int albumId){
  104. String[] columns = new String[]{
  105. Audio.Media._ID,
  106. Audio.Media.DATA,
  107. Audio.Media.DISPLAY_NAME,
  108. Audio.Media.MIME_TYPE
  109. };
  110. String selection = Audio.Media.ALBUM_ID + "=?";
  111. String[] selectionArgs = new String[]{
  112. albumId+""
  113. };
  114. String[] from = new String[]{
  115. Audio.Media.DISPLAY_NAME
  116. };
  117. int[] to = new int[]{
  118. android.R.id.text1
  119. };
  120. cursor = this.managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, columns, selection, selectionArgs, Audio.Media.TITLE);
  121. CursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1,cursor,from,to);
  122. this.setListAdapter(adapter);
  123. }
  124. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值