




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本文出自:欢迎转载,转载请注明出自: 安卓开发网 下面将和大家一起介绍一个音乐播放器项目, 完成后的播放器具有暂停, 下一首, 前一首,歌曲列表,播放条进度等一些基本功能,它只是播放SDCARDk的.map文件,Android SDK 为我们提供了一个 MeidaPlayer 类,有了这个类我们可以很方便的创建一个 mdeiaplayer 服务,该类中具有一些方法:MediaPlayer mp = new MediaPlayer();/ 设置文件存储路径 setDataSource(/sdcard/path_to_song);/ 播放mp.start();/ 暂短mp.pause();/ 复位
2、mp.reset();/ 获取当前播放时长 mp.getDuration();/ 进度条mp.getCurrentDuration();/ Move song to particular second - used for Forward or Backward mp.seekTo(positon); / position in milliseconds/ 检测歌曲是否正在播放 mp.isPlaying(); / returns true or false 1:音乐播放器的界面:Android Build!n官 Audio Player播放器界面中所用的一些布局图片,这些图片大家可以到an d
3、roid SDK文件夹下或是到网络中去寻找一些类似就可以,并不一定要这些图片,代码才是我们的关键,AndmidAndroid Audio Player ICONSPlay DeafultPlay FocusedPause Deafult Pause FocusedBackward DefauItBackward Focused0Forward DefaultForward FocusedNext DefaultNext FocusedPrevious DefaultPrevious FocusedRepeat Default乂 Shuffle DefaultRepeat Focused2/ S
4、huffle FocusedPlaylist DefaultPlaylist FocusedSeekbar BackgroundSeekbar ProgressSeekbar Thuib3:然后我们需要写一个 XML 布局文件用于播放器的播按钮在不同状态下的图片,此 XML 文件保存在 drawable 文件夹下,btn_play.xml 提示:大家可以根据此 XML 文件完成其它的一些按钮布局文件,在这里就没有再为大家一一提供了,4:为了让播放器更绚,我们可以自定义一个 SeekBar 作为歌曲的播放进度,自定义风格代如 下:(4.1) 更换背景图片: seekbar_progress_bg
5、.xml(4.2) Changing SeekBar Progress:seekbar_progress.xml(4.3) 实际的 Seekbar 控件定义如下 :5:接下来我们将实现播放的整体界面的布局文件: player.xml 6: 有了播放器的播放界面后,我们再将所有歌曲显示的界面实现了,播放器的歌曲列表用 的一个 listview 控件,同样我们也为该 listview 控件自定义,适合播放的整体界面风格, list_selector.xml歌曲列表界面布局文件:playlist.xmllistviewr 的 item 界面布局,用于定义单个歌曲的显示界面:playlist_item
6、.xml 歌曲列表界面图:And rold Building Andia Pla/erAr draid Build ingMusEc PlayerWhit& FlagThe Good, The Bad And The UglyMichael Jackscn Earth Songrm No AngelMunt&rFalling SkwlyEnrique rglesi Tir&d Of Being SorryEnnio Morricone - Dim lightEininefn-pace Sound7:到此为止我们在上面已经完成了该项目的所有布局文件,下面我们就来实现SongManager.jav
7、a类,这个类用于扫描设备中所有.mp3文件,Son gsMa nager.mp3public class Son gsMa nager / SDCard Pathfinal Stri ng MEDIA_PATH = new Stri ng(/sdcard/);private ArrayListHashMap songsList = new ArrayListHashMap();/ Con structorpublic Son gsMa nager()/* Fun cti on to read all mp3 files from sdcard* and store the details in
8、 ArrayList* */public ArrayListHashMap getPlayList()= new );if (home.listFiles(new ().length 0) for ( : home.listFiles(new () HashMap song = new HashMap(); song.put(songTitle, ().substring(0, ().length() - 4); song.put(songPath, ();/ Adding each song to SongListsongsList.add(song);/ return songs list
9、 arrayreturn songsList;/* Class to filter files which are having .mp3 extension* * class implements public boolean accept(, String name) return (name.endsWith(.mp3) | name.endsWith(.MP3);8:创建一个新的 Activity 类,该类用于显示在 ongsManager.java 中扫描到的所有歌曲, PlayListActivity.javapackage com.androidhive.musicplayer;
10、import java.util.ArrayList;import java.util.HashMap;import android.app.ListActivity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListAdapter;import android
11、.widget.ListView;import android.widget.SimpleAdapter;public class PlayListActivity extends ListActivity / Songs listpublic ArrayListHashMap songsList = new ArrayListHashMap();Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.playlist)
12、;ArrayListHashMap songsListData = new ArrayListHashMap();SongsManager plm = new SongsManager();/ get all songs from sdcard this.songsList = plm.getPlayList();/ looping through playlistfor (int i = 0; i songsList.size(); i+) / creating new HashMap HashMap song = songsList.get(i);/ adding HashList to
13、ArrayList songsListData.add(song);/ Adding menuItems to ListViewListAdapter adapter = new SimpleAdapter(this, songsListData, R.layout.playlist_item, new String songTitle , new int R.id.songTitle );setListAdapter(adapter);/ selecting single ListView item ListView lv = getListView();/ listening to sin
14、gle listitem click lv.setOnItemClickListener(new OnItemClickListener() Overridepublic void onItemClick(AdapterView parent, View view,int position, long id) / getting listitem indexint songIndex = position;/ Starting new intentIntent in = new Intent(getApplicationContext(),AndroidBuildingMusicPlayerA
15、ctivity.class);/ Sending songIndex to PlayerActivityin.putExtra(songIndex, songIndex); setResult(100, in);/ Closing PlayListViewfinish(););9:下面我们再来实现播放的主类 AndroidBuildingMusicPlayerActivity.java: 该类主要实现功能如下:1:在歌曲列表界面点击一首歌曲进入播放界面; 2:播放,暂停,快进,复位等功能实现3:重复播放单一歌曲,随机播放等 该类的完整代码如下:public class AndroidBuild
16、ingMusicPlayerActivity extends Activity implements OnCompletionListener, SeekBar.OnSeekBarChangeListener private ImageButton btnPlay;private ImageButton btnForward;private ImageButton btnBackward;private ImageButton btnNext;private ImageButton btnPrevious;private ImageButton btnPlaylist;private Imag
17、eButton btnRepeat;private ImageButton btnShuffle;private SeekBar songProgressBar;private TextView songTitleLabel;private TextView songCurrentDurationLabel;private TextView songTotalDurationLabel;/ Media Playerprivate MediaPlayer mp;/ Handler to update UI timer, progress bar etc,.private Handler mHan
18、dler = new Handler();private SongsManager songManager;private Utilities utils;private int seekForwardTime = 5000; / 5000 milliseconds private int seekBackwardTime = 5000; / 5000 milliseconds private int currentSongIndex = 0;private boolean isShuffle = false;private boolean isRepeat = false;private A
19、rrayListHashMap songsList = new ArrayListHashMap();Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.player);/ 所有的播放按钮btnPlay = (ImageButton) findViewById(R.id.btnPlay); btnForward = (ImageButton) findViewById(R.id.btnForward);btnBack
20、ward = (ImageButton) findViewById(R.id.btnBackward);btnNext = (ImageButton) findViewById(R.id.btnNext); btnPrevious = (ImageButton) findViewById(R.id.btnPrevious);btnPlaylist = (ImageButton) findViewById(R.id.btnPlaylist);btnRepeat = (ImageButton) findViewById(R.id.btnRepeat);btnShuffle = (ImageButt
21、on) findViewById(R.id.btnShuffle);songProgressBar = (SeekBar) findViewById(R.id.songProgressBar);songTitleLabel = (TextView) findViewById(R.id.songTitle);songCurrentDurationLabel = (TextView) findViewById(R.id.songCurrentDurationLabel);songTotalDurationLabel = (TextView) findViewById(R.id.songTotalD
22、urationLabel);/ Mediaplayermp = new MediaPlayer(); songManager = new SongsManager(); utils = new Utilities();/ Listeners songProgressBar.setOnSeekBarChangeListener(this); / Importantmp.setOnCompletionListener(this); / Important/ 获取所有歌曲列表songsList = songManager.getPlayList();/ 默认从第一首开始播放playSong(0);*
23、 Play button click event* plays a song and changes button to pause image* pauses a song and changes button to play image * */btnPlay.setOnClickListener(new View.OnClickListener()Override public void onClick(View arg0) / check for already playing if(mp.isPlaying() if(mp!=null) mp.pause();/ Changing b
24、utton image to play buttonbtnPlay.setImageResou rce(R.drawable.btn_play);else / Resume song if(mp!=null) mp.start();/ Changing button image to pause buttonbtnPlay.setImageResou rce(R.drawable.btn_pause););Forward button click event Forwards song specified seconds */btnForward.setOnClickListener(newV
25、iew.OnClickListener() Overridepublic void onClick(View arg0) / get current song position int currentPosition =mp.getCurrentPosition();/ check if seekForward time is lesserthan song durationif(currentPosition + seekForwardTime= 0)/ forward song mp.seekTo(currentPosition -seekBackwardTime);else/ backw
26、ard to startingpositionmp.seekTo(0););* Next button click event* 点击 后一首歌事件* */btnNext.setOnClickListener(new View.OnClickListener()Override public void onClick(View arg0) / check if next song is there or not if(currentSongIndex 0) playSong(currentSongIndex -currentSongIndex =else/ play last songplay
27、Song(songsList.size() -1);currentSongIndex =songsList.size() - 1;);循环播放按钮事件*/btnRepeat.setOnClickListener(newView.OnClickListener() Overridepublic void onClick(View arg0) if(isRepeat) isRepeat = false; Toast.makeText(getApplication Context(), Repeat is OFF, Toast.LENGTH_SHORT).show();btnRepeat.setIm
28、ageResource(R. drawable.btn_repeat);else/ make repeat to true isRepeat = true; Toast.makeText(getApplication Context(), Repeat is ON, Toast.LENGTH_SHORT).show();/ make shuffle to false isShuffle = false; btnRepeat.setImageResource(R. drawable.btn_repeat_focused);btnShuffle.setImageResource(R .drawab
29、le.btn_shuffle););/*随机播放按钮事件*/btnShuffle.setOnClickListener(newView.OnClickListener() Overridepublic void onClick(View arg0) if(isShuffle) isShuffle = false; Toast.makeText(getApplication Context(), Shuffle is OFF, Toast.LENGTH_SHORT).show();btnShuffle.setImageResource(R .drawable.btn_shuffle);else/ make repeat to true isShuffle= true;Toast.makeText(getApplication Context(), S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三门峡职业技术学院《对外汉语教学语法研究》2023-2024学年第二学期期末试卷
- 浙江省淮北市2024-2025学年数学五年级第二学期期末监测试题含答案
- 新疆现代职业技术学院《视觉传达设计》2023-2024学年第二学期期末试卷
- 阜阳职业技术学院《高分子复合原理及配方设计A》2023-2024学年第二学期期末试卷
- 大庆师范学院《现代检测技术》2023-2024学年第二学期期末试卷
- 湖南环境生物职业技术学院《分子细胞与医学遗传基础》2023-2024学年第二学期期末试卷
- 江西工业工程职业技术学院《资本运营》2023-2024学年第二学期期末试卷
- 江西省新余市分宜中学2025年高三(下)返校语文试题试卷含解析
- 润滑油行业报告
- 2025 培训讲师雇佣合同 机构终止培训讲师雇佣合同
- GB/T 1420-2015海绵钯
- 键盘显示器接口课件
- 良性前列腺增生诊疗指南
- 预防校园欺凌-共创和谐校园-模拟法庭剧本
- 中国火车发展历程课件
- 执行力、心态管理培训课件
- 河北省廊坊市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- (最新)信贷资产风险分类管理办法
- 不甘屈辱奋勇抗争第三课时甲午风云课件五年级道德与法治
- 家具厂安全生产台帐
- 精神科应急预案PPT课件
评论
0/150
提交评论