android中播放音乐的实例

在android中使用MediaPlayer播放音乐的实例。
package com.myclover.music;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MusicPlayActivity extends ListActivity {
	
	private static final String TAG = "MusicPlayActivity";
	//sdcard卡路径
	private static final String MUSIC_PATH = "/sdcard/";
	//媒体对象
	private MediaPlayer mediaPlayer;
	//存放音乐名称
	private List<String> musicList = new ArrayList<String>();
	//播放列表索引
	private int currentMusicIndex = 0;
	//显示当前播放的文件信息
	private TextView playingMusic;

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //实例化媒体对象
        mediaPlayer = new MediaPlayer();
        
        //如果读取的是res下的raw文件夹中的文件,则采用以下方式,一般是背景音乐的时候采用该方式
//        mediaPlayer = MediaPlayer.create(MusicPlayActivity.this, R.raw.wait);
        //设置循环播放
//        mediaPlayer.setLooping(true);
        
        //初始化音乐列表
        initMusicList();
        
        //上一曲图片按钮
        ImageButton previousBtn = (ImageButton)findViewById(R.id.previousBtn);
        //停止图片按钮
        ImageButton stopBtn = (ImageButton)findViewById(R.id.stopBtn);
        //开始图片按钮
        ImageButton startBtn = (ImageButton)findViewById(R.id.startBtn);
        //暂停图片按钮
        ImageButton pauseBtn = (ImageButton)findViewById(R.id.pauseBtn);
        //下一曲图片按钮
        ImageButton nextBtn = (ImageButton)findViewById(R.id.nextBtn);
        playingMusic = (TextView)findViewById(R.id.playingMusic);
        
        previousBtn.setOnClickListener(listener);
        stopBtn.setOnClickListener(listener);
        startBtn.setOnClickListener(listener);
        pauseBtn.setOnClickListener(listener);
        nextBtn.setOnClickListener(listener);
        
    }
	
	//定义一个监听器变量
	private View.OnClickListener listener = new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			Log.i(TAG, "musicList size = " + musicList.size());
			if(musicList.size() > 0){
				ImageButton imgBtn = (ImageButton)v;
				switch (imgBtn.getId()) {
				case R.id.previousBtn:
					//上一首歌曲
					playPreviousMusic();
					break;
				case R.id.stopBtn:
					//停止当前播放的歌曲
					if(mediaPlayer.isPlaying()){
						mediaPlayer.reset();
					}else{
						Toast.makeText(MusicPlayActivity.this, R.string.noPlaying, Toast.LENGTH_LONG).show();
					}
					break;
				case R.id.startBtn:
					//开始播放
					playMusic(MUSIC_PATH + musicList.get(currentMusicIndex));
					break;
				case R.id.pauseBtn:
					//暂停播放
					if(mediaPlayer.isPlaying()){
						//如果文件正在播放,则暂停
						mediaPlayer.pause();
					}else{
						//文件不在播放,则进行播放
						mediaPlayer.start();
					}
					break;
				case R.id.nextBtn:
					//下一首歌曲
					playNextMusic();
					break;
				}
			}else{
				//如果sdcard卡中没有匹配的音乐文件,则给出相应的提示
				Toast.makeText(MusicPlayActivity.this, R.string.notExistsMusic, Toast.LENGTH_LONG).show();
			}
		}
	};
	
	//定义一个内部类,实现文件的过滤
	class MusicFileFilter implements FilenameFilter{
		@Override
		public boolean accept(File dir, String filename) {
			return (filename.endsWith(".mp3") || filename.endsWith(".wav"));
		}
	}
	
	//初始化音乐文件列表
	private void initMusicList(){
		File files = new File(MUSIC_PATH);
		if(!files.exists() || !files.isDirectory()){
			return;
		}
		MusicFileFilter musicFilter = new MusicFileFilter();
		if(files.listFiles(musicFilter).length > 0){
			for(File f : files.listFiles(musicFilter)){
				musicList.add(f.getName());
			}
			//构建一个ArrayAdapter
			ArrayAdapter<String> musicAdapter = new ArrayAdapter<String>(MusicPlayActivity.this,R.layout.music, musicList);
			//设置显示列表,继承了ListActivity类才有该方法
			setListAdapter(musicAdapter);
		}
	}
	
	/**
	 * 播放音乐
	 * @param musicPath 音乐文件所在的路径
	 */
	private void playMusic(String musicPath){
		try {
			//重置mediaPlayer实例,reset之后处于空闲状态
			mediaPlayer.reset();
			//设置需要播放的音乐文件的路径,只有设置了文件路径之后才能调用prepare
			mediaPlayer.setDataSource(musicPath);
			//准备播放,只有调用了prepare之后才能调用start
			mediaPlayer.prepare();
			//开始播放
			mediaPlayer.start();
			Log.i(TAG, "playMusic currentMusicIndex = " + currentMusicIndex);
			playingMusic.setText(getString(R.string.palyingMusic) + musicList.get(currentMusicIndex));
			mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
				@Override
				public void onCompletion(MediaPlayer mp) {
					//顺序播放
					playNextMusic();
				}
			});
		} catch (Exception e) {
			Log.e(TAG, "playMusic error " + e);
		} 
	}
	
	//下一曲
	private void playNextMusic(){
		Log.i(TAG, "playNextMusic currentMusicIndex = " + currentMusicIndex);
		//如果当前已经到最后一曲,则再下一曲就变为第一曲
		if(++currentMusicIndex >= musicList.size()){
			currentMusicIndex = 0;
		}
		playMusic(MUSIC_PATH + musicList.get(currentMusicIndex));
	}
	
	//上一曲
	private void playPreviousMusic(){
		Log.i(TAG, "playPreviousMusic currentMusicIndex = " + currentMusicIndex);
		//如果当前已经是第一曲,则再上一曲变为最后一曲
		if(--currentMusicIndex < 0){
			currentMusicIndex = musicList.size() - 1;
		}
		playMusic(MUSIC_PATH + musicList.get(currentMusicIndex));
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		//点击音乐列表进行播放当前点击的音乐文件
		currentMusicIndex = position;
		playMusic(MUSIC_PATH + musicList.get(currentMusicIndex));
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		//如果按了返回键之后进行停止并退出应用
		if(keyCode == KeyEvent.KEYCODE_BACK){
			if(mediaPlayer.isPlaying()){
				mediaPlayer.stop();
			}
			//应用退出之前释放媒体资源,处于结束状态
			mediaPlayer.release();
			MusicPlayActivity.this.finish();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

}

你可能感兴趣的:(android,F#,OS,音乐)