面向對象課程設計Android手機音樂播放器_第1頁
面向對象課程設計Android手機音樂播放器_第2頁
面向對象課程設計Android手機音樂播放器_第3頁
面向對象課程設計Android手機音樂播放器_第4頁
面向對象課程設計Android手機音樂播放器_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、武漢職業(yè)技術學院 課程名稱:面向對象課程設計 題 目:android手機音樂播放器 專 業(yè):軟件技術 班 級:軟件09301班 姓 名: 學 號:指導老師: 2011 年12月15日至2011年12月25日程序設計任務書設計題目: 手機音樂播放器設計目的本課程的設計的目的是通過實踐使同學們經歷android開發(fā)全過程和受到一次綜合訓練,以便能較全面地理解、掌握和綜合運用所學的知識。結合具體的開發(fā)案例,理解并初步掌握系統(tǒng)分析、系統(tǒng)設計、系統(tǒng)實施的主要環(huán)節(jié)和步驟以及軟件文檔的制作能力。要求完成的主要任務:(包括課程設計工作量及其技術要求,以及說明書撰寫等具體要求)主要任務:1 完成主界面設計2 選

2、擇要播放的文件,構成播放列表3 實現播放、暫停、結束功能4 實現音量調節(jié)和循環(huán)播放選擇功能5 實現后臺運行設計報告撰寫格式要求:大標題:黑體 三號字 加粗小標題:宋體 四號字 加粗正文: 宋體 五號字時間安排:16周-19周消化資料、系統(tǒng)調查 1天 系統(tǒng)分析 1天總體設計 2天 實施計劃(編寫代碼) 3天撰寫報告 1天 演示、驗收 1天具體要求1、明確課程設計的目的和重要性,認真領會課程設計的題目,學會設計的基本方法與步驟,學會如何運用前修知識與收集、歸納相關資料解決具體問題的方法。嚴格要求自己,要獨立思考,按時、獨立完成課程設計任務。2、設計報告:要求層次清楚、整潔規(guī)范、不得相互抄襲,凡正文

3、內容有整段完全相同者一律以抄襲論處。設計報告正文字數不少于0.2萬字(不包括附錄)指 導 教 師 簽 字: 年 月 日系 主 任 簽 字: 年 月 日1、 播放器的主要功能 1、自動查找sd卡中的音樂播放文件,生成播放列表。 2、具有播放,暫停,下一曲,上一曲,循環(huán)播放的功能。 3、打接電話時音樂停止,掛掉電話后重新回到播放界面繼續(xù)播放音樂。 4、可以進行后臺播放功能。 5、若新增mp3格式的音樂文件可以自動將該音樂文件添加到播放列表。2、 使用到的相關知識 android各種頁面布局,android中的mediaplayer媒體創(chuàng)建,android中service后臺控制播放方法,inten

4、t意圖進行activity之間進行多頁面跳轉,button按鈕事件監(jiān)聽控制,3、 實現該音樂播放器的整體思路要實現這個音樂播放器。首先應該考慮到的就是他的功能,要有后臺播放功能以及顯示正在播放的文件和把手機中的音樂文件以列表的形式顯示在手機上,這就要使用到listview類。另外在本地歌曲列表和正在播放的歌曲之間要進行動態(tài)菜單的跳轉故而想到用tabhost這個容器進行布局。后臺播放創(chuàng)建一個類繼承service方法,在該類中使其具有播放暫停下一首上一首的功能的方法,從而是它在各個activity之間進行跳轉的時候為其他的類提供相應的方法。創(chuàng)建一個新建文件類和過濾文件信息的類,用以存貯特定的文件信

5、息和當用戶改變文件夾終不改的內容的時候同步更新播放列表。于接打電話這個問題,創(chuàng)建一個類進行監(jiān)聽,當電話進來或出去的時候調用service方法停止音樂播放并記下播放點。4、 在實現過程遇到的相關問題以及解決的辦法 對于剛接觸android開發(fā)的我們,在很多的知識點上還是不是很理解,鑒于此在制作的過程難免會遇到各種問題,解決的辦法就是通過百度,goolge各種搜索引擎。1、 首先在開始動手構思音樂播放器界面的時候就遇到了難題,要實現動態(tài)菜單(本地音樂、正在播放的歌曲);2、 如何實現后臺播放;3、 如何進行多頁面之間的跳轉;4、 如何進行電話監(jiān)聽;5、 如何將sd卡中的mp3音樂文件過濾讀取到播放

6、列表中;6、 如何自動添加更新播放列表;7、 對于listview中點擊item時觸發(fā)相應的播放事件;5、 得到mp3界面圖展示 本地歌曲列表正在播放時候的界面 : 六、具體實現步驟1、創(chuàng)建main.xml布局文件。通過tabhost進行布局顯示本地播放和正在播放。實現的主要代碼及步驟效果圖: (1)main.xml (2) 創(chuàng)建tabviewactivity類繼承tabactivity類向tabhost容器中加入動態(tài)menu以及創(chuàng)建一個music類進行sd卡的音樂文件的存取和讀取,創(chuàng)建utilfile進行文件的創(chuàng)建和判斷。 在sd卡創(chuàng)建存放mp3的目錄代碼片段:public void cre

