android中播放音乐的实例
16lz
2021-12-04
在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);}}
更多相关文章
- 2013.6.18 Android(安卓)SDK和最新ADT下载地址
- android studio调整默认的debug.keystore位置。
- Android之自定义ProgressBar
- android的文件操作
- linux下eclipse构建并编译android一个简单jni项目
- android 读取raw文件下文件内容
- Android(安卓)实现文件(图片)上传
- Android应用程序键盘(Keyboard)消息处理机制分析(12)
- android客户端利用sokcet通信和向Java服务端发请求,Java服务端把