`
myclover
  • 浏览: 191258 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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 使用mediaplayer播放res/raw文件夹中的音乐的实例

    Android 使用mediaplayer播放res/raw文件夹中的音乐的实例 (1)在res文件夹中新建一个文件夹重命名为raw,并且将要播放的音乐放到raw文件夹里面 (2)修改layout目录下的xml布局文件,添加3个按钮空间和一个文本...

    Android实例之音乐播放器

    Android实例之音乐播放器,实现诸多功能,如快进快退,上下循环等。

    Android实例源码-音乐播放器类安卓源代码(9例).zip

    Android多线程断点续传下载+在线播放音乐 GL音乐播放器 基于SDL、FFmpeg的android播放器源码 简单实用的音乐播放器 简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片 边...

    Android音乐播放器实例教学Demo

    仿某知名音乐播放器的Android版本app Demo+源码,适合新手和进阶人员使用同时学习代码

    Android实例之MediaPlayer播放音乐和视频

    2.保证无毒 3.简单,方便,实用 4.实例可以自行改用 5.如有非法,本人无法律责任,由改动代码人负责! 6.需要更多本人作品,查找标签“朱建强” 7.请下载,杀毒后再使用!

    android开发实例大全_王东华

    实例105: 在线播放网络中的MP3 371 实例106: 在线下载音乐作为手机铃声 379 实例107: 播放GIF格式的动画 385 实例108: 在手机中播放MP4视频 391 实例109: 在线观看3GP视频 394 第9章 Google地图实例集锦 403 ...

    Service实例-音乐播放器后台服务运行播放

    安卓Serice 实例 - 音乐播放器后台运行实例 ,可以播放音乐和 停止 音乐

    Android简单音乐播放实例

    Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,例如我们打开一个音乐播放器来听音乐,在听音乐的...

    Android Studio音乐播放器简单例子

    用Android Studio制作的一个音乐播放器。运行环境为Android6.0,能够播放音乐,同时有歌手的图片能够旋转,具有滑块。

    Android多媒体编程代码实例

    实例中包含了Android多媒体编程所涉及到的一些基本方面:视频、音频处理,拍照摄像、播放音乐、图像处理等

    Android实现mp3音乐示波器及播放设置实例

    Android实现了MP3等音乐示波器和设置均衡器、重低音和音场的功能。

    android 初学者实例

    android 初学者实例源码,有两个activity 之间的切换,访问电话本,service 后台播放音乐

    Android音乐播放器的开发高清完整实例.zip

    本资源是引导大家做一个音乐播放器的源码打包文件,在做这个Android开发实例的过程中,能够帮助大家进一步熟悉和掌握学过的ListView和其他一些组件。为了有更好的学习效果,其中很多功能我们手动实现,例如拖动音乐...

    Android audio多媒体播放器的相关编程实例

    onCreate时创建MediaPlayer对象,将音乐以Import的方式存储在res/raw/always.mp3,在Android系统运行播放音乐的按钮,覆盖OnClick事件,在MediaPlayer取得播放资源与stop()之后,要准备Playback的状态前一定要使用...

    android实现音乐播放器进度条效果

    本文实例为大家分享了android实现音乐播放器进度条效果的具体代码,供大家参考,具体内容如下 效果图 依赖3个对象 MediaPlayer:实现音乐播放,暂停,缓冲。 SeekBar:滑动的进度条。 java.util.Timer:定时器,时时...

    Android播放器源码实例.rar

    安卓系统中的Android音乐播放器源码实例,编写运行于Android手机中的播放器时,这些相关例子可以参考哦。

Global site tag (gtag.js) - Google Analytics