package com.example.day502; import android.media.MediaPlayer; import android.net.Uri; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import java.io.File; /** * 创建自定义的音频播放器MediaPlayer */ public class MainActivity extends AppCompatActivity implements MediaPlayer.OnCompletionListener,View.OnTouchListener,View.OnClickListener{ private MediaPlayer mediaPlayer; private Button start,stop; private View view; private int position=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); view=(View)findViewById(R.id.view); start.setOnClickListener(this); stop.setOnClickListener(this); view.setOnTouchListener(this); } @Override protected void onStart() { super.onStart(); File file=new File(Environment.getExternalStorageDirectory().getPath()+"/output_audios.wav"); Uri uri = Uri.fromFile(file); mediaPlayer=MediaPlayer.create(this,uri); //创建MediaPlayer对象加载uri mediaPlayer.setOnCompletionListener(this); mediaPlayer.start(); } @Override protected void onStop() { super.onStop(); mediaPlayer.stop(); mediaPlayer.release(); } @Override public void onCompletion(MediaPlayer mp) { mp.start(); mp.seekTo(position);//定位到保存的位置 } /** * @param v * @param event * @return * * getDuration()返回文件的持续时间如果没有持续时间返回-1即实时流直播 */ @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE) { if (mediaPlayer.isPlaying()) { //计算出滑动的距离最终换算成文件在屏幕上的长度 position = (int) event.getX() * mediaPlayer.getDuration() / view.getWidth(); //定位到拖动的位置 mediaPlayer.seekTo(position); } } return true; } @Override public void onClick(View v) { if (v == start) { mediaPlayer.start(); } if (v == stop) { mediaPlayer.pause(); } } }