MediaPlayer类最让我想到的是音频和视频的播放了 该类提供了开始或恢复播放start()、暂停播放pause()、停止播放stop()等方法。该类位于android.media包下,详见API文档。
三种获取资源文件的方式
1.播放应用内的音频文件
MediaPlayer mMediaPlayer=new MediaPlayer.create(this, R.raw.love);
2.播放内存卡中音频文件
MediaPlayer mMediaPlayer=new MediaPlayer.setDataSource("file://mnt/sdcard/Music/test.mp3");
3.获取网络上的媒体文件
MediaPlayer mMediaPlayer=new MediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/test.mp3"));
我们下面做一个播放音乐的小列子。
步骤1.创建项目
2.activity_main.xml的代码,添加一个进度条SeekBar和一个ImageButton按钮
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android1="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_media_play"
android:onClick="playMusic"
/>
</LinearLayout>
3.在MainActivity写playMusic点击事件(用播放应用内的音频文件)
public void playMusic(View view){
//把view强制转换成ImageButton
final ImageButton imageButton= (ImageButton) view;
if (mMediaPlayer == null) {
// 实列化一个MediaPlayer
// 播放应用内的音频文件
mMediaPlayer = new MediaPlayer().create(this, R.raw.love);
// 监听:准备完成的监听
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
// 把图标修改为暂停的图标
imageButton.setImageResource(android.R.drawable.ic_media_pause);
// 获取音乐的总时长
int duration = mediaPlayer.getDuration();
// 设置进度条的最大值为音乐的总时长
mSeekBar.setMax(duration);
new MyThread().start();
}
});
} else if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
// 把图标修改为播放的图标
imageButton.setImageResource(android.R.drawable.ic_media_play);
} else {
mMediaPlayer.start();
// 把图标修改为暂停的图标
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
5.为进度条添加事件
mSeekBar = (SeekBar) findViewById(R.id.seekBar1);
mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//获取拖动结束之后的位置
int progress=seekBar.getProgress();
//跳转到某个位置播放
mMediaPlayer.seekTo(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// TODO Auto-generated method stub
}
});
6.写一个线程让播放进度和进度条一样
class MyThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
while(mSeekBar.getProgress()<=mSeekBar.getMax()){
//获取当前音乐播放的位置
int currentPosition=mMediaPlayer.getCurrentPosition();
//让进度条动起来
mSeekBar.setProgress(currentPosition);
}
}
}
得到下图就完成了
在MainActivity写playMusic点击事件(播放内存卡中音频文件)
首先要获取读取内存卡的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
public void isPlayOrPause(View view){
final ImageButton imageButton= (ImageButton) view;
if(mMediaPlayer==null){
//实例化MediaPlayer
//播放内存卡中音频文件
mMediaPlayer=new MediaPlayer();
//设置类型
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置音源
try {
mMediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/f.mp3"));
//准备一下(内存卡)
mMediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
//监听:准备完成的监听
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
//把图标修改为暂停的图标
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐的总时长
int duration=mediaPlayer.getDuration();
//设置进度条的最大值为音乐的总时长
seekBar.setMax(duration);
new MyThread().start();
}
});
}else if(mMediaPlayer.isPlaying()){
mMediaPlayer.pause();
//把图标修改为播放的图标
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mMediaPlayer.start();
//把图标修改为暂停的图标
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
在MainActivity下playMusic点击时间(获取网络上的媒体文件)
首先要获取联网的权限
<uses-permission android:name="android.permission.INTERNET" />
把音频文件放入到tomcat的Root下面然后启动tomcat,一定要在手机上输入那个地址检查一下是否能进入tomcat的官网,这里就不做步骤演示了。
public void isPlayOrPause(View view){
final ImageButton imageButton= (ImageButton) view;
if(mMediaPlayer==null){
//实例化MediaPlayer
mMediaPlayer=new MediaPlayer();
//设置类型
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置音源
try {
//播放网络音乐
mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3"));
//准备(网络)
mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
//监听:准备完成的监听
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
//把图标修改为暂停的图标
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐的总时长
int duration=mediaPlayer.getDuration();
//设置进度条的最大值为音乐的总时长
seekBar.setMax(duration);
new MyThread().start();
}
});
}else if(mMediaPlayer.isPlaying()){
mMediaPlayer.pause();
//把图标修改为播放的图标
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mMediaPlayer.start();
//把图标修改为暂停的图标
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}