`

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

 
阅读更多

 

转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以便以后学习和查询! 

 

 

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);
	}
}

 

 

 

 

 

转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以

便以后学习和查询!


 

学习总结

 

 

1、启动自带的Music程序播放音乐

 

   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));  
   //Actinon是Intent.ACTION_VIEW
   Intent intent = new Intent(Intent.ACTION_VIEW);  
   //intent要设置data和type
   intent.setDataAndType(data, type);  
   startActivity(intent);  

  
2、Activity中有方法managedQuery()查询contentProvider的内容,相当于getContentResolver(),
    与getContentResolver()区别的是managedQuery()得到的cursor是由Activity自动管理。
 

3、获取所有Albums  

 

     String[] columns = new String[]{  
                Albums._ID,  
               Albums.ALBUM  
        };  
        String[] from = new String[]{  
             Albums.ALBUM  
       };  
       int[] to = new int[]{  
                android.R.id.text1  
       };  
    //uri:Albums.EXTERNAL_CONTENT_URI
       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);  

 

4、根据id(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  
    };  
 //uri: Audio.Media.EXTERNAL_CONTENT_URI
    cursor = this.managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, columns, selection, selectionArgs, Audio.Media.TITLE);
 
 

分享到:
评论

相关推荐

    Android 音频文件播放(使用手机内置播放器播放)

    首先,我们需要了解Android多媒体框架,它是Android系统提供的一套用于处理音频、视频和图像的API。这个框架支持多种媒体格式,如MP3、AAC、WAV等,同时也允许开发者调用系统内置的播放器进行播放。 要实现使用手机...

    调用系统相机录像

    `VideoView`是Android自带的简单播放器,而`ExoPlayer`是Google推荐的高级媒体播放库,提供了更多自定义选项和更好的性能。 使用`VideoView`播放视频: ```java VideoView videoView = findViewById(R.id.video_...

    Android代码-手机调用自带的麦克风进行声音录制录制的同时声音转换成波形不停的变动显示在手机的屏幕上.rar

    "本源码使用帮助.txt"可能包含关于如何运行和理解代码的详细步骤,"更多源码打包下载.url"可能是指向更多相关Android开发资源的链接,而"Demo"则是实际的代码示例,你可以通过阅读和运行这个示例来更直观地学习如何...

    android 调用其他应用的录像机录像

    在Android平台上,调用其他应用的录像功能是一个常见的需求,比如我们希望用户能通过系统自带的录像机或者其他第三方录像应用来录制视频,并将其保存到我们的应用中。这个过程涉及到Android的Intent机制、权限管理和...

    基于Android的多媒体应用开发与研究.docx

    - **音频处理**: 包括录音、播放、音效处理等,Android SDK提供了AudioRecord、MediaPlayer、SoundPool等组件。 - **图像处理**: 通过Bitmap类、Canvas类等进行图像绘制和处理,实现图像的加载、渲染、编辑等功能。 ...

    Android MediaPlayer

    虽然描述中提到的项目与Android自带播放器类似,但实现一个完整的播放器还需要考虑UI设计。这包括创建自定义控件(如播放/暂停按钮、进度条)以及绑定事件处理器,以响应用户操作。 **总结** Android的`...

    android应用开发之视频和音乐播放代码

    在Android应用开发中,视频和音乐播放是常见的功能,尤其对于娱乐、教育类的应用来说更是不...在深入学习后,你还可以探索更高级的特性,如自定义播放器界面、流媒体支持、音视频同步等,从而提升你的Android开发技能。

    android 调用系统照相、摄像、录音功能。

    总之,调用Android系统的照相、摄像和录音功能是通过Intent和系统服务来完成的。理解这些基本操作对于开发多媒体应用至关重要。通过实践和理解这些代码,初学者可以逐步掌握Android多媒体开发的关键技能。

    Android原生音乐

    在Android平台上,开发一款原生音乐播放器涉及到多个关键知识点,包括媒体库的访问、音频流的处理、用户界面的设计以及播放控制等。下面将详细阐述这些内容。 首先,要理解Android的媒体库(MediaStore)是应用程序...

    安卓Android源码——video.zip

    8. **编解码库**: 除了Android自带的编解码器,你还会发现第三方编解码库,如FFmpeg或ExoPlayer。这些库可能被集成在特定项目或系统构建中,以支持更多的视频格式和特性。 9. **权限管理**: 视频处理涉及到的权限,...

    Android项目开发详解.( 翟大昆,陈春茶 )

    - **性能监测工具**: 使用Android Studio自带的Profiler工具来分析应用运行时的CPU、内存占用情况,并针对性地进行优化。 - **图片加载策略**: 对于含有大量图片的应用,采取懒加载、使用第三方图片加载库等方式可以...

    Android10以上截屏、录屏实现

    综上所述,实现Android 10以上版本的截屏和录屏功能涉及多个步骤和组件,需要充分理解和掌握Android的权限管理、UI绘制、多媒体录制等相关知识。同时,随着Android系统的不断升级,开发者需要时刻关注新特性和变更,...

    调用手机自带的录像录音照相

    在Android平台上,调用手机内置的录像、录音和照相功能是常见的应用场景,例如在开发社交应用、多媒体应用或者任何需要捕获用户媒体数据的场景。以下是对如何实现这些功能的详细讲解: **录像功能** 要调用手机的...

    VideoAndAudio-master.rar

    在Android开发中,播放本地视频和音乐是常见的需求,尤其对于多媒体应用来说更是必不可少的功能。...通过对项目源码的学习,开发者可以深入理解Android多媒体播放机制,以及如何在实际应用中实现这些功能。

    安卓Android源码——视频采集+RTSP完整代码(可用).zip

    在安卓平台上进行视频采集并利用RTSP(Real Time Streaming Protocol)进行实时传输是移动开发中的常见应用场景,例如视频监控、...同时,学习此代码也可以帮助理解Android多媒体框架的工作原理,提升移动开发能力。

    录制多种音频,然后将它们合并为一个文件(android)

    1. **AudioMixer**: Android系统自带的AudioMixer可以混合音频流,但功能有限,不适合复杂的音频处理。 2. **第三方库FFmpeg**: 更强大的解决方案是引入FFmpeg库,它可以处理多种音频格式的合并。通过JNI接口在...

    VideoRecordDemo-master.zip

    【Android 视频录制与播放详解...通过深入研究`VideoRecordDemo-master`项目,开发者可以学习到如何在Android应用中实现流畅的视频录制和播放功能,同时理解相关组件的工作原理,这对于构建多媒体应用是非常有价值的。

    Android中简单调用图片、视频、音频、录音和拍照的方法

    本文将详细讲解如何在Android中简单地调用图片、视频、音频、录音和拍照的功能,这些功能通常涉及到Intent的使用,MediaRecorder,以及Activity生命周期中的回调方法。 1. **选择图片** 当需要让用户从设备图库中...

Global site tag (gtag.js) - Google Analytics