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。
- package demo.camera;
- import java.io.File;
- import org.apache.http.client.utils.URIUtils;
- import android.app.Activity;
- import android.app.ListActivity;
- import android.content.Intent;
- import android.database.Cursor;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Environment;
- import android.provider.MediaStore;
- import android.provider.MediaStore.Audio;
- import android.provider.MediaStore.Audio.Albums;
- import android.view.View;
- import android.widget.Button;
- import android.widget.CursorAdapter;
- import android.widget.ListView;
- import android.widget.SimpleCursorAdapter;
- /**
- * 本示例演示如何利用Android自带的Music来播放程序
- * 和Camera一样,可以通过Intent来启动它。
- * 我们需要指定一个ACTION_VIEW的Action
- * 同时一个Uri来指定我们要播放文件的路径
- * 最后指定一个MIME类型,指定所要播放的文件类型
- * 每种文件类型对应的都有一个MIME,他一般是类似于audio/mp3格式
- * 前部分是一个较大的类型,后面是更具体的类型
- *
- * 同样的,对于Audio类型的多媒体,系统存储在MediaStore.Audio中
- * 包括Media,Album,Genre等信息体
- *
- * 本文将以列表的形式列出所有的Album信息,供用户选择
- * 当用户选择某个Album时,系统将打开这个ALbum下的所有Audio
- * @author Administrator
- *
- */
- public class AudioDemo extends ListActivity {
- private Button btnMusic;
- private boolean isAlbum = true; //true时,说明当前列表的内容是Album,false时,说明是Media
- private Cursor cursor; //游标对象,
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.audio);
- btnMusic = (Button)this.findViewById(R.id.btn_music);
- btnMusic.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // Intent intent = new Intent(Intent.ACTION_VIEW);
- // //这里我们先从SDCard文件中获取指定文件的URi
- // File sdcard = Environment.getExternalStorageDirectory(); //这个是获取SDCard路径
- // File audioFile = new File(sdcard.getPath()+"/music/tt.mp3");
- // //然后需要获取该文件的Uri
- // Uri audioUri = Uri.fromFile(audioFile);
- // //然后指定Uri和MIME
- // intent.setDataAndType(audioUri, "audio/mp3");
- // startActivity(intent);
- //获取Album列表
- getAlbums();
- isAlbum = true;
- }
- });
- }
- public void onListItemClick(ListView l, View v, int position, long id){
- //判断当前是哪个列表
- 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)){
- String mediaUri = cursor.getString(cursor.getColumnIndexOrThrow(Audio.Media.DATA));
- String type = cursor.getString(cursor.getColumnIndexOrThrow(Audio.Media.MIME_TYPE));
- Uri data = Uri.fromFile(new File(mediaUri));
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setDataAndType(data, type);
- startActivity(intent);
- }
- }
- //super.onListItemClick(l, v, position, id);
- }
- //获取所有Albums
- public void getAlbums(){
- String[] columns = new String[]{
- Albums._ID,
- Albums.ALBUM
- };
- String[] from = new String[]{
- Albums.ALBUM
- };
- int[] to = new int[]{
- android.R.id.text1
- };
- cursor = this.managedQuery(Albums.EXTERNAL_CONTENT_URI, columns, null, null, Albums.DEFAULT_SORT_ORDER);
- CursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to);
- this.setListAdapter(adapter);
- //this.isAlbum = true;
- }
- //获取某个Albums下对应的medias
- public void getMedias(int albumId){
- String[] columns = new String[]{
- Audio.Media._ID,
- Audio.Media.DATA,
- Audio.Media.DISPLAY_NAME,
- Audio.Media.MIME_TYPE
- };
- String selection = Audio.Media.ALBUM_ID + "=?";
- String[] selectionArgs = new String[]{
- albumId+""
- };
- String[] from = new String[]{
- Audio.Media.DISPLAY_NAME
- };
- int[] to = new int[]{
- android.R.id.text1
- };
- cursor = this.managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, columns, selection, selectionArgs, Audio.Media.TITLE);
- CursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1,cursor,from,to);
- this.setListAdapter(adapter);
- }
- }
转载于:https://blog.51cto.com/whatandroid/987103
Android多媒体学习五:调用Android自带的播放器播放Audio相关推荐
- Android多媒体学习一:Android中Image的简单实例。
在多媒体应用中,Image是最基础的功能模块,接下来我们将看看在Android中是如何获取和存储Image的.Android内嵌的Image获取和存储功能,可以让我们对于整个媒体框架有个比较全面的了解 ...
- Android调用系统自带的文件管理器进行文件选择
这几天在做的项目网盘.上传时需要用到调用系统自带的文件管理器来选择文件,后来就在考虑怎么调用,网上也搜了很久,没有很好的解决方法,后来在一瞬间发现了一篇不错的文章,借鉴了一下代码. [java] vi ...
- android webrtc学习五(webrtc视频数据传递和切换摄像头问题处理)
android webrtc学习五(webrtc视频数据传递和切换摄像头问题处理) Android webrtc摄像头流程分析 1.打开摄像头 2.获取流数据 摄像头切换 问题场景:在使用华为手机(忘 ...
- h5前端调用android拍照功能,H5调用Android拍照和摄像以及选取相册
之前一直认为H5调用Android,H5不需要Android配合能直接实现功能.前段时间,自己做这个功能,才发现不是这么回事. H5编写 html文件里只需要标签即可实现代码,代码如下所示: 拍照 ο ...
- 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException
原文地址:https://blog.csdn.net/msn465780/article/details/59058088?locationNum=8&fps=1 Android7.0以前获取 ...
- android集成EasyPlayer播放器播放实时流媒体视屏
android集成EasyPlayer播放器播放实时流媒体视屏 最近公司项目需要实现一个rtsp实时流媒体视频的播放,在移动端尝试了多个第三方能播放rtsp流实时视频的软件后发现EasyPlayer的 ...
- Android使用饺子播放器播放服务器端的视频
在之前的毕设项目中需要做视频播放功能,使用了第三方播放器饺子播放器,感觉非常方便. 网上也有很多关于饺子播放器的用法. 首先在build.gradle中添加依赖 implementation 'cn. ...
- 计算机无法播放器,电脑自带播放器播放不了视频怎么办 几个步骤轻松解决
电脑自带播放器播放不了视频怎么办?虽然现在的很多用户都会从电脑网页上视频,但是还有不少的用户会下载视频来看,但是有用户发现使用自带播放器播放视频出现无法播放的情况,这是怎么回事?要如何操作才能解决呢? ...
- Android多媒体学习八:调用Android自带的音频录制程序,实现录制
Android中有自带的音频录制程序,我们可以通过指定一个Action为MediaStore.Audio.Media.RECORD_SOUND_ACTION的Intent来 启动它就可以了.然后在on ...
最新文章
- 最新最全的 Android 开源项目合集(一)
- x264代码剖析(一):图文详解x264在Windows平台上的搭建
- mysql从一张表更新另外一张表_MySQL 从一张表update字段到另外一张表中
- DynamicMethodHelper R2 2012-08-14 DynamicMethod ILGenerator.Emit
- C++11 新增关键字decltype学习
- CentOS查看软件源提供的软件版本命令
- JavaScript开发区块链只需200行代码 1
- linux自带的文本编辑器,linux自带文本编辑器
- npm 与yarn CLI 命令比较
- oracle怎么恢复删除数据库数据库文件,Oracle只有数据文件恢复数据库
- 利用新浪api获取ip归属地
- Learning to Generalize:Meta-Learning for Domain Geralization 深度理解(公式详细推导,包含二阶导)
- 1g内存编译android,如何让Android手机1G内存就“够用”?
- 教你一个免费白嫖域名的方法
- 自然风景Mac高清动态壁纸分享来了
- Xmind教程-添加外框
- JS/jQuery 遍历对象属性
- 2022-03-22 西安 python 爬虫(6)
- 程序员的生活之二--吃在大连(要来大连的,不看这个可就可惜了!看了不顶,那就太没义气了!)...
- 一名合格的管理者需要具备哪些能力?公司管理培训课程推荐
热门文章
- ios新手开发——toast提示和旋转图片加载框
- 敏捷开发中的Code Review
- WebService开发中SoapException的用法
- Windows消息机制详解-5
- c#中获取控件窗体句柄,获取窗体等的一些操作
- 动态初始化一维数组详解
- Tesseract-ocr 3.0.2源码 + VS2010项目工程 + 简单测试代码
- Asprise OCR SDK 15.3试用版破解
- IOS仿微信键盘快捷工具栏
- python爬b站评论_Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy