`

MediaPlayer 播放音乐例子

阅读更多
最近使用MediaPlayer 实现播放 静态资源文件,即res目录下raw目录下的文件

实现连续播放:
mMediaPlayer = MediaPlayer.create(this, res);
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}

});
============================
MediaPlayer还有多种使用方式和方法,并不只局限于例子所介绍的一种。具体来看:
1)如何获得MediaPlayer实例:
   可以使用直接new的方式:
   MediaPlayer mp = new MediaPlayer();
   也可以使用create的方式,如:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了


2) 如何设置要播放的文件:
   MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
   例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
   例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");


MediaPlayer的setDataSource一共四个方法:
       setDataSource (String path)
       setDataSource (FileDescriptor fd)
       setDataSource (Context context, Uri uri)
   setDataSource (FileDescriptor fd, long offset, long length)


3)对播放器的主要控制方法:
Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:
prepare()和prepareAsync()  提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
start()是真正启动文件播放的方法,
pause()和stop()比较简单,起到暂停和停止播放的作用,

seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。


4)设置播放器的监听器:
   MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,
如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性
========================================
package com.android.music_player;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;

public class ActivityMain extends ListActivity {

// 定义 按钮
private ImageButton mFrontImageButton = null;
private ImageButton mStopImageButton = null;
private ImageButton mStartImageButton = null;
private ImageButton mPauseImageButton = null;
private ImageButton mNextImageButton = null;
// 声明MediaPlayer mMediaPlayer
private MediaPlayer mMediaPlayer = null;
// 播放列表
private List<Integer> mMusicList = new ArrayList<Integer>();
// 当前播放歌曲的索引
private int currentListItem = 0;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 更新显示播放列表
musicList();
// 构建MediaPlayer对象,以及ImageButton
mMediaPlayer = new MediaPlayer();

mFrontImageButton = (ImageButton) this
.findViewById(R.id.LastImageButton);
mStopImageButton = (ImageButton) this
.findViewById(R.id.stopImageButton);
mStartImageButton = (ImageButton) this
.findViewById(R.id.StartImageButton);
mPauseImageButton = (ImageButton) this
.findViewById(R.id.PauseImageButton);
mNextImageButton = (ImageButton) this
.findViewById(R.id.NextImageButton);

// 停止按钮
mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {
// 判断是否正在播放
if (mMediaPlayer.isPlaying()) {
// 重置MediaPlayer到初始化状态
mMediaPlayer.reset();
}

}

});

// 开始按钮
mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {
playMusic(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 v) {
nextMusic();
}

});

// 上一首
mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {
FrontMusic();
}

});

}

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(mMusicList.get(position));
}

// 播放列表
private void musicList() {
try {
// 取得指定位置的文件设置显示到播放列表
mMusicList.add(R.raw.rmb1);
mMusicList.add(R.raw.rmb2);
mMusicList.add(R.raw.rmb3);
mMusicList.add(R.raw.rmb4);
mMusicList.add(R.raw.rmb5);
mMusicList.add(R.raw.rmb6);
mMusicList.add(R.raw.rmb7);
mMusicList.add(R.raw.rmb8);
mMusicList.add(R.raw.rmb9);
mMusicList.add(R.raw.rmb0);
ArrayAdapter<Integer> musicList = new ArrayAdapter<Integer>(
this, R.layout.musicitme, mMusicList);
setListAdapter(musicList);
} catch (Exception ex) {
ex.printStackTrace();
}
}

// 播放音乐
private void playMusic(Integer res) {
try {
// 重置MediaPlayer
mMediaPlayer = MediaPlayer.create(this, res);
// 准备播放
//mMediaPlayer.prepare();
// 开始播放
mMediaPlayer.start();
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}

});
}catch (Exception e) {
e.printStackTrace();
}
}

// 下一首
private void nextMusic() {
if (++currentListItem >= mMusicList.size()) {
// currentListItem = 0;
// playMusic(mMusicList.get(currentListItem));// 从第一首歌开始播放
} else {
playMusic(mMusicList.get(currentListItem));
}
}

// 上一首
private void FrontMusic() {

if (--currentListItem > 0) {
playMusic(mMusicList.get(currentListItem));
} else {
// 如果当前currentListItem等于-1,则设置currentListItem=0
// if (currentListItem < 0) {
// currentListItem = 0;
// }
// playMusic(mMusicList.get(currentListItem));
}

}


}
-----------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton android:id="@+id/LastImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="10px" android:layout_y="70px" android:src="@drawable/last" />

<ImageButton android:id="@+id/stopImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="70px" android:layout_y="70px" android:src="@drawable/stop" />
<ImageButton android:id="@+id/StartImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="130px" android:layout_y="70px" android:src="@drawable/start" />

<ImageButton android:id="@+id/PauseImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="190px" android:layout_y="70px" android:src="@drawable/pause" />
<ImageButton android:id="@+id/NextImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="250px" android:layout_y="70px" android:src="@drawable/next" />
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
android:drawSelectorOnTop="false" />
</AbsoluteLayout>
---------------------
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
  />
分享到:
评论

相关推荐

    Android25闹钟项目——音乐播放

    Android中使用MediaPlayer播放音乐,我这有两个例子 一个是在activity中播放音乐,一个是在service中播放

    Android自定义音乐播放器的代码例子

    Android自定义音乐播放器的代码例子。支持展示音乐列表、滚动歌词,以及控制栏操作,另附演示用的一剪梅歌曲与歌词。另外演示了MediaRecorder/MediaPlayer组合、AudioRecord/AudioTrack,以及SoundPool对音频的处理...

    Brew Mediaplayer example

    用一个例子说明 brew 平台播放音乐的 API 的使用方法

    delphi xe 开发的播放器示例,Android

    delphi XE6 开发的Android 音乐播放器,只是一个示例,供参考

    VB音乐可视化效果曲线控件附示例.rar

    VB音乐可视化效果曲线控件附示例,一个音乐曲线控件的调用例子,可根据音乐大小来显示曲线,在Windows MediaPlayer上面有这种类似的可视化效果,不过这款的功能似乎没那么强大。

    播放多媒体文件(音频,视频)

    在安卓上播放多媒体文件是非常常见的,听音乐,看电视等等,接下来,我们就通过一些例子来学习在手机上播放一个简易的音频和视频播放器。 播放音频 别的不多说,直接上代码吧! activity_main.xml代码 布局文件...

    Android AIDL和远程Service调用示例代码

    Android:AIDL和远程Service调用 ...第一、我们知道在AndroId中如果需要进行音乐播放,最方面的方法就是使用自带的MediaPlayer对象,如果我们在Activity中控制MediaPlayer对象进行播放,那么一旦你打开了另外一个程序

    VB功能丰富的音乐播放器

    摘要:VB源码,多媒体技术,音乐播放器 ...编辑注:虽然核心是基于MediaPlayer,这点好像有很多例子,但本程序在一些辅助功能方面、窗体界面设计方面做的都挺不错,欢迎参考。 运行环境:Windows/VB6

    OPhone应用开发权威指南(黄晓庆)

    8.3 后台播放音乐 345 8.3.1 跨进程调用 345 8.3.2 创建AIDL接口文件 346 8.3.3 实现AIDL接口 347 8.3.4 绑定Service 351 8.3.5 调用IPC方法 352 8.4 小结 353 第9章 访问网络数据和服务 354 9.1 HTTP协议简介 354 ...

    vc++ 应用源码包_1

    MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...

    vc++ 应用源码包_2

    MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...

    vc++ 应用源码包_6

    MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...

    vc++ 应用源码包_5

    MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...

    vc++ 应用源码包_3

    MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...

    vc++ 开发实例源码包

    很简单,只能播放mp3格式的音乐。 功能: --------------------------------------- --------关闭-- 打开----最小化------- --------------------------------------- 显示歌曲名字 -------------------- -------...

Global site tag (gtag.js) - Google Analytics