7、atedirinsdcard() throws ioexception if(new file(fileutils.music).exists() = false)file file = new file(music);file.mkdir();在sd卡上創(chuàng)建文件代碼片段:public file creatfile(string filename) throws ioexception file file = new file(music+filename);file.createnewfile();return file;/* * 判斷文件是否存在 */public boolean isfi

8、leexist(string filename) file file = new file(music + filename);return file.exists();向tabhost容器中加入動態(tài)菜單項的代碼片段:public void initializeplayer() / 因為繼承了tabactivity,所以可以用gettabhost()獲取tabhost,tabhost = this.gettabhost();/ 設置intent指向的類intent = new intent(this, locallistactivity.class);/ 創(chuàng)建一個tabspec,并設置它的標簽

9、和要跳轉到的intenttabspec = tabhost.newtabspec(local).setindicator(本地歌曲).setcontent(intent);/ 將tabspec添加到tabhost(這樣就把一個分頁的標簽添加進去了)tabhost.addtab(tabspec);/添加第二個標簽intent = new intent(this, playingmusicactivity.class);tabspec = tabhost.newtabspec(playingmusic).setindicator(歌曲播放).setcontent(intent);tabhost.a

10、ddtab(tabspec);(3)創(chuàng)建mp3info類,定義初始話音樂信息private static final long serialversionuid = 1l;private string id ;private string mp3name;private string author;private string lrcname ;private string lrcsize ;public mp3info()public mp3info(string id, string mp3name, string author, string lrcname,string lrcsize

11、) super();this.id = id;this.mp3name = mp3name;this.author = author;this.lrcname = lrcname;this.lrcsize = lrcsize;public string tostring() return mp3info author= + author + , id= + id + , lrcname=+ lrcname + , lrcsize= + lrcsize + , mp3name= + mp3name+ ;public string getid() return id;public void set

12、id(string id) this.id = id;public string getmp3name() return mp3name;public void setmp3name(string mp3name) this.mp3name = mp3name;public string getauthor() return author;public void setauthor(string author) this.author = author;public string getlrcname() return lrcname;public void setlrcname(string

13、 lrcname) this.lrcname = lrcname;public string getlrcsize() return lrcsize;public void setlrcsize(string lrcsize) this.lrcsize = lrcsize;2、創(chuàng)建playmusic.xml布局文件用以顯示播放下一首上一首控制按鈕和顯示正在播放的音樂文件的名字 具體代碼片段: 3、創(chuàng)建一個playmusicservice類行進后臺控制音樂播放功能為playmusic類用以控制音樂播放功能的方法。service代碼片段:public class playmusicservice

14、extends service private static mediaplayer mediaplayer;private static final string music_path = /sdcard/music/;/ 歌曲是否正在播放public static boolean isplaying = false;/ 當前播放的歌曲public static int current_song = 0;/ 聲明一個bundle對象,用來放置接收到的bundle對象bundle bundle = null;overridepublic ibinder onbind(intent arg0)

15、/ todo auto-generated method stubreturn null;overridepublic void oncreate() / todo auto-generated method stubsuper.oncreate();/ 生成mediaplayer對象mediaplayer = new mediaplayer();overridepublic void onstart(intent intent, int startid) / todo auto-generated method stubsuper.onstart(intent, startid);/ 從接收

