在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);
}
}
分享到:
相关推荐
在这个实例中,可能还包含了如何在用户界面(UI)上集成MediaPlayer控件,如使用Button来控制播放、暂停和停止,或者使用SeekBar来调整播放进度。可能还会涉及监听MediaPlayer的状态变化,例如通过实现`...
Android 使用mediaplayer播放res/raw文件夹中的音乐的实例 (1)在res文件夹中新建一个文件夹重命名为raw,并且将要播放的音乐放到raw文件夹里面 (2)修改layout目录下的xml布局文件,添加3个按钮空间和一个文本...
在描述中提到的"android声音播放实例",可能是一个简单的应用示例,展示了如何使用`MediaPlayer`来播放音频文件。`MediaPlayer`提供了创建、加载、播放、控制和销毁音频资源的方法。 1. 创建`MediaPlayer`对象:...
在音乐播放器中,Service用于在后台持续播放音乐,即使用户离开应用,音乐依然可以继续播放。开发者需要理解如何创建和启动Service,以及如何在Service中处理音频流。 2. **Fragment**:Fragment是Android应用程序...
可以使用`MediaMetadataRetriever`类获取音频文件的基本信息,如专辑封面、艺术家名等,而无需实际播放音乐。同时,通过`AsyncTask`或`IntentService`在后台线程加载大文件,避免阻塞主线程。 最后,别忘了处理权限...
在Android中,长时间运行的任务(如播放音乐)通常需要在后台进行,这就需要用到`Service`。我们可以创建一个`IntentService`或者普通的`Service`,在这里处理音乐的播放逻辑,这样即使用户离开应用程序,音乐也...
### Android Studio 项目实例详解:音乐播放器 #### 项目概览 本项目是一个基于 Android Studio 开发的音乐播放器应用实例。它不仅为初学者提供了一个完整的实践平台,也适用于有一定经验的开发者来深入探索 ...
"循环播放无声音乐"是一种常见的保活策略,它利用了Android系统对媒体播放服务的优先级处理,使得应用能在后台保持活动状态。以下是对这一技术的详细解读。 1. **Android后台服务** Android系统允许开发者创建服务...
"Android MediaPlayer播放mp3的实例" Android 中的 MediaPlayer 是一个功能强大且复杂的媒体播放器,可以播放音频和视频文件。在 Android 的界面上,Music 和 Video 两个应用程序都是调用 MediaPlayer 实现的。...
本实例将探讨如何在Android应用中通过调用API来调整左右声道的声音输出,从而实现立体声效果的定制。 首先,我们需要理解Android的音频框架。Android的音频系统基于OpenSL ES,这是一个跨平台的API,提供了丰富的...
在Android中,`Service`是一种没有用户界面的组件,它通常用于执行长时间运行的任务,如播放音乐、下载数据等。`Service`有两种启动方式:通过`startService()`启动(异步执行,可以随时停止)和通过`bindService()`...
9. 第三方库集成:许多第三方库如ButterKnife、Dagger2、Retrofit、RxJava等简化了开发流程,实例中可能会包含这些库的使用教程。 10. 性能优化:包括内存管理、UI流畅性、耗电优化等,"性能监控与调试"实例可以...
4. **播放音乐**:调用`start()`方法来开始播放音频: ```java mediaPlayer.start(); ``` 5. **控制和管理播放**:你可以使用`MediaPlayer`提供的其他方法来控制播放,如暂停(`pause()`)、停止(`stop()`)、重置...
开发者需要实例化`MediaPlayer`对象,设置数据源,准备并开始播放音乐。 4. **MediaController类**:提供了一个UI控件,用于展示音乐播放的控制按钮,如播放/暂停、前进、后退等,同时可以显示歌曲进度。 5. **UI...
- `MediaPlayer`通常与`Service`结合使用,即使在应用后台运行,也能持续播放音乐。` foreground service `可以确保即使在锁屏或应用被切换到后台时,音乐也不会被中断。 5. **通知栏控制** - 当音乐在后台播放时...
在Android平台上实现背景音乐播放是开发游戏或应用时常见的需求,它可以为用户提供更沉浸式的体验...例如,可以使用服务(Service)来在后台持续播放音乐,或者使用音乐播放库(如ExoPlayer)以获得更好的性能和控制。
在Android平台上,开发一款音乐播放器时,有时我们需要控制或与其他音乐播放器进行交互,比如在用户切换到我们的应用时暂停其他正在播放的音乐。这个功能可以通过发送自定义广播(Broadcast)并监听特定的意图...
5. **服务(Service)**:Android Service用于在后台长时间运行,实例可能包括音乐播放服务、定时任务服务等,教你如何正确管理和使用服务。 6. **广播接收器(BroadcastReceiver)**:广播接收器可以监听系统或...