音樂(lè)播放器實(shí)習(xí)報(bào)告
《音樂(lè)播放器實(shí)習(xí)報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《音樂(lè)播放器實(shí)習(xí)報(bào)告(20頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 武漢工程大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院 認(rèn)識(shí)實(shí)習(xí)報(bào)告 專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí) 學(xué) 號(hào) 學(xué) 生 姓 名 指 導(dǎo) 教 師 陳艷(講師) 實(shí) 習(xí) 時(shí) 間 2014~2015學(xué)年第1學(xué)期 2014.9.1至2014.9.5 實(shí) 習(xí) 成 績(jī) 武漢工程大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 制 說(shuō)明: 1、 實(shí)習(xí)指導(dǎo)教師由學(xué)院校內(nèi)教師擔(dān)任,負(fù)責(zé)組織實(shí)習(xí)、學(xué)生管理、參加實(shí)習(xí)答辯、實(shí)習(xí)成績(jī)?cè)u(píng)定、給出實(shí)習(xí)評(píng)語(yǔ)等工作。 2、 實(shí)習(xí)報(bào)告由武漢工程大學(xué)計(jì)算機(jī)科學(xué)
2、與工程學(xué)院提供基本格式(適用于學(xué)院各專(zhuān)業(yè)),各專(zhuān)業(yè)教研室和指導(dǎo)教師可根據(jù)本專(zhuān)業(yè)特點(diǎn)及實(shí)習(xí)內(nèi)容做適當(dāng)?shù)恼{(diào)整,學(xué)生須按指導(dǎo)教師下達(dá)的實(shí)習(xí)報(bào)告格式認(rèn)真進(jìn)行填寫(xiě)。 3、 實(shí)習(xí)成績(jī)由指導(dǎo)教師根據(jù)學(xué)生的實(shí)習(xí)情況給出各項(xiàng)分值及總評(píng)成績(jī)。 4、 指導(dǎo)教師評(píng)語(yǔ)一欄由實(shí)習(xí)指導(dǎo)教師就學(xué)生在整個(gè)實(shí)習(xí)期間的表現(xiàn)給出客觀、全面的評(píng)價(jià),包括實(shí)習(xí)期間的表現(xiàn)、實(shí)習(xí)報(bào)告的質(zhì)量等。 5、 實(shí)習(xí)報(bào)告正文字?jǐn)?shù)應(yīng)不少于5000字,實(shí)習(xí)日記字?jǐn)?shù)不少于300字/天。 6、 實(shí)習(xí)報(bào)告正文中實(shí)習(xí)目的與任務(wù)、實(shí)習(xí)地點(diǎn)、實(shí)習(xí)內(nèi)容和要求等項(xiàng),可由指導(dǎo)教師統(tǒng)一給出。 認(rèn)識(shí)實(shí)習(xí)成績(jī)?cè)u(píng)定表 學(xué)生姓
3、名: 學(xué)號(hào): 班級(jí): 類(lèi)別 總分值 各項(xiàng)分值 評(píng)分標(biāo)準(zhǔn) 實(shí)際得分 總得分 備注 實(shí)習(xí)表現(xiàn) 30 15 按時(shí)參加各項(xiàng)實(shí)習(xí)活動(dòng),無(wú)曠課、遲到、早退等情況。 15 遵守實(shí)習(xí)單位紀(jì)律和安排,無(wú)違反實(shí)習(xí)單位規(guī)定的情況;聽(tīng)從指導(dǎo)教師的安排,無(wú)不服從教師管理的現(xiàn)象。 實(shí)習(xí)報(bào)告 70 20 報(bào)告能對(duì)全過(guò)程的實(shí)習(xí)內(nèi)容進(jìn)行系統(tǒng)的總結(jié),并能運(yùn)用所學(xué)專(zhuān)業(yè)知識(shí)對(duì)問(wèn)題加以分析,并有一定的見(jiàn)解。 20 實(shí)習(xí)報(bào)告文字通順,內(nèi)容翔實(shí),論述充分、完整,結(jié)構(gòu)嚴(yán)謹(jǐn)合理。 10 具有收集、加工各種信息及獲得新知識(shí)的能
4、力。 10 實(shí)習(xí)報(bào)告字?jǐn)?shù)符合相關(guān)要求,實(shí)習(xí)報(bào)告工整規(guī)范,整齊劃一。 10 實(shí)習(xí)日記(筆記)次數(shù)及內(nèi)容符合要求。 總評(píng)成績(jī): 分 補(bǔ)充說(shuō)明: 指導(dǎo)教師: (簽字) 日 期: 2014 年 9 月 日 指導(dǎo)教師評(píng)語(yǔ) 指導(dǎo)教師:
5、 (簽字) 日 期: 2014 年 9 月 日 武漢工程大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 認(rèn)識(shí)實(shí)習(xí)報(bào)告 一、實(shí)習(xí)目的與任務(wù) 認(rèn)識(shí)實(shí)習(xí)是信息技術(shù)專(zhuān)業(yè)學(xué)生在完成基礎(chǔ)課學(xué)習(xí)轉(zhuǎn)入到專(zhuān)業(yè)課學(xué)習(xí)階段的一個(gè)極其重要的實(shí)踐教學(xué)環(huán)節(jié)。其目的是通過(guò)實(shí)地參觀和聽(tīng)取專(zhuān)業(yè)報(bào)告等多種方式,使學(xué)生進(jìn)一步了解本專(zhuān)業(yè)及相關(guān)領(lǐng)域的發(fā)展現(xiàn)狀,以及相關(guān)產(chǎn)品的研發(fā)過(guò)程和管理手段。通過(guò)實(shí)習(xí),使學(xué)生通過(guò)軟件開(kāi)發(fā)的實(shí)踐訓(xùn)練,進(jìn)一步掌握設(shè)計(jì)開(kāi)發(fā)軟件的方法與技術(shù),學(xué)會(huì)數(shù)據(jù)的組織方法,提高軟件開(kāi)發(fā)的實(shí)際能力,培養(yǎng)創(chuàng)造性的工程設(shè)計(jì)能力和分析、解決問(wèn)題的能力。 具體的任務(wù)包括: 1
6、.深化已學(xué)的理論知識(shí),完成理論到實(shí)踐的轉(zhuǎn)化,讓學(xué)生對(duì)軟件開(kāi)發(fā)領(lǐng)域的最新技術(shù)有本質(zhì)的了解,并能熟練運(yùn)用。通過(guò)電子商務(wù)網(wǎng)購(gòu)平臺(tái)的研發(fā),讓學(xué)生熟練操作各種開(kāi)發(fā)平臺(tái),并能按照CMM3規(guī)范,和軟件開(kāi)發(fā)的流程開(kāi)發(fā)一個(gè)小型項(xiàng)目; 2.提高分析和解決實(shí)際問(wèn)題的能力,讓學(xué)生有高質(zhì)量的就業(yè)IT行業(yè)的機(jī)會(huì)。培養(yǎng)“開(kāi)拓創(chuàng)新”能力。大力提倡和鼓勵(lì)在開(kāi)發(fā)過(guò)程中使用新方法、新技術(shù),激勵(lì)學(xué)生實(shí)踐的積極性和創(chuàng)造性,開(kāi)拓思路,設(shè)計(jì)新算法、新創(chuàng)意,培養(yǎng)創(chuàng)造性的工程設(shè)計(jì)能力。 3.了解信息技術(shù)產(chǎn)品的研發(fā)過(guò)程、信息系統(tǒng)的設(shè)計(jì)、信息系統(tǒng)的技術(shù)與管理等專(zhuān)業(yè)知識(shí);了解計(jì)算機(jī)、通信等相關(guān)領(lǐng)域的發(fā)展現(xiàn)狀和最新的科研成果,及在生產(chǎn)科研中的應(yīng)用
7、;鞏固學(xué)生的理論知識(shí),培養(yǎng)學(xué)生的實(shí)踐能力、創(chuàng)新能力,拓寬學(xué)生視野,樹(shù)立努力學(xué)習(xí)專(zhuān)業(yè)知識(shí)的信心,并為學(xué)習(xí)后續(xù)課程打下一定的實(shí)踐基礎(chǔ); 4.增強(qiáng)勞動(dòng)觀念,樹(shù)立正確的勞動(dòng)觀和價(jià)值觀。 二、實(shí)習(xí)地點(diǎn) 軟帝(Ruandy)信息科技有限公司,武漢光谷金融港 三、實(shí)習(xí)內(nèi)容和要求 本次實(shí)習(xí)在軟帝信息科技有限公司的實(shí)習(xí)基地進(jìn)行。要求學(xué)生在5天的實(shí)習(xí)期間,在教師的指導(dǎo)下熟悉Java Android開(kāi)發(fā)平臺(tái),掌握APP開(kāi)發(fā)的基本方法和技巧,完成一個(gè)小型APP的設(shè)計(jì)和開(kāi)發(fā)。 四、實(shí)習(xí)總結(jié)及分析 1)、搭建Android開(kāi)發(fā)環(huán)境 Android需要運(yùn)行環(huán)境才能夠運(yùn)行,下面介紹Android的開(kāi)發(fā)
8、環(huán)境配置。搭建開(kāi)發(fā)環(huán)境需要的軟件: 1. 操作系統(tǒng):Windows XP; 2. 軟件包:Android SDK(Software Development kit Java Development kit) 、ADT(Android Development Tool) 3. IDE環(huán)境:Eclipse IDE+ADT Eclipse3.3以上 4. JDK:Java Runtime Environment虛擬機(jī) 、(JDK)Java Development kit 安裝步驟如下: 第一步:安裝Java虛擬機(jī)sun-java6-jdk版本; 第二步:安裝Eclipse3.5
9、工具; 第三步:安裝Android SDK; 第四步:安裝Android ADT插件,將地址欄中選擇android-sdk-windows所在的目錄,點(diǎn)擊OK;單擊new按鈕,新建一個(gè)安卓虛擬機(jī),在name欄中輸入名字,將target選中,然后設(shè)置size,單擊create AVD按鈕,其中name欄是所創(chuàng)建虛擬機(jī)的名字,target欄是需要的ADT的版本,size用來(lái)設(shè)置安卓虛擬機(jī)的大小。單擊start按鈕隨后單擊lanuch(執(zhí)行)按鈕,就會(huì)彈出安卓虛擬機(jī)界面。 2)、Android 音樂(lè)播放器的工程 Android工程基本結(jié)構(gòu)目錄包括:src (源代碼)、gen(Androi
10、d系統(tǒng)自動(dòng)生成的常量)、Res(資源文件):主要存放程序界面的布局配置(.xml)文件和圖片資源。AndroidMainfes.xml 是四大組件的驅(qū)動(dòng)配置文件,有它的存在,Android程序的四大組件才可以正常的跳轉(zhuǎn) 3)、Android相關(guān)組件 activity —— 應(yīng)用表示層(基類(lèi)activity) 應(yīng)用程序中的每個(gè)屏幕都是通過(guò)繼承和擴(kuò)展基類(lèi)activity來(lái)實(shí)現(xiàn)的。同一應(yīng)用中的每個(gè)activity是相互獨(dú)立的。程序啟動(dòng)后顯示的第一幅畫(huà)面是應(yīng)用程序的第一個(gè)activity(默認(rèn)窗口),而后可以根據(jù)需要從這個(gè)activity啟動(dòng)另一個(gè)新的activity。activity利用v
11、iew來(lái)實(shí)現(xiàn)應(yīng)用中的gui(用戶直接通過(guò)gui和應(yīng)用程序做交互)。activity窗口內(nèi)的可見(jiàn)內(nèi)容通過(guò)基類(lèi)view提供。使用activity.setcontentview()方法設(shè)置當(dāng)前activity中的view對(duì)象。 service —— 沒(méi)有可見(jiàn)的用戶界面,但能夠長(zhǎng)時(shí)間運(yùn)行于后臺(tái)(基類(lèi)service)。運(yùn)行于應(yīng)用程序進(jìn)程的主線程中,因此service不會(huì)阻塞其他組件和用戶界面。 service是不能自己?jiǎn)?dòng)的,必須通過(guò)context對(duì)象(如一個(gè)activity)調(diào)用startservice或bindservice方法來(lái)啟動(dòng)(用這兩種方法啟動(dòng)的service的生命周期不同)。 broa
12、dcast receiver —— 用戶接收廣播通知的組件(基類(lèi)broadcastreceiver)。android中的廣播要么來(lái)自于系統(tǒng),要么來(lái)自普通應(yīng)用程序。很多事件都可能導(dǎo)致系統(tǒng)廣播,如手機(jī)所在時(shí)區(qū)發(fā)生變化,電池電量低,用戶改變系統(tǒng)語(yǔ)言設(shè)置等。來(lái)自普通應(yīng)用程序,如一個(gè)應(yīng)用程序通知其他應(yīng)用程序某些數(shù)據(jù)已經(jīng)下載完畢。 content provider —— 為解決應(yīng)用程序間數(shù)據(jù)通信、共享的問(wèn)題(基類(lèi)contentprovider) 在android中,每個(gè)應(yīng)用程序都是用自己的用戶id并在自己的進(jìn)程中運(yùn)行。 這樣的好處是,可以有效地保護(hù)系統(tǒng)及應(yīng)用程序,避免被其他不正常德應(yīng)用程序所影響,每
13、個(gè)進(jìn)程都擁有獨(dú)立的進(jìn)程地址空間和虛擬空間。 content provider——可以將應(yīng)用程序特定的數(shù)據(jù)提供給另一個(gè)應(yīng)用程序使用。其數(shù)據(jù)存儲(chǔ)方式可以是android文件系統(tǒng)、sqlite數(shù)據(jù)庫(kù)或者其他合理的方式。當(dāng)數(shù)據(jù)需要在應(yīng)用程序間共享時(shí),我們就可以利用contentprovider為數(shù)據(jù)定義一個(gè)uri。之后,其他應(yīng)用程序?qū)?shù)據(jù)進(jìn)行查詢(xún)或者修改時(shí),只需要從當(dāng)前上下文對(duì)象獲得一個(gè)contentresolver, 然后傳入響應(yīng)的uri就可以了。 intent —— 連接組件的紐帶。以上4種基本組件中,除了content provider是通過(guò)content resolver激活外,其他3種組
14、件activity、service和broadcast receiver都是由intent異步消息激活的。intent在不同的組件之間傳遞消息,將一個(gè)組件的請(qǐng)求意圖傳給另一個(gè)組件。因此,intent是包含具體請(qǐng)求信息的對(duì)象。intent是一種運(yùn)行時(shí)綁定(runtime binding)機(jī)制,它能夠在程序運(yùn)行的過(guò)程中連接兩個(gè)不同的組件。通過(guò)intent,你的程序可以向android表到某種請(qǐng)求或者意愿,android會(huì)根據(jù)意愿的內(nèi)容選擇適當(dāng)?shù)慕M件來(lái)處理請(qǐng)求。 4)、 Android xml文件 在安卓工程中,大量使用了xml文件,比如界面布局文件,字符資源文件,風(fēng)格style文件,簡(jiǎn)單圖
15、形文件等。比如在界面布局文件中,通過(guò)指定控件的排列方式、間隔像素、對(duì)齊方式等,達(dá)到對(duì)頁(yè)面進(jìn)行布局的目的,同時(shí)使用特定編輯器,實(shí)時(shí)解析布局文件,到達(dá)所見(jiàn)即所得的目的。 5)、程序界面activity類(lèi)的設(shè)計(jì) 程序的界面musictestactivity類(lèi)是程序的主要部分,設(shè)計(jì)到界面所有控件的操作及設(shè)計(jì)、程序的流程控制及音樂(lè)播放的核心部分。 字段mediaplayer是音樂(lè)播放的核心變量,進(jìn)行音樂(lè)播放,處理器mhandle是對(duì)音樂(lè)播放流程進(jìn)行管理的變量,然后六個(gè)監(jiān)聽(tīng)器是對(duì)按鈕及進(jìn)度條的變化進(jìn)行及時(shí)響應(yīng),剩下的都是輔助標(biāo)記變量,標(biāo)記當(dāng)前播放信息,以及控制參數(shù)信息。播放音樂(lè)文件采用MediaP
16、layer,音樂(lè)的播放應(yīng)在后臺(tái)進(jìn)行,所以MediaPlayer應(yīng)該在一個(gè)Service中,用戶操作Activity上的控件,所以當(dāng)用戶操作時(shí),應(yīng)該通過(guò)Intent傳遞一些參數(shù)給Service,后者根據(jù)這些參數(shù)來(lái)控制MediaPlayer的播放。當(dāng)用戶進(jìn)行了操作,Service這時(shí)也響應(yīng)了操作以后,需要對(duì)Activity進(jìn)行的ui進(jìn)行更新,這時(shí)則需要 通過(guò)BroadCastReciver來(lái)進(jìn)行對(duì)Activity的更新,同時(shí)Service需要通過(guò)一個(gè)Notification被置為前臺(tái).BroadCastReciver因?yàn)橐獙?duì)更新Activity,所以最好是作為需要被更新Activity的內(nèi)部類(lèi)。
17、 6)、程序運(yùn)行效果 在手機(jī)上運(yùn)行,程序可以流暢地播放音樂(lè),無(wú)卡頓現(xiàn)象,實(shí)時(shí)準(zhǔn)確地顯示播放進(jìn)度信息,并調(diào)整控制音量大小。按鈕上一曲、下一曲及停止都可以正確地作用,暫停按鈕在音樂(lè)播放的時(shí)候可以正確顯示并作用,當(dāng)被點(diǎn)擊之后,即顯示為播放按鈕,此時(shí)點(diǎn)擊該按鈕也可以正確播放音樂(lè)。經(jīng)測(cè)試,最終得到的程序可以在手機(jī)上運(yùn)行,并無(wú)任何bug及程序不響應(yīng)現(xiàn)象。 7)、關(guān)鍵代碼 此代碼的主要功能是用來(lái)使音樂(lè)播放器在進(jìn)行播放前,從手機(jī)存儲(chǔ)設(shè)備中過(guò)濾出后綴名為MP3的文件,一層一層往下找,不限于根目錄下,知道最后沒(méi)有子文件夾為止。 public class MusicFilter implement
18、s java.io.FileFilter{ public boolean accept(File pathname) { boolean b = false; if(pathname.isDirectory()){ b = true; }else{ if(pathname.getName().endsWith(".mp3")){ b = true; }else{ b = false; } } return b ; } } 下面為程序主要代碼主要實(shí)現(xiàn)的功能為:設(shè)置播放器音量大小,音樂(lè)進(jìn)度拖拉條,上一首,
19、下一首,播放,停止,歌曲時(shí)間顯示;
public class MusicTestActivity extends ListActivity {
//用來(lái)存放音樂(lè)文件路徑
private ArrayList
20、; //播放對(duì)象 private MediaPlayer mediaPlayer; //音樂(lè)例表中當(dāng)前要播放音樂(lè)文件的索引 private int currentListItem; //圖片按鈕的申明 private ImageButton imageStop; private ImageButton imagePause; private ImageButton imageLast; private ImageButton imageStart; private ImageButton imageNext; //關(guān)于音量的變量 private AudioMan
21、ager audioManager ; //最大音量 private int maxVolume; //當(dāng)前音量 private int currentVolume; //音量拖動(dòng)條 private SeekBar soundBar; //顯示時(shí)間的控件 private TextView tv ; //音樂(lè)的進(jìn)度條 private SeekBar musicBar; //過(guò)慮器 private MusicFilter mf;//用來(lái)標(biāo)記是否為播放狀態(tài) (0:初始狀態(tài),1:播放狀態(tài),2:暫停狀態(tài)) private int falg = 0 ; @Overrid
22、e public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mf = new MusicFilter();//播放對(duì)象初始化 mediaPlayer = new MediaPlayer(); //調(diào)用音樂(lè)綁定方法 this.musicList();//將5個(gè)按鈕進(jìn)行初始化 imageStop = (Im
23、ageButton)this.findViewById(R.id.imageStop); // imagePause = (ImageButton)this.findViewById(R.id.imagePause); imageLast = (ImageButton)this.findViewById(R.id.imageLast); imageStart = (ImageButton)this.findViewById(R.id.imageStart); imageNext = (ImageButton)this.fin
24、dViewById(R.id.imageNext); //獲取系統(tǒng)聲音管理器 audioManager =(AudioManager) this.getSystemService(Context.AUDIO_SERVICE); //獲取系統(tǒng)聲音的最大值 maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //獲取系統(tǒng)當(dāng)前的聲音值 大小 currentVolume = audioManager.ge
25、tStreamVolume(AudioManager.STREAM_MUSIC); //初始化音量拖動(dòng)條 soundBar = (SeekBar)this.findViewById(R.id.soundBar); //設(shè)置音量拖動(dòng)條的最大值 soundBar.setMax(maxVolume); //設(shè)置音量拖動(dòng)條的當(dāng)前值 soundBar.setProgress(currentVolume); //時(shí)間顯示控件初始化 tv = (TextView)
26、this.findViewById(R.id.textView1); //把音樂(lè)播放進(jìn)度條進(jìn)行初始化 musicBar =(SeekBar) this.findViewById(R.id.musicBar); //調(diào)用listener方法 this.listener(); } //遞歸....通過(guò)遞歸把sdcard里面所有的音樂(lè)文件中的路徑和音樂(lè)名字分區(qū)保存到(musiclist和musicnamelist)中 private void showInfo(String path){ Fi
27、le f = new File(path);//先實(shí)現(xiàn)文件類(lèi)對(duì)象 File [] fileList = f.listFiles(mf); if(fileList!=null){ for (int i = 0; i < fileList.length; i++) { if(fileList[i].isFile()){ musiclist.add(fileList[i].getAbsolutePath()); musicnamelist.add(fileList[i].getName()); } if(fileList[i
28、].isDirectory()){//判斷是否是一個(gè)目錄如果是就遞歸 showInfo(fileList[i].getPath()); } } } } private void musicList(){ //調(diào)用上面的遞歸方法.把sdcard里面的所有音樂(lè)文件的名字和路徑分區(qū)保存到(musiclist和musicnamelist)這兩個(gè)容器中 showInfo(MUSIC_PUTH); //1設(shè)置面板容器 2設(shè)置布局3音樂(lè)例表
29、
ArrayAdapter
30、inute / 60; int second = time % 60; minute %= 60; return String.format("%02d:%02d", minute, second); } private void playMusic(String path){ try { mediaPlayer.reset();//先重置一下 mediaPlayer.setDataSource(path);//設(shè)置音樂(lè)文件的路徑 mediaPlayer.prepare();//準(zhǔn)備 med
31、iaPlayer.setLooping(true);//循環(huán)播放 mediaPlayer.start();//開(kāi)始播放 //設(shè)置音樂(lè)拖動(dòng)度的當(dāng)前進(jìn)度初始值 musicBar.setProgress(mediaPlayer.getCurrentPosition()); //設(shè)置音樂(lè)拖動(dòng)條的最大值 musicBar.setMax(mediaPlayer.getDuration()); //System.out.println("當(dāng)前正在播放的歌曲時(shí)間是:" + mediaPlayer.getDuration()); //顯示出來(lái)當(dāng)
32、前音樂(lè)的時(shí)間 tv.setText( toTime(mediaPlayer.getCurrentPosition()) + " / " + toTime(mediaPlayer.getDuration())); //當(dāng)歌曲開(kāi)始播放時(shí).線程也開(kāi)始運(yùn)行 this.startProgressUpdate(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); }
33、 catch (IOException e) { e.printStackTrace(); } } private Handler mHandle = new Handler(){ public void handleMessage(Message msg) { //對(duì)音樂(lè)顯示時(shí)間每一秒鐘付值一次 tv.setText( toTime(mediaPlayer.getCurrentPosition()) + " / " + toTime(mediaPlayer.getDuration()) ); //不斷將音樂(lè)播放的位置
34、賦值給MusicBar... musicBar.setProgress(mediaPlayer.getCurrentPosition()); } }; //申明一個(gè)線程類(lèi) public class th extends Thread{ //實(shí)例化此類(lèi)的用戶會(huì)轉(zhuǎn)一個(gè)時(shí)間毫秒數(shù)進(jìn)來(lái)付值給i int i ; //構(gòu)造方法 public th(int i){ this.i = i; } //線程方法 public void run(){ whil
35、e(true){ try { this.sleep(i); } catch (InterruptedException e) { e.printStackTrace(); } mHandle.sendEmptyMessage(0); } } } //開(kāi)辟Thread 用于定期刷新SeekBar,改變音樂(lè)時(shí)間 public void startProgressUpdate(){ th t = new th(1000);//初始化線程類(lèi)轉(zhuǎn)入
36、1000毫秒 t.start();//開(kāi)啟一個(gè)線程 } //當(dāng)用戶返回時(shí)結(jié)束音樂(lè)并釋放音樂(lè)對(duì)象 public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){//音樂(lè)停止 // mediaPlayer.stop(); //可以釋放播放器占用的資源,一旦確定不再使用播放器時(shí)應(yīng)當(dāng)盡早調(diào)用它釋放資源。 // mediaPlayer.release();//結(jié)束 // this.finish(); Sys
37、tem.exit(0); } return true; } protected void onListItemClick(ListView l, View v, int position, long id) { //獲取到當(dāng)前點(diǎn)擊的音樂(lè)文件索引 this.currentListItem = position ; //調(diào)用playMusic方法進(jìn)行音樂(lè)播放并傳入音樂(lè)的文件路徑 this.playMusic(musiclist.get(currentListItem) ) ; imageStart.setImageResource(R.dr
38、awable.pause); falg = 1; } private void listener(){//音樂(lè)播放進(jìn)度條的事件處理 musicBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onStopTrackingTouch(SeekBar seekBar) { //把音樂(lè)播放進(jìn)度條的當(dāng)前位置 的值賦給mediaPlayer.. mediaPlayer.seekTo(seekBar.getProgress()); }
39、 public void onStartTrackingTouch(SeekBar seekBar) { } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } });//調(diào)聲音大小拖動(dòng)條的事件處理 soundBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onStopTrackingTouch(Seek
40、Bar seekBar) { //System.out.println("----停止"); } public void onStartTrackingTouch(SeekBar seekBar) { //System.out.println("開(kāi)始----"); } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { //System.out.println("我的值在發(fā)生改變:" + progress);
41、 //設(shè)置音量的大小 audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress,1); } }); //1.為imageStart這個(gè)圖片按鈕添加一個(gè)單擊事件 imageStart.setOnClickListener(new OnClickListener() { public void onClick(View v) { //用來(lái)標(biāo)記是否為播放狀態(tài) (0:初始狀態(tài),1:播放狀態(tài),2:暫停狀態(tài)) if( falg == 0 ){//0:初始狀態(tài)
42、 //調(diào)playMusic方法進(jìn)行音樂(lè) 播放 MusicTestActivity.this.playMusic(musiclist.get(currentListItem)); //把播放狀態(tài)的圖片切換成暫停狀態(tài)的圖片 imageStart.setImageResource(R.drawable.pause); falg = 1 ; }else if(falg == 1){//1:播放狀態(tài)//暫停播放 mediaPlayer.pause();//把暫停狀態(tài)的圖片切換成播放狀態(tài)的圖片 im
43、ageStart.setImageResource(R.drawable.start); falg = 2 ; }else if(falg == 2){//2:暫停狀態(tài) mediaPlayer.start();//播放 //把暫停狀態(tài)的圖片切換成播放狀態(tài)的圖片 imageStart.setImageResource(R.drawable.pause); falg = 1; } } } ); //2.停止按鈕進(jìn)行事件處理() imageStop.setOnClickListene
44、r(new OnClickListener() { public void onClick(View v) { falg = 0 ; imageStart.setImageResource(R.drawable.start); mediaPlayer.seekTo(0); //musicBar.setProgress(0); mediaPlayer.stop();//停止 } }); //4.下一首 imageNext.setOnClickListener(new OnClickListener() {
45、 public void onClick(View v) { falg = 1 ; imageStart.setImageResource(R.drawable.pause); currentListItem = (currentListItem+1)%musiclist.size(); MusicTestActivity.this.playMusic(musiclist.get(currentListItem)); } }); //5.上一首 imageLast.setOnClickListener(new OnCli
46、ckListener() { public void onClick(View v) { falg = 1 ; imageStart.setImageResource(R.drawable.pause); currentListItem = (currentListItem-1+musiclist.size())%musiclist.size(); MusicTestActivity.this.playMusic(musiclist.get(currentListItem)); } }); } } 五、實(shí)習(xí)體會(huì)
47、 5天的實(shí)習(xí)生活轉(zhuǎn)眼就已過(guò)去,在這幾天里,我們都有所收獲,不管是技能上還是認(rèn)識(shí)上都有所提升。5天的時(shí)間,我熟悉了android系統(tǒng)的起源和發(fā)展,掌握了android的工作方式并搭建起了android開(kāi)發(fā)的環(huán)境。在大二已經(jīng)接觸學(xué)習(xí)了java語(yǔ)言的基礎(chǔ)上學(xué)習(xí)android開(kāi)發(fā),相對(duì)來(lái)說(shuō)輕松了許多。Java的基礎(chǔ)語(yǔ)法,面向?qū)ο蟮木幊谭椒ê退枷?,消息傳遞都有點(diǎn)熟悉。期間我學(xué)著建立android工程并做一些簡(jiǎn)單的編程和開(kāi)發(fā),包括熟悉android開(kāi)發(fā)環(huán)境,android工程中各個(gè)文件及其作用,到簡(jiǎn)單的界面布局和控件使用。在這個(gè)過(guò)程中老師耐心給我們講解,有什么問(wèn)題、不懂的地方老師也會(huì)幫助解決,所以此次報(bào)
48、告的完成里不開(kāi)老師的支持。 然后實(shí)習(xí)期間,我們得以初步了解我們所學(xué)專(zhuān)業(yè)的就業(yè)前景和工作環(huán)境,以及上班后的薪資待遇,還有關(guān)于選定方向去學(xué)習(xí)哪種語(yǔ)言的問(wèn)題,這大概是很多同學(xué)都很迷惑的問(wèn)題,大學(xué)學(xué)習(xí)的語(yǔ)言確實(shí)很多,就目前而言我們就學(xué)習(xí)了c、c++、Java,那么這么多的語(yǔ)言我們?cè)撊绾稳∩崮?,要想在短期?nèi)精通幾門(mén)語(yǔ)言無(wú)疑是相當(dāng)難的,所以老師給我們的建議是選擇一門(mén)語(yǔ)言,盡量在一種語(yǔ)言上有所突出,不然如果學(xué)的太雜而零散對(duì)找工作是不利的,所以鑒于這一點(diǎn),我們應(yīng)該暨早確定自己主修的方向。還有是關(guān)于考研的事,現(xiàn)階段大家都很困惑,對(duì)于學(xué)習(xí)計(jì)算機(jī)的人來(lái)說(shuō)考研的意義到底大不大,關(guān)于這個(gè)問(wèn)題我也獲得了初步的認(rèn)識(shí),考研
49、也是一個(gè)學(xué)習(xí)的過(guò)程,在這個(gè)過(guò)程中自己的技術(shù)和熟練度當(dāng)然會(huì)有所提高,同時(shí)又擁有了更高的文憑,有它有利的一面。 實(shí)習(xí)是學(xué)生了解和認(rèn)識(shí)企業(yè)事業(yè)單位對(duì)專(zhuān)業(yè)人才需求的重要途徑,是學(xué)生進(jìn)入職場(chǎng)之前,增加對(duì)專(zhuān)業(yè)認(rèn)識(shí)的一個(gè)必不可少的學(xué)習(xí)階段。通過(guò)實(shí)習(xí),增進(jìn)對(duì)從事本專(zhuān)業(yè)的自豪感以及責(zé)任感,選好入職方向,做好人生職業(yè)規(guī)劃。為畢業(yè)之后能夠進(jìn)入工作狀態(tài)并且能夠更好地工作,打好一定的基礎(chǔ),所以此次實(shí)習(xí)對(duì)自己來(lái)說(shuō)是一次很好的鍛煉。 最后這個(gè)音樂(lè)播放器程序還有很多不足之處,比如沒(méi)有實(shí)現(xiàn)在點(diǎn)擊歌曲是獲得歌曲的名字顯示在界面上,沒(méi)有同步顯示歌詞等功能,希望以后有機(jī)會(huì)逐步完善。
50、 附錄:實(shí)習(xí)日記 2014年9月1日 星期一 這是實(shí)習(xí)的第一天,一大早我們來(lái)到了實(shí)習(xí)的公司—軟帝,老師短暫的自我介紹之后,我們的實(shí)習(xí)生活正式拉開(kāi)序幕。與學(xué)校不同的是老師是通過(guò)廣播授課,比起學(xué)校要費(fèi)力的盯著投影的確方便很多。如慣例,初次學(xué)習(xí)當(dāng)然是從最基本的學(xué)起,老師慢慢進(jìn)入主題,5天的實(shí)習(xí),我們需要學(xué)習(xí)如何進(jìn)行Android軟件的開(kāi)發(fā),首先老師給我們講述Android的起源,Android一詞的本義指“機(jī)器人”,同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)的名稱(chēng),該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)
51、稱(chēng)是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件。 Android本是一家公司的名稱(chēng),這家公司的創(chuàng)始人名叫Andy Rubin。Andy Rubin創(chuàng)立了兩個(gè)手機(jī)操作系統(tǒng)公司:Danger和Android。Danger以5億美元賣(mài)給微軟,成為了今天的Kin,Android以4千萬(wàn)美元賣(mài)給Google。Android的優(yōu)點(diǎn)有開(kāi)放性、應(yīng)用程序相互平等、應(yīng)用程序之間溝通無(wú)界限和快速方便的應(yīng)用程序開(kāi)發(fā)。接著我們學(xué)習(xí)了Android開(kāi)發(fā)環(huán)境的配置,按照老師的要求新建一個(gè)Java項(xiàng)目,學(xué)習(xí)過(guò)程中,我第一次見(jiàn)識(shí)了類(lèi)似于我們手機(jī)界面的Android開(kāi)發(fā)虛擬環(huán)境看見(jiàn)這樣一個(gè)東西,同學(xué)們都非常興奮,接下來(lái)的幾天
52、我們的任務(wù)是做一個(gè)Android軟件。 2014年9月2日 星期二 今天我們的主要任務(wù)是從開(kāi)發(fā)工具到基本語(yǔ)法,主要是配置安卓SDK環(huán)境,建立安卓工程。接著老師給我們講了Android工程中的配置文件,主要包括R.java,main.xml,string.xml文件。其中R.java中的內(nèi)容為自動(dòng)生成,無(wú)法對(duì)其進(jìn)行修改,在增加或者進(jìn)行修改代碼時(shí)會(huì)報(bào)錯(cuò)。string類(lèi)給string.xml里面的鍵值生成的ID main.xml文件, 控制Activity中空間的位置,每個(gè)Activity對(duì)應(yīng)一個(gè)此布局文件 string.xml,存放鍵值對(duì),一般用在程序的多語(yǔ)言版本切換(多個(gè)文件,鍵一樣,值
53、不同)String.xml用來(lái)把應(yīng)用中出現(xiàn)的文字單獨(dú)存放在string.xml文中。這樣在進(jìn)行修改的時(shí)候就不用修改程序內(nèi)容。另外一方面為了減少應(yīng)用的體積,降低數(shù)據(jù)的冗余。Main.xml文件用來(lái)對(duì)界面進(jìn)行布局。XML布局資源必須被存儲(chǔ)在項(xiàng)目目錄的/res/layout下。 另外的還有strc目錄用來(lái)存放源文件代碼,gen目錄是ADT插件生成的文件(自動(dòng)生成),assets目錄存放資源文件目錄不會(huì)再R.java中生成ID,res目錄存放資源文件目錄,這里面的每個(gè)文件或值都會(huì)在R.java中生成一個(gè)ID,AndroidManifest.xml目錄是整個(gè)應(yīng)用程序配置文件,儲(chǔ)存一些包名,版本號(hào),程序
54、圖標(biāo)程序標(biāo),defaultproperties目錄---檢查版本文件,自動(dòng)生成,不能修改res、layout目錄防止布局文件(xml文件),每個(gè)Activity對(duì)應(yīng)一個(gè)xml文件,res/value目錄放置存儲(chǔ)值的文件。 2014年9月3日 星期三 今天的實(shí)習(xí)主要是接著昨天講的main.xml文件,講述Android中的各種布局方式,時(shí)間的關(guān)系,今天只講述了一種布局方式,線性布局方式。線性布局在屏幕上垂直地或水平地組織用戶界面控件或者小工具。線性布局是最簡(jiǎn)單,Android開(kāi)發(fā)者使用得最多的布局類(lèi)型之一。線性布局的作用就像它的名字一樣,當(dāng)布局方向設(shè)置為垂直時(shí),它里面的所有子控件被組織
55、在同一列上。當(dāng)布局方向設(shè)置為水平時(shí),所有子控件被組織在一行中。另外講的是用oncreatelisten()設(shè)置監(jiān)聽(tīng)。然后設(shè)置圖片,進(jìn)行設(shè)置圖片上一張,下一張,以及設(shè)置圖片的透明度,首先選好圖片進(jìn)行設(shè)置,將圖片存放在數(shù)組中,記錄一個(gè)變量用來(lái)設(shè)置當(dāng)前圖片的標(biāo)號(hào)(即數(shù)組的下標(biāo)),點(diǎn)擊下一張按鈕時(shí),用當(dāng)前下標(biāo)模除數(shù)組長(zhǎng)度,這樣可以防止下標(biāo)越界的異常,同理按上一張按鈕顯示當(dāng)前圖片的上一張,另外一個(gè)是設(shè)置圖片透明度,利用alpha變量設(shè)置圖片當(dāng)前透明度為0,利用按鈕設(shè)置圖片透明度,每點(diǎn)擊一下按鈕,變量alpha的值就會(huì)減少,相應(yīng)圖片透明度就會(huì)減少。同樣道理,點(diǎn)擊透明度增加時(shí),alpha變量的值就會(huì)增加,相
56、應(yīng)圖片透明度就會(huì)增加。 2014年9月4日 星期四 今天的做的是實(shí)現(xiàn)其播放功能,在面板容器上面添加按鈕,主要實(shí)現(xiàn)了其中三個(gè)(停止,播放,暫停)的功能,其中這些功能的實(shí)現(xiàn)都是通過(guò)MediaPlayer變量調(diào)用系統(tǒng)函數(shù)來(lái)實(shí)現(xiàn)的,點(diǎn)擊播放按鈕的時(shí)候,調(diào)用start()函數(shù),系統(tǒng)就會(huì)播放歌曲,點(diǎn)擊暫停的時(shí)候(點(diǎn)擊次數(shù)為基奇數(shù)次,即為停止),首先要判斷當(dāng)前是否為播放狀態(tài),如果是,點(diǎn)擊暫停按鈕的時(shí)候會(huì)調(diào)用start()函數(shù),如不是,則會(huì)調(diào)用stop()函數(shù);在點(diǎn)擊停止按鈕的時(shí)候,音樂(lè)停止,這時(shí)候會(huì)調(diào)用系統(tǒng)的reset()函數(shù),所有的歌曲重置,以便再次點(diǎn)擊歌曲進(jìn)行播放。在這整個(gè)過(guò)程中遇到一個(gè)問(wèn)題,就
57、是在開(kāi)始播放歌舞之前一定要先調(diào)用系統(tǒng)的prepare()函數(shù),已做準(zhǔn)備工作,不然系統(tǒng)是不會(huì)就調(diào)用start()函數(shù)開(kāi)始播放音樂(lè)的。 2014年9月5號(hào) 星期五 今天完成播放器基本功能中的上一首,下一首功能,通過(guò)設(shè)置當(dāng)前播放列表中播放歌曲的值currentitem,來(lái)設(shè)置所聽(tīng)歌曲。參照之前做過(guò)的圖片瀏覽例子,若想要聽(tīng)下一首歌曲,將currentitem的值加1,而后模除列表長(zhǎng)度,既可以進(jìn)行播放下一曲,同理,播放上一曲時(shí),為了防止下標(biāo)越界,會(huì)首先將currentitem加列表長(zhǎng)度,然后再減1后,對(duì)列表長(zhǎng)度進(jìn)行模除,即可得到上一曲。同時(shí)今天完成的還有設(shè)置時(shí)間,用系統(tǒng)函數(shù)setProgress
58、(currentVolume)來(lái)獲取歌曲當(dāng)前時(shí)間,對(duì)于音樂(lè)時(shí)間顯示,在進(jìn)行播放時(shí),每秒鐘對(duì)當(dāng)前時(shí)間重新賦值一次。同時(shí)對(duì)時(shí)間進(jìn)行格式轉(zhuǎn)換,由于系統(tǒng)獲取的當(dāng)前時(shí)間是以毫秒為單位,所以必須對(duì)當(dāng)前獲取到的時(shí)間進(jìn)行格式轉(zhuǎn)換。最后就結(jié)束了5天的Android軟件開(kāi)發(fā),老師解答了大家的一些困惑,有關(guān)于就業(yè)前景的,也有關(guān)于職業(yè)發(fā)展方向的,老師以自己的經(jīng)驗(yàn)給我們一一解答,聽(tīng)了老師的講解我們都有所收獲。 - iii -
59、武漢工程大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 認(rèn)識(shí)實(shí)習(xí)筆記 (實(shí)習(xí)期間學(xué)生每天需進(jìn)行實(shí)習(xí)記錄,字?jǐn)?shù)不少于300字/天,內(nèi)容包括:時(shí)間、地點(diǎn)、主要實(shí)習(xí)內(nèi)容等。宋體,小四號(hào)字,單倍行距)
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025《增值稅法》高質(zhì)量發(fā)展的增值稅制度規(guī)范增值稅的征收和繳納
- 深入學(xué)習(xí)《中華人民共和國(guó)科學(xué)技術(shù)普及法》推進(jìn)實(shí)現(xiàn)高水平科技自立自強(qiáng)推動(dòng)經(jīng)濟(jì)發(fā)展和社會(huì)進(jìn)步
- 激揚(yáng)正氣淬煉本色踐行使命廉潔從政黨課
- 加強(qiáng)廉潔文化建設(shè)夯實(shí)廉政思想根基培育風(fēng)清氣正的政治生態(tài)
- 深入學(xué)習(xí)2024《突發(fā)事件應(yīng)對(duì)法》全文提高突發(fā)事件預(yù)防和應(yīng)對(duì)能力規(guī)范突發(fā)事件應(yīng)對(duì)活動(dòng)保護(hù)人民生命財(cái)產(chǎn)安全
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)第一輪單元滾動(dòng)復(fù)習(xí)第10天平行四邊形和梯形作業(yè)課件新人教版
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)第14單元階段性綜合復(fù)習(xí)作業(yè)課件新人教版
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)易錯(cuò)清單十五課件新人教版
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)易錯(cuò)清單七課件西師大版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)易錯(cuò)清單六作業(yè)課件北師大版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)易錯(cuò)清單二作業(yè)課件北師大版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)四分?jǐn)?shù)的意義和性質(zhì)第10課時(shí)異分母分?jǐn)?shù)的大小比較作業(yè)課件蘇教版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)周周練四作業(yè)課件北師大版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)六折線統(tǒng)計(jì)圖單元復(fù)習(xí)卡作業(yè)課件西師大版
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)6除數(shù)是兩位數(shù)的除法單元易錯(cuò)集錦一作業(yè)課件新人教版