16、到的bundle對象中獲取當前播放歌曲的位置bundle = intent.getextras();current_song = bundle.getint(position);/ 條用playmusic()方法播放歌曲playmusic(current_song);/ 播放歌曲方法public void playmusic(int position) try / 標志為正在播放isplaying = true;/ 獲取將要播放的歌曲的位置current_song = position;system.out.println(當前正在播放的歌曲:+ locallistactivity.list.

17、get(current_song).get(mp3name);mediaplayer.reset();mediaplayer.setdatasource(music_path+ locallistactivity.list.get(current_song).get(mp3name);mediaplayer.prepare();mediaplayer.start();mediaplayer.setoncompletionlistener(new oncompletionlistener() public void oncompletion(mediaplayer mp) / todo auto

18、-generated method stub/* * 播放當前歌曲的下一首 判斷播放的是否最后一首歌,如果是,播放完返回播放第一首 */if (+current_song = locallistactivity.list.size() current_song = 0;playmusic(current_song);/ 動態(tài)更新正在播放歌曲的名字new playingmusicactivity().updateplaysongname(current_song);); catch (exception e) e.printstacktrace();/ 播放上一首歌曲public void la

19、stmusic(int position) / 先把mediaplayer對象切換到stoped狀態(tài)if (mediaplayer != null)if(isplaying)mediaplayer.stop();current_song = position;if (current_song 0) / 如果當前播放的是第一首歌,則切換到最后一首current_song = locallistactivity.list.size() - 1;playmusic(current_song);/ 播放下一首歌曲public void nextmusic(int position) / 先把media

20、player對象切換到stoped狀態(tài)if (mediaplayer != null)if(isplaying)mediaplayer.stop();current_song = position;/ 如果播放的是最后一首歌曲,則切換到第一首if (current_song = (locallistactivity.list.size() current_song = 0;playmusic(current_song);/ 暫停/恢復播放public void pausemusic() if (mediaplayer != null) if (isplaying = true) mediapl

21、ayer.pause();isplaying = false; /* * 恢復播放歌曲 */public void startmusic() if (mediaplayer != null) if(isplaying = false)mediaplayer.start();isplaying = true ;創(chuàng)建playmusic類中在textview中進行顯示顯示正在播放的音樂文件名代碼片段:protected void onresume() / todo auto-generated method stubsuper.onresume();/ textview對象,設置正在播放的歌曲的名字

22、if (playmusicservice.isplaying = false) currentsong = playmusicservice.current_song;updateplaysongname(playmusicservice.current_song);/ 更新正在textview對象public void updateplaysongname(int position) textview.settext(locallistactivity.list.get(position).get(mp3name);4、創(chuàng)建locallistactivity類用listview顯示本地音樂文

23、件以及l(fā)ocal_listview.xml。local_listview.xml代碼片段:locallistactivity類實現onitemclicklistener接口 定義一些mp3的信息變量private static final int tag_size = 128;private static final int title_size = 30;private static final int artist_size = 30;private static final int album_size = 30;private static final int year_size =

24、4;private static final string tag_start = tag;private listview listview = null;定義被點擊的歌曲的位置:public static int currentsong = 0;定義一個list數組用以存儲歌曲列表信息:public static listhashmap list = null;重寫onresume獲取點擊音樂的焦點事件:overrideprotected void onresume() / todo auto-generated method stubsuper.onresume();try showlo

25、callistview(fileutils.music); catch (exception e) / todo auto-generated catch blocke.printstacktrace();創(chuàng)建文件過濾器,過濾非以mp3結尾的文件private filenamefilter filefilter = new filenamefilter()public boolean accept(file path,string name)return (name.endswith(.mp3);顯示本地歌曲列表public void showlocallistview(string path

26、) throws exception listview= (listview) this.findviewbyid(r.id.local_listview);list = new arraylisthashmap();hashmap map = null;file musicdir = new file(path);file files = musicdir.listfiles(filefilter);for (int i = 0; i files.length; i+) string filepath = filesi.getparent() + file.separator+ filesi

27、.getname();file mp3 = new file(filepath);byte buf = new bytetag_size;randomaccessfile raf = new randomaccessfile(mp3, r);raf.seek(raf.length() - tag_size);raf.read(buf, 0, tag_size);string tag = new string(buf, 0, tag_size, gbk);map = new hashmap();map.put(mp3name, mp3.getname(); /獲取mp3信息map.put(mp3

28、author, tag.substring(33, 63).trim();list.add(map);創(chuàng)建一個simpleadapter適配器和點擊item觸發(fā)service中的播放音樂事件:simpleadapter simpleadapter = new simpleadapter(this, list,r.layout.local_item,new string mp3name ,mp3author, new int r.id.mp3name ,r.id.mp3author); listview.setadapter(simpleadapter);listview.setchoicemo

29、de(listview.choice_mode_multiple);listview.setonitemclicklistener(this);/點擊listview的item時觸發(fā)的時間public void onitemclick(adapterview av, view v, int position, long id) / todo auto-generated method stubintent serviceintent = new intent(this, playmusicservice.class);bundle b = new bundle();/記錄當前播放歌曲的位置cu

30、rrentsong = position ;/將被點擊的歌曲的當前位置傳遞到service中b.putint(position, currentsong);serviceintent.putextras(b);startservice(serviceintent);/跳轉到第二標簽卡 tabviewactivity.tabhost.setcurrenttab(1); /更新正在播放歌曲名字 new playingmusicactivity().updateplaysongname(currentsong);5、 創(chuàng)建一個與打接電話時音樂后臺停止并且記住播放點,當打接電話完畢音樂繼續(xù)播放的類繼承

31、broadcastreceiver類。該類的相關代碼片段:public void onreceive(context context, intent intent) /* * 當來電或去電時,則暫停播放音樂 */if (intent.getaction().equals(intent.action_new_outgoing_call) /去電時暫停new playmusicservice().pausemusic(); else telephonymanager tm = (telephonymanager) context.getsystemservice(service.telephony_service);/來電時暫停switch (tm.getcallstate() case telephonymanager.call_state_ringing:new playmusicservice().pausemusic();break ;6、對于androidmainfest.xml注冊文件的配置。1) 注冊來電、去電的監(jiān)聽器2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論