Android之MediaPlayer 音频播放

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) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}



你可能感兴趣的:(android,音乐播放器,mediaplayer)