展会信息港展会大全

android多媒体音乐播放
来源:互联网   发布日期:2015-09-29 10:24:34   浏览:3261次  

导读:今天开始学习多媒体相关的操作,因为我们的智能手机一部分重要的作用就是播放音频,视频,显示图片等操作。Android主要是通过Open Core作为多媒体框架的核心,也被称作为PV,支持多种格式的音频,视频。Open C......

今天开始学习多媒体相关的操作,因为我们的智能手机一部分重要的作用就是播放音频,视频,显示图片等操作。Android主要是通过Open Core作为多媒体框架的核心,也被称作为PV,支持多种格式的音频,视频。Open Core框架主要包含两部分:

(1)PVPlayer:提供媒体播放器功能。

(2)PVAuthor:提供媒体流记录的功能,完成各种音频,视频的流以及图像的捕捉功能。

当然我们开发中,不会直接操作底层的PV,主要使用Android提供的Media API。

1.MediaPlayer类

该类主要用来播放,音频,视频和流媒体,包含了Audio和Video的播放功能,具体的生命周期与相关方法,可以参考下面音乐播放实例。

2.MediaRecorder类

该类主要用于媒体的采样,包括音频视频。MediaRecorder作为状态机运行,需要设置不同的,比如源设备和格式。设置后,可以执行任何时间长度的录制,直到用户停止。

一、多媒体之音乐播放

下面就以音乐播放的例子来验证MediaPlayer的生命周期以及相关方法,关于音乐播放其实之前例子已经实现,当时是播放的raw目录下得mp3文件,本例子自动播放SDCard下的mp3例子。

关键源码:

public class SDCardMusicPlayActivity extends ListActivity {

private ImageButton mFrontImageButton = null;

private ImageButton mStopImageButton = null;

private ImageButton mStartImageButton = null;

private ImageButton mPauseImageButton = null;

private ImageButton mNextImageButton = null;

public MediaPlayer mMediaPlayer = null;//MediaPlayer对象

private List<String> mMusicList = new ArrayList<String>();//播放列表

private int currentListItem = 0;//当前播放歌曲的索引

private static final String MUSIC_PATH = new String("/mnt/sdcard/");//音乐的路径

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

musicList();//更新显示播放列表

mMediaPlayer = new MediaPlayer();

mFrontImageButton = (ImageButton) findViewById(R.id.LastImageButton);

mStopImageButton = (ImageButton) findViewById(R.id.StopImageButton);

mStartImageButton = (ImageButton) findViewById(R.id.StartImageButton);

mPauseImageButton = (ImageButton) findViewById(R.id.PauseImageButton);

mNextImageButton = (ImageButton) findViewById(R.id.NextImageButton);

//停止按钮

mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {

if(mMediaPlayer.isPlaying()){ //当前是否正在播放

mMediaPlayer.reset();//重置MediaPlayer到初始状态

}

}

});

//开始按钮

mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {

playMusic(MUSIC_PATH + mMusicList.get(currentListItem));

}

});

//暂停按钮

mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {

if(mMediaPlayer.isPlaying()){

mMediaPlayer.pause();

}else{

mMediaPlayer.start();

}

}

});

//下一首

mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View arg0){

nextMusic();

}

});

//上一首

mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View arg0){

FrontMusic();

}

});

}

//播放列表

private void musicList() {

//取得指定位置的文件,设置显示到播放列表

File home = new File(MUSIC_PATH);

if(home.list(new MusicFilter()).length > 0){

for(File file : home.listFiles(new MusicFilter())){

mMusicList.add(file.getName());

}

ArrayAdapter<String> musicListAdapter = new ArrayAdapter<String>(SDCardMusicPlayActivity.this, R.layout.musicitme, mMusicList);

this.setListAdapter(musicListAdapter);

}

}

private void playMusic(String path){

try {

mMediaPlayer.reset();//重置MediaPlayer

mMediaPlayer.setDataSource(path);//设置要播放的文件路径

mMediaPlayer.prepare();//准备播放

mMediaPlayer.start();

mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {

// TODO Auto-generated method stub

nextMusic();//播放完成一首之后进行下一首

}

});

} catch (IOException e) {

// TODO: handle exception

}

}

//下一首

private void nextMusic() {

// TODO Auto-generated method stub

if(++currentListItem >= mMusicList.size()){

currentListItem = 0;

}else{

playMusic(MUSIC_PATH + mMusicList.get(currentListItem));

}

}

//上一首

private void FrontMusic(){

if (--currentListItem >= 0){

currentListItem = mMusicList.size();

}else{

playMusic(MUSIC_PATH + mMusicList.get(currentListItem));

}

}

public boolean onKeyDown(int keyCode, KeyEvent event){

if ( keyCode ==KeyEvent.KEYCODE_BACK){

mMediaPlayer.stop();

mMediaPlayer.release();

this.finish();

return true;

}

return super.onKeyDown(keyCode, event);

}

//播放被点击的音乐

protected void onListItemClick(ListView l, View v, int position, long id){

currentListItem = position;

playMusic(MUSIC_PATH + mMusicList.get(position));

}

}

class MusicFilter implements FilenameFilter{

@Override

public boolean accept(File dir, String filename) {

//这里还可以设置其他格式的音乐文件

return (filename.endsWith(".mp3"));

}

}

运行效果:

【遇到问题】

在往模拟器的SDCard里放置mp3文件的时候,报:Failed to push selection: Read-only file system 错误。

切换到DDMS视图下,看到mnt下的sdcard文件夹的操作权限为可读,后来在AVD Edit的时候,之前SDCard没设置大小,所以设置了大小重新启动AVD,该sdcard文件夹就可以可以编辑的了。

赞助本站

人工智能实验室

相关热词: 音乐播放

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港