代码部分
package com.example.song.lx_android_day04_musicplayer;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
public class MainActivity extends AppCompatActivity {
private MediaPlayer player;//创建音乐播放器
private Button pause;
private Button start;
private Button stop;
private SeekBar seekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();//初始化控件
setListener();//设置控件的监听事件
}
private void setListener() {
pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (player != null) {
player.pause();//暂停
}
}
});
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (player != null) {
player.start();//开始播放
//调用run开始更新进度条
handler.post(run);
}
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (player != null) {
player.pause();
//暂停使音乐回到最开始
player.seekTo(0);
}
}
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
handler.removeCallbacks(run);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
player.seekTo(seekBar.getProgress());
handler.postDelayed(run, 1000);
}
});
}
Handler handler = new Handler();
Runnable run = new Runnable() {
@Override
public void run() {
//player.getCurrentPosition()获取音乐的当前进度
seekBar.setProgress(player.getCurrentPosition());
handler.postDelayed(run, 100);
}
};
private void initView() {
pause = ((Button) findViewById(R.id.pause));
start = ((Button) findViewById(R.id.start));
stop = ((Button) findViewById(R.id.stop));
seekBar = ((SeekBar) findViewById(R.id.seekBar));
/**
* 初始化音乐播放器
* 参数1 上下文对象
* 参数2 资源 也可以是一个网址比如 http//xxxxxx.mp3
* 第二个参数填上地址就可以实现在线播放了
*/
player = MediaPlayer.create(this, R.raw.thoseflower);
int max = player.getDuration();//获取音乐的播放时间 单位是毫秒
seekBar.setMax(max);//设置SeekBar的播放时间
}
}
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.song.lx_android_day04_musicplayer.MainActivity">
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/pause"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="暂停" />
<Button
android:id="@+id/start"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="播放" />
<Button
android:id="@+id/stop"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="停止" />
</LinearLayout>
</LinearLayout>
下面附上 MediaPlayer的一些方法
7 MediaPlayer 常用方法介绍
方法:create(Context context, Uri uri) 通过Uri创建一个多媒体播放器。
方法:create(Context context, int resid) 通过资源ID创建一个多媒体播放器
方法:create(Context context, Uri uri, SurfaceHolder holder)通过Uri和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器
方法: getCurrentPosition() 得到当前播放位置
方法: getDuration() 得到文件的时间
方法:getVideoHeight() 得到视频的高度
方法:getVideoWidth() 得到视频的宽度
方法:isLooping() 是否循环播放
方法:isPlaying() 是否正在播放
方法:pause() 暂停
方法:prepare() 准备同步
方法:prepareAsync() 准备异步
方法:release() 释放 MediaPlayer 对象
方法:reset() 重置 MediaPlayer 对象
方法:seekTo(int msec) 指定播放的位置(以毫秒为单位的时间)
方法:setAudioStreamType(int streamtype) 指定流媒体的类型
方法:setDataSource(String path) 设置多媒体数据来源【根据 路径】
方法:setDataSource(FileDescriptor fd, long offset, long length)设置多媒体数据来源【根据 FileDescriptor】
方法:setDataSource(FileDescriptor fd) 设置多媒体数据来源【根据 FileDescriptor】
方法:setDataSource(Context context, Uri uri)设置多媒体数据来源【根据 Uri】
方法:setDisplay(SurfaceHolder sh) 设置用 SurfaceHolder 来显示多媒体
方法:setLooping(boolean looping) 设置是否循环播放
事件:setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener) 网络流媒体的缓冲监听
事件:setOnCompletionListener(MediaPlayer.OnCompletionListener listener) 网络流媒体播放结束监听
事件:setOnErrorListener(MediaPlayer.OnErrorListener listener) 设置错误信息监听
事件:setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)视频尺寸监听
方法:setScreenOnWhilePlaying(boolean screenOn) 设置是否使用 SurfaceHolder 显示
方法:setVolume(float leftVolume, float rightVolume) 设置音量
方法:start() 开始播放
方法:stop() 停止播放