实现播放,暂停,停止,进度条。
package com.example.lab6; import java.io.File; import java.util.ArrayList; import java.util.Timer; import java.util.TimerTask; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.media.MediaPlayer.OnPreparedListener; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.Toast; public class MainActivity extends ActionBarActivity { Button play, pause, stop; SeekBar seekBar; MediaPlayer mediaPlayer = new MediaPlayer(); ListView lv; String musicPath = "mnt/sdcard/Music/"; ArrayList<String> musicName = new ArrayList<String>(); int currentListItem; int position = 0; // 计时 Timer timer = new Timer(); TimerTask task; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findView(); musicList(); timeSchedule(); mpListener(); listener(); } void findView() { play = (Button) findViewById(R.id.play); pause = (Button) findViewById(R.id.pause); stop = (Button) findViewById(R.id.stop); seekBar = (SeekBar) findViewById(R.id.seekbar); } void musicList() { lv = (ListView) findViewById(R.id.listView); /* 用于ListView的适配器 */ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, getData()); /* 将ArrayAdapter添加到ListView对象中 */ lv.setAdapter(adapter); } private ArrayList<String> getData() { File sdcardDir = new File(musicPath); File[] mp3s = sdcardDir.listFiles(); if (mp3s == null || mp3s.length == 0) { Toast.makeText(getApplicationContext(), "no file", Toast.LENGTH_LONG).show(); } else { for (int i = 0; i < mp3s.length; i++) { musicName.add(mp3s[i].getName()); } } return musicName; } void timeSchedule() { task = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub if (mediaPlayer != null && mediaPlayer.isPlaying()) { int progress = mediaPlayer.getCurrentPosition(); int total = mediaPlayer.getDuration(); seekBar.setMax(total); seekBar.setProgress(progress); } } }; timer.schedule(task, 500, 200);// 从现在起500毫秒后,每隔200毫秒执行一次task } void mpListener() { mediaPlayer.setOnCompletionListener(new OnCompletionListener() {// 播放完毕后回调 public void onCompletion(MediaPlayer mp) { Toast.makeText(MainActivity.this, "播放完毕!", 0).show(); mediaPlayer.reset();// MediaPlayer同时只能播放一个音乐文件,若要播另一个音乐文件,需先设置为初始状态 play.setEnabled(true); } }); mediaPlayer.setOnPreparedListener(new OnPreparedListener() {// 准备完毕后回调 @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start();// 只有准备好以后才能播放 Toast.makeText(MainActivity.this, "哈哈,准备好了!", 0).show(); } }); mediaPlayer.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer paramMediaPlayer, int paramInt1, int paramInt2) { Toast.makeText(MainActivity.this, "报错了--" + paramInt1 + "--" + paramInt2, 0).show(); return false; } }); } void listener() { lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { // TODO Auto-generated method stub currentListItem = position; Toast.makeText(getApplicationContext(), musicName.get(currentListItem), Toast.LENGTH_LONG) .show(); } }); play.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub String filePath = musicPath + musicName.get(currentListItem); File file = new File(filePath); if (file.exists()) { try { mediaPlayer.setDataSource(filePath); System.out.println(filePath); mediaPlayer .setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepare(); // mediaPlayer.start(); play.setEnabled(false); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(getApplicationContext(), "文件不存在", 0).show(); } } }); pause.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub if (mediaPlayer != null) { if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); pause.setText("Continue"); } else { mediaPlayer.start(); pause.setText("Pause"); return; } } } }); stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.stop(); } mediaPlayer.reset(); play.setEnabled(true); pause.setText("Pause"); } }); // 拖动进度条的事件监听需要实现SeekBar.OnSeekBarChangeListener接口 seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override // 该方法拖动进度条停止拖动的时候调用 public void onStopTrackingTouch(SeekBar bar) { // TODO Auto-generated method stub position = seekBar.getProgress(); if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.seekTo(position); } } @Override public void onStartTrackingTouch(SeekBar arg0) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { // TODO Auto-generated method stub } }); } }