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。

  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. }

转载于:https://blog.51cto.com/whatandroid/987103

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

  1. Android多媒体学习一:Android中Image的简单实例。

    在多媒体应用中,Image是最基础的功能模块,接下来我们将看看在Android中是如何获取和存储Image的.Android内嵌的Image获取和存储功能,可以让我们对于整个媒体框架有个比较全面的了解 ...

  2. Android调用系统自带的文件管理器进行文件选择

    这几天在做的项目网盘.上传时需要用到调用系统自带的文件管理器来选择文件,后来就在考虑怎么调用,网上也搜了很久,没有很好的解决方法,后来在一瞬间发现了一篇不错的文章,借鉴了一下代码. [java] vi ...

  3. android webrtc学习五(webrtc视频数据传递和切换摄像头问题处理)

    android webrtc学习五(webrtc视频数据传递和切换摄像头问题处理) Android webrtc摄像头流程分析 1.打开摄像头 2.获取流数据 摄像头切换 问题场景:在使用华为手机(忘 ...

  4. h5前端调用android拍照功能,H5调用Android拍照和摄像以及选取相册

    之前一直认为H5调用Android,H5不需要Android配合能直接实现功能.前段时间,自己做这个功能,才发现不是这么回事. H5编写 html文件里只需要标签即可实现代码,代码如下所示: 拍照 ο ...

  5. 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException

    原文地址:https://blog.csdn.net/msn465780/article/details/59058088?locationNum=8&fps=1 Android7.0以前获取 ...

  6. android集成EasyPlayer播放器播放实时流媒体视屏

    android集成EasyPlayer播放器播放实时流媒体视屏 最近公司项目需要实现一个rtsp实时流媒体视频的播放,在移动端尝试了多个第三方能播放rtsp流实时视频的软件后发现EasyPlayer的 ...

  7. Android使用饺子播放器播放服务器端的视频

    在之前的毕设项目中需要做视频播放功能,使用了第三方播放器饺子播放器,感觉非常方便. 网上也有很多关于饺子播放器的用法. 首先在build.gradle中添加依赖 implementation 'cn. ...

  8. 计算机无法播放器,电脑自带播放器播放不了视频怎么办 几个步骤轻松解决

    电脑自带播放器播放不了视频怎么办?虽然现在的很多用户都会从电脑网页上视频,但是还有不少的用户会下载视频来看,但是有用户发现使用自带播放器播放视频出现无法播放的情况,这是怎么回事?要如何操作才能解决呢? ...

  9. Android多媒体学习八:调用Android自带的音频录制程序,实现录制

    Android中有自带的音频录制程序,我们可以通过指定一个Action为MediaStore.Audio.Media.RECORD_SOUND_ACTION的Intent来 启动它就可以了.然后在on ...

最新文章

  1. 最新最全的 Android 开源项目合集(一)
  2. x264代码剖析(一):图文详解x264在Windows平台上的搭建
  3. mysql从一张表更新另外一张表_MySQL 从一张表update字段到另外一张表中
  4. DynamicMethodHelper R2 2012-08-14 DynamicMethod ILGenerator.Emit
  5. C++11 新增关键字decltype学习
  6. CentOS查看软件源提供的软件版本命令
  7. JavaScript开发区块链只需200行代码 1
  8. linux自带的文本编辑器,linux自带文本编辑器
  9. npm 与yarn CLI 命令比较
  10. oracle怎么恢复删除数据库数据库文件,Oracle只有数据文件恢复数据库
  11. 利用新浪api获取ip归属地
  12. Learning to Generalize:Meta-Learning for Domain Geralization 深度理解(公式详细推导,包含二阶导)
  13. 1g内存编译android,如何让Android手机1G内存就“够用”?
  14. 教你一个免费白嫖域名的方法
  15. 自然风景Mac高清动态壁纸分享来了
  16. Xmind教程-添加外框
  17. JS/jQuery 遍历对象属性
  18. 2022-03-22 西安 python 爬虫(6)
  19. 程序员的生活之二--吃在大连(要来大连的,不看这个可就可惜了!看了不顶,那就太没义气了!)...
  20. 一名合格的管理者需要具备哪些能力?公司管理培训课程推荐

热门文章

  1. ios新手开发——toast提示和旋转图片加载框
  2. 敏捷开发中的Code Review
  3. WebService开发中SoapException的用法
  4. Windows消息机制详解-5
  5. c#中获取控件窗体句柄,获取窗体等的一些操作
  6. 动态初始化一维数组详解
  7. Tesseract-ocr 3.0.2源码 + VS2010项目工程 + 简单测试代码
  8. Asprise OCR SDK 15.3试用版破解
  9. IOS仿微信键盘快捷工具栏
  10. python爬b站评论_Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy