在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() {@Overridepublic 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{@Overridepublic 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());}//构建一个ArrayAdapterArrayAdapter<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();//设置需要播放的音乐文件的路径,只有设置了文件路径之后才能调用preparemediaPlayer.setDataSource(musicPath);//准备播放,只有调用了prepare之后才能调用startmediaPlayer.prepare();//开始播放mediaPlayer.start();Log.i(TAG, "playMusic currentMusicIndex = " + currentMusicIndex);playingMusic.setText(getString(R.string.palyingMusic) + musicList.get(currentMusicIndex));mediaPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic 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));}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {//点击音乐列表进行播放当前点击的音乐文件currentMusicIndex = position;playMusic(MUSIC_PATH + musicList.get(currentMusicIndex));}@Overridepublic 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);}}

更多相关文章

  1. 2013.6.18 Android(安卓)SDK和最新ADT下载地址
  2. android studio调整默认的debug.keystore位置。
  3. Android之自定义ProgressBar
  4. android的文件操作
  5. linux下eclipse构建并编译android一个简单jni项目
  6. android 读取raw文件下文件内容
  7. Android(安卓)实现文件(图片)上传
  8. Android应用程序键盘(Keyboard)消息处理机制分析(12)
  9. android客户端利用sokcet通信和向Java服务端发请求,Java服务端把

随机推荐

  1. android触摸事件传递机制以及onIntercept
  2. android设置屏幕方向与自动感应切换
  3. Android(安卓)RecycleView实现不同样式It
  4. android EditText属性详解
  5. 工欲善其事必先利其器之Android环境搭建
  6. 【Android】一键清理后台实现【附源码】
  7. Android自定义控件2:自定义带下划线的文本
  8. ubuntu 字体 android stuido 汉字 显示
  9. pAdTy_-7 管理活动的生命周期
  10. 内网安装tcpdump问题排查