android:
layout_height="wrap_content"
android:
layout_width="fill_parent"
android:
layout_y="300dp"
android:
id="@+id/curtimeandtotaltime"
/>
android:
orientation="horizontal"
android:
layout_width="fill_parent"
android:
layout_height="wrap_content"
>
android:
id="@+id/front_button"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_marginLeft="10dip"
android:
background="@drawable/first1"/>
android:
id="@+id/stop_button"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
background="@drawable/stop1"
android:
layout_marginLeft="10dip"
/>
android:
id="@+id/start_button"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
background="@drawable/start1"
android:
layout_marginLeft="10dip"
/>
android:
id="@+id/pause_button"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
background="@drawable/pose1"
android:
layout_marginLeft="10dip"
/>
android:
id="@+id/next_button"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
background="@drawable/next1"
android:
layout_marginLeft="10dip"
/>
importjava.io.File;
importjava.io.FilenameFilter;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.ListActivity;
importandroid.graphics.Color;
importandroid.graphics.drawable.GradientDrawable;
importandroid.graphics.drawable.GradientDrawable.Orientation;
importandroid.media.MediaPlayer;
importandroid.media.MediaPlayer.OnCompletionListener;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.view.KeyEvent;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.ArrayAdapter;
importandroid.widget.ImageButton;
importandroid.widget.ListView;
importandroid.widget.SeekBar;
importandroid.widget.SeekBar.OnSeekBarChangeListener;
importandroid.widget.TextView;
publicclassMainActivityextendsListActivity{
privateImageButtonmFrontImageButton=null;
privateImageButtonmStopImageButton=null;
privateImageButtonmStartImageButton=null;
privateImageButtonmPauseImageButton=null;
privateImageButtonmNextImageButton=null;
/*界说进度handler,显示百分比进度*/
HandlermPercentHandler=newHandler();
privateSeekBarmSeekBar=null;
privateTextViewcurProgressText=null;
privateTextViewcurtimeAndTotaltime=null;
publicMediaPlayermMediaPlayer;
privateListmMusicList=newArrayList();
privateintcurrentListItem=0;
privatestaticfinalStringMUSIC_PATH=newString("/sdcard/");
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
musicList();
mMediaPlayer=newMediaPlayer();
initmFrontMusic();
initStopMusic();
initStartMusic();
initPauseMusic();
initNextMusic();
initSeekBar();
}
publicvoidinitmFrontMusic()
{
mFrontImageButton=(ImageButton)findViewById(R.id.front_button);
mFrontImageButton.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewarg0){
if(--currentListItem>=0){
currentListItem=mMusicList.size();
}else{
playMusic(MUSIC_PATH+mMusicList.get(currentListItem));
}
}
});
}
publicvoidinitStopMusic()
{
mStopImageButton=(ImageButton)findViewById(R.id.stop_button);
mStopImageButton.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewarg0){
if(mMediaPlayer.isPlaying())
{
mMediaPlayer.reset();
}
}
});
}
publicvoidinitStartMusic()
{
mStartImageButton=(ImageButton)findViewById(R.id.start_button);
mStartImageButton.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewarg0){
playMusic(MUSIC_PATH+mMusicList.get(currentListItem));
startSeekBarUpdate();
}
});
}
publicvoidinitPauseMusic()
{
mPauseImageButton=(ImageButton)findViewById(R.id.pause_button);
mPauseImageButton.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewarg0){
if(mMediaPlayer.isPlaying()){
mMediaPlayer.pause();
}
else{
mMediaPlayer.start();
}
}
});
}
publicvoidinitNextMusic()
{
mNextImageButton=(ImageButton)findViewById(R.id.next_button);
mNextImageButton.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewarg0){
nextMusic();
}
});
}
publicvoidinitSeekBar()
{
/*初始化拖动条和以后进度显示值*/
mSeekBar=(SeekBar)findViewById(R.id.SeekBar01);
curProgressText=(TextView)findViewById(R.id.currentProgress);
curtimeAndTotaltime=(TextView)findViewById(R.id.curtimeandtotaltime);
mSeekBar.setOnSeekBarChangeListener(newOnSeekBarChangeListener(){
publicvoidonProgressChanged(SeekBarseekBar,intprogress,
booleanfromUser){
/*如果拖动进度发生改变,则显示以后进度值*/
curProgressText.setText("以后进度:
"+progress);
}
publicvoidonStartTrackingTouch(SeekBararg0){
curProgressText.setText("拖动中...");
}
publicvoidonStopTrackingTouch(SeekBararg0){
intdest=mSeekBar.getProgress();
intmMax=mMediaPlayer.getDuration();
intsMax=mSeekBar.getMax();
mMediaPlayer.seekTo(mMax*dest/sMax);
}
});
}
privatevoidplayMusic(Stringpath)
{
try{
mMediaPlayer.reset();
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepare();
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener(newOnCompletionListener(){
publicvoidonCompletion(MediaPlayerarg0){
nextMusic();
}
});
}catch(IOExceptione){
e.printStackTrace();
}
}
privatevoidnextMusic()
{
if(++currentListItem>=mMusicList.size())
{
currentListItem=0;
}
else
{
playMusic(MUSIC_PATH+mMusicList.get(currentListItem));
}
}
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if(keyCode==KeyEvent.KEYCODE_BACK){
mMediaPlayer.stop();
mMediaPlayer.release();
}
returnsuper.onKeyDown(keyCode,event);
}
@Override
protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){
currentListItem=position;
playMusic(MUSIC_PATH+mMusicList.get(position));
super.onListItemClick(l,v,position,id);
}
//播放列表
publicvoidmusicList()
{
Filehome=newFile(MUSIC_PATH);
if(home.listFiles(newMusicFilter()).length>0)
{
for(Filefile:
home.listFiles(newMusicFilter()))
{
mMusicList.add(file.getName());
}
ArrayAdaptermusicList=newArrayAdapter(MainActivity.this,R.layout.musicitem,mMusicList);
setListAdapter(musicList);
}
}
/*更新拖动条进度*/
publicvoidstartSeekBarUpdate(){
mPercentHandler.post(start);
}
Runnablestart=newRunnable(){
publicvoidrun(){
//用一个handler更新SeekBar
mPercentHandler.post(updatesb);
}
};
Runnableupdatesb=newRunnable(){
publicvoidrun(){
intposition=mMediaPlayer.getCurrentPosition();
intmMax=mMediaPlayer.getDuration();
intsMax=mSeekBar.getMax();
mSeekBar.setProgress(position*sMax/mMax);
curtimeAndTotaltime.setText("以后播放时间:
"+position/1000+"秒"
+"\n歌曲总时间:
"+mMax/1000+"秒");
//每秒钟更新一次
mPercentHandler.postDelayed(updatesb,1000);
}
};
//过滤文件类型
classMusicFilterimplementsFilenameFilter
{
publicbooleanaccept(Filedir,Stringname){
//这里还可以设置其他格式的音乐文件
return(name.endsWith(".mp3"));
}
}
}
心得
(1)通过本次开发解决了诸如SD卡音乐文件搜索并显示、联网搜索歌曲等难题,对安卓的开发有了更深入的认识.
(2)通过对Android手机平台的音乐播放器软件的开发,使我对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识.开发Android音乐播放器,要抓住开发的核心部份,音乐播放器年夜体由播放主界面、播放列表、菜单、播放设置、文件浏览、歌曲搜索六年夜核心组成.
(3)本次法式设计,对播放器的系统结构框架做了精心的构思与设计,采纳主要开发工具是Eclips4.0+Java语言的支持,AndroidDevelopmentTool的插件,和AndroidSDK2.1版本的全面结合,才使整个音乐播放器系统得以实现.
课程设计教师评语及成果
指导教师: