转载自:http://blog.csdn.net/x605940745/article/details/18034651
MediaPlayer通过如下两个静态方法来加载指定的音频:
1、static MediaPlayer create(Context context,Uri uri):从指定的Uri来装载音频文件,并返回新创建的MediaPlayer对象;
2、static MediaPlayer create(Context context,int resid):从resid资源ID对应的资源文件中装载音频文件,并返回新创建的MediaPlayer对象
一般如果要加载多个文件来循环播放音频文件可以通过MediaPlayer的setDataSource()方法来装载指定的音频文件
1、setDataSource(String path):指定装载path路径代表的文件。
2、setDataSource(FileDescriptor fd,long offset,long length):指定装载fd所代表的文件中从offset开始、长度为length的文件内容;
3、setDataSource(FileDescriptor fd):指定装载fd所代表的文件
4、setDataSource(Context context ,Uri uri):指定装载uri所代表的文件。
MediaPlayer通过如下几个来进行播放控制:
1、prepare():准备音频文件;真正的装载音频文件,相当于缓存
2、start():开始或恢复播放
3、stop():停止播放
4、pause():暂停播放
5、reset():重置为初始状态
6、release():MediaPlayer对象不再使用才去释放mp所占有的资源。不是一首歌完了之后要用的,而是你不再使用mp之后才调用,比如退出
tart和stop之间循环的流程应该是:reset()-->setDataSource(path)-->prepare()-->start()-->stop()--reset()-->重来上述流程一遍
实例
- <RelativeLayout 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"
- tools:context=".MainActivity" >
-
- <ImageView
- android:id="@+id/image1"
- android:layout_margin="15dp"
- android:layout_centerInParent="true"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/cover" />
-
-
- <LinearLayout
- android:id="@+id/l1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:orientation="horizontal" >
-
- <Button
- android:id="@+id/start"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="播放" />
-
- <Button
- android:id="@+id/pre"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="暂停" />
- <Button
- android:id="@+id/reset"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="重来" />
-
- <Button
- android:id="@+id/stop"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="停止" />
- </LinearLayout>
- <SeekBar
- android:id="@+id/seekbar1"
- android:layout_above="@id/l1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- </RelativeLayout>
- package com.android.xiong.mediaplayers;
-
- import java.io.IOException;
- import java.util.Date;
- import java.util.Timer;
- import java.util.TimerTask;
-
- import android.app.Activity;
- import android.media.MediaPlayer;
- import android.media.MediaPlayer.OnCompletionListener;
- import android.media.MediaPlayer.OnErrorListener;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.SeekBar;
- import android.widget.SeekBar.OnSeekBarChangeListener;
-
- public class MainActivity extends Activity {
-
- private Button start, stop, pre, reset;
- private SeekBar seekbar1;
- private MediaPlayer mediaPlayer;
- boolean isperson;
- int currentPlay = 0;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- start = (Button) findViewById(R.id.start);
- stop = (Button) findViewById(R.id.stop);
- pre = (Button) findViewById(R.id.pre);
- reset = (Button) findViewById(R.id.reset);
- seekbar1 = (SeekBar) findViewById(R.id.seekbar1);
- mediaPlayer = MediaPlayer.create(this, R.raw.hello);
- SeekBarChage seekbar = new SeekBarChage();
- seekbar1.setOnSeekBarChangeListener(seekbar);
-
- seekbar1.setMax(mediaPlayer.getDuration());
-
- start.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
-
- if (mediaPlayer.isPlaying()) {
- mediaPlayer.seekTo(0);
- } else {
- mediaPlayer = MediaPlayer.create(MainActivity.this,
- R.raw.hello);
- mediaPlayer.start();
- }
- seekbar1.setProgress(0);
-
- new Timer().schedule(new TimerTask() {
-
- @Override
- public void run() {
- if (isperson == true)
- return;
- seekbar1.setProgress(mediaPlayer.getCurrentPosition());
- }
- }, 0, 10);
- }
- });
- reset.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- if (mediaPlayer.isPlaying()) {
- mediaPlayer.seekTo(0);
- } else {
- mediaPlayer = MediaPlayer.create(MainActivity.this,
- R.raw.hello);
- mediaPlayer.start();
- }
- seekbar1.setProgress(0);
- }
- });
- stop.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- mediaPlayer.stop();
- }
- });
- pre.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- mediaPlayer.pause();
- }
- });
- }
-
- class SeekBarChage implements OnSeekBarChangeListener {
-
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress,
- boolean fromUser) {
- }
-
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- isperson = true;
- }
-
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- currentPlay = seekBar.getProgress();
- mediaPlayer.seekTo(currentPlay);
- isperson = false;
- }
-
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
-
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
-
- }