版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《物聯(lián)網(wǎng)移動(dòng)應(yīng)用開(kāi)發(fā)》課程設(shè)計(jì)題目班級(jí)學(xué)號(hào)姓名指導(dǎo)老師2016年6月25日
基本事件流:1.用戶按返回鍵2.播放器退出或者進(jìn)入后臺(tái)播放3.概要設(shè)計(jì)3.1軟件播放流程圖Step1.啟動(dòng)軟件后,軟件自動(dòng)檢索手機(jī)和sd卡的音頻文件,并組織顯示成列表.Step2.點(diǎn)擊列表的歌曲名字。Step3.播放音樂(lè)。Step4.點(diǎn)擊暫停,音樂(lè)暫停Step5.點(diǎn)擊播放轉(zhuǎn)到step3Step6.點(diǎn)擊停止停止播放音樂(lè)Step7.點(diǎn)擊退出。啟動(dòng)軟件啟動(dòng)軟件自動(dòng)檢索手機(jī)中的音樂(lè)文件,并顯示自動(dòng)檢索手機(jī)中的音樂(lè)文件,并顯示選擇歌曲,點(diǎn)擊播放選擇歌曲,點(diǎn)擊播放暫停/退出軟件暫停/退出軟件圖3.1音樂(lè)播放器流程圖4.界面展示4.1軟件部署系統(tǒng)編譯生成apk文件,將apk文件拷到手機(jī)或者sd卡中,直接打開(kāi)即可安裝。4.2啟動(dòng)軟件打開(kāi)軟件后的界面4.3歌曲列表界面歌曲列表界面4.4播放界面5.部分源代碼以下給出功能實(shí)現(xiàn)代碼,布局,風(fēng)格等代碼量過(guò)大,放在壓縮文件中文件夾顯示文件如圖所示播放器頁(yè)面布局Main.xml代碼如下<LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/tupian"> <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="200dip" android:layout_weight="1" android:drawSelectorOnTop="false" /> <SeekBarandroid:id="@+id/SeekBar01"android:layout_height="wrap_content"android:layout_width="fill_parent"android:max="100"android:progress="0"android:secondaryProgress="0"android:visibility="visible"/><TextViewandroid:layout_height="wrap_content"android:layout_width="fill_parent"android:id="@+id/currentProgress"/><TextViewandroid:layout_height="wrap_content"android:layout_width="fill_parent"android:layout_y="300dp"android:id="@+id/curtimeandtotaltime"/> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageButton android:id="@+id/front_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dip" android:background="@drawable/first1"/> <ImageButton android:id="@+id/stop_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/stop1" android:layout_marginLeft="10dip" /> <ImageButton android:id="@+id/start_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/start1" android:layout_marginLeft="10dip" /> <ImageButton android:id="@+id/pause_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/pose1" android:layout_marginLeft="10dip" /> <ImageButton android:id="@+id/next_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/next1" android:layout_marginLeft="10dip" /> </LinearLayout></LinearLayout>MainActivity.Java代碼如下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; /*定義進(jìn)度handler,顯示百分比進(jìn)度*/ HandlermPercentHandler=newHandler(); privateSeekBarmSeekBar=null; privateTextViewcurProgressText=null; privateTextViewcurtimeAndTotaltime=null; publicMediaPlayermMediaPlayer; privateList<String>mMusicList=newArrayList<String>(); privateintcurrentListItem=0; privatestaticfinalStringMUSIC_PATH=newString("/sdcard/"); @OverridepublicvoidonCreate(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() { /*初始化拖動(dòng)條和當(dāng)前進(jìn)度顯示值*/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){ /*如果拖動(dòng)進(jìn)度發(fā)生改變,則顯示當(dāng)前進(jìn)度值*/ curProgressText.setText("當(dāng)前進(jìn)度:"+progress); } publicvoidonStartTrackingTouch(SeekBararg0){ curProgressText.setText("拖動(dòng)中..."); } 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()); } ArrayAdapter<String>musicList=newArrayAdapter<String>(MainActivity.this,R.layout.musicitem,mMusicList); setListAdapter(musicList); } } /*更新拖動(dòng)條進(jìn)度*/ publicvoidstartSeekBarUpdate(){ mPercentHandler.post(start); } Runnablestart=newRunnable(){ publicvoidrun(){ //用一個(gè)handler更新SeekBar mPercentHandler.post(updatesb); } }; Runnableupdatesb=newRu
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第三單元第一節(jié)科學(xué)合理使用網(wǎng)絡(luò) 說(shuō)課稿 2024-2025學(xué)年川教版(2024)初中信息技術(shù)七年級(jí)上冊(cè)
- 二零二五年度塔吊租賃業(yè)務(wù)服務(wù)標(biāo)準(zhǔn)合同
- 2024年版房屋建筑工程施工協(xié)議模板下載版B版
- 2025版辦公室裝修工程環(huán)保施工監(jiān)督協(xié)議3篇
- 2024年透支還款計(jì)劃:分期還貸協(xié)議
- 【名師一號(hào)】2020-2021學(xué)年高中英語(yǔ)(外研版)必修二-雙基限時(shí)練13
- 2025版集資房項(xiàng)目土地儲(chǔ)備與出讓合同3篇
- 2024版養(yǎng)老院居住服務(wù)協(xié)議概覽版B版
- 2024年跨境電商汽車(chē)整車(chē)運(yùn)輸合同范本3篇
- 2025年小學(xué)語(yǔ)文四年級(jí)下冊(cè)名師教案習(xí)作:故事新編
- 2024年度陶瓷產(chǎn)品代理銷(xiāo)售與品牌戰(zhàn)略合作協(xié)議3篇
- 中國(guó)農(nóng)業(yè)銀行信用借款合同
- ISO 56001-2024《創(chuàng)新管理體系-要求》專(zhuān)業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之9:“5領(lǐng)導(dǎo)作用-5.3創(chuàng)新戰(zhàn)略”(雷澤佳編制-2025B0)
- 江蘇省連云港市2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試題(原卷版)
- 2024版旅游景區(qū)旅游巴士租賃合同3篇
- LINUX網(wǎng)絡(luò)操作系統(tǒng)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋湖北交通職業(yè)技術(shù)學(xué)院
- 河北省邯鄲市2023-2024學(xué)年高一上學(xué)期期末質(zhì)量檢測(cè)地理試題 附答案
- 醫(yī)療機(jī)構(gòu)競(jìng)業(yè)限制協(xié)議
- 2024年度物業(yè)管理公司員工獎(jiǎng)懲制度3篇
- 【MOOC】藥理學(xué)-華中科技大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 交通疏導(dǎo)安全教育培訓(xùn)
評(píng)論
0/150
提交評(píng)論