版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄1.系統(tǒng)概述 32.系統(tǒng)功能分析 42.1主頁(yè) 42.2文件管理 52.3分類管理 63主要模塊實(shí)現(xiàn) 63.1快速進(jìn)入 63.2文件管理 73.3分類管理 114.系統(tǒng)測(cè)試 134.1按鈕和checkbox關(guān)系的測(cè)試 134.2expandablelistview調(diào)試 135.設(shè)計(jì)總結(jié) 13Android課程設(shè)計(jì)報(bào)告1.系統(tǒng)概述該應(yīng)用程序主要完成了手機(jī)文件管理的功能,包括新建,復(fù)制,移動(dòng)和重命名文件,并且能夠進(jìn)行文件分類管理,實(shí)現(xiàn)某些文件關(guān)聯(lián)應(yīng)用,其中包括常見(jiàn)的圖片,音樂(lè),視頻,文檔,安裝包以及壓縮包。另外,它能快速進(jìn)入內(nèi)置存儲(chǔ)卡或者外置存儲(chǔ)卡,不用單獨(dú)去找,方便使用。2.系統(tǒng)功能分析該應(yīng)用程序有一個(gè)Activity構(gòu)成,自定義titlebar,在viewpager里面放置三個(gè)Fragnment,分別管理三個(gè)頁(yè)面,這三個(gè)頁(yè)面如下:2.1主頁(yè)在主頁(yè)中,有九個(gè)按鈕:“后退”按鈕的功能是退出應(yīng)用程序;“圖片”,“音樂(lè)”,“視頻”,“文檔”,“安裝包”,“壓縮包”這六個(gè)按鍵的功能是跳轉(zhuǎn)到第三頁(yè)面,并且顯示相應(yīng)的內(nèi)容,例如,單擊“圖片”按鍵,應(yīng)用會(huì)跳轉(zhuǎn)到第三個(gè)頁(yè)面,同時(shí)打開(kāi)手機(jī)中的圖片,包括內(nèi)置存儲(chǔ)卡和外置存儲(chǔ)卡中的全部圖片;最后兩個(gè)按鍵運(yùn)用圖文混排,單擊后會(huì)跳轉(zhuǎn)到第二頁(yè)面并且打開(kāi)相對(duì)的文件,例如,單擊“extcard”,如果存在外置內(nèi)存卡就會(huì)在第二個(gè)頁(yè)面顯示外置存儲(chǔ)卡中的文件,否則將提示用戶外置存儲(chǔ)卡不存在,但不會(huì)跳轉(zhuǎn)。2.2文件管理在該頁(yè)面中也有9個(gè)按鈕,但是有部分按鈕剛開(kāi)始時(shí)不可用的,當(dāng)點(diǎn)擊checkbox時(shí)來(lái)設(shè)置按鈕是否可用:“后退”按鍵的功能是返回到主頁(yè)中,“取消”按鍵的功能是取消checkbox的選擇。點(diǎn)擊列表的某一項(xiàng)可以打開(kāi)該文件夾或者2.3分類管理該頁(yè)面中包含有一個(gè)按鈕和一個(gè)expandablelistview。單擊按鈕會(huì)跳轉(zhuǎn)到主頁(yè)中,點(diǎn)擊expandablelistview中某一條框會(huì)打開(kāi)相對(duì)應(yīng)的文件,例如,點(diǎn)擊圖片的條框就能顯示打開(kāi)手機(jī)中的圖片,包括內(nèi)置存儲(chǔ)卡和外置存儲(chǔ)卡中的全部圖片。3主要模塊實(shí)現(xiàn)3.1快速進(jìn)入快速進(jìn)入主要分為兩種:一種是點(diǎn)擊按鍵直接進(jìn)入相對(duì)應(yīng)的頁(yè)面及內(nèi)容,另一種是在文件第二個(gè)頁(yè)面的文本框中輸入想要進(jìn)入的文件夾或者想要打開(kāi)的文件,并點(diǎn)擊旁邊的“前進(jìn)”按鈕,就會(huì)進(jìn)入輸入的文件夾或者打開(kāi)輸入的文件。3.2文件管理文件管理的實(shí)現(xiàn)可以分為三步:讀取文件并顯示在靜態(tài)類Fragnmentmanager里面聲明一個(gè)靜態(tài)String類型的變量currentpath來(lái)記錄單圈文件夾的路徑,通過(guò)靜態(tài)類FileManager里面的靜態(tài)方法getlist來(lái)獲取當(dāng)前文件夾里面的全部文件,然后使用自定義的Adapter來(lái)顯示在自定義的listview里面。當(dāng)點(diǎn)擊某一item時(shí)重新調(diào)用該方法,以獲取新的文件列表,重新顯示在listview中。Getlist的代碼如下:publicstaticArrayList<HashMap<String,Object>>getlist(Stringpath){ArrayList<HashMap<String,Object>>list=newArrayList<HashMap<String,Object>>(); HashMap<String,Object>map=newHashMap<String,Object>(); Filefile1=newFile(path); if(file1.exists()){ FilefilePath=file1.getAbsoluteFile(); if(filePath.listFiles().length>0){ for(Filefile:filePath.listFiles()){ Strings=""; if(file.canRead())s+="r"; elses+="_"; if(file.canWrite())s+="w"; elses+="_"; if(file.canExecute())s+="x"; elses+="_"; s+=""+file.getUsableSpace()/1024/1024+"/" +file.getTotalSpace()/1024/1024; s+=""+file.getAbsolutePath(); map=newHashMap<String,Object>(); map.put("imageview",getpictures(file)); map.put("text1",file.getName()); map.put("text2",s); list.add(map);} returnlist; }else returnnull; }else returnnull;} Button之間關(guān)系的調(diào)控在listview的自定義的適配器MyAdapter中g(shù)etview的函數(shù)下,為checkbox寫(xiě)一個(gè)監(jiān)聽(tīng)事件,用以調(diào)控“新建”,“復(fù)制”等7個(gè)button的關(guān)系,并且將選擇的文件或者文件夾記錄下來(lái)。例如:選擇一個(gè)checkbox,“新建”按鍵不可用,“復(fù)制”,“移動(dòng)”,“刪除”,“重命名”和“取消”這幾個(gè)按鈕設(shè)置為可點(diǎn)擊,再選擇另一個(gè)checkbox,“重命名”按鈕就設(shè)置為不可點(diǎn)擊……checkbox的監(jiān)聽(tīng)事件代碼如下:privatevoidaddListener(listItemViewholder,finalintposition){holder.checkbox.setOnCheckedChangeListener(newOnCheckedChangeListener(){publicvoidonCheckedChanged(CompoundButtonarg0,booleanarg1){ HashMap<String,Object>map=newHashMap<String,Object>();if(arg1){Fragment2.newfile.setEnabled(false);Fragment2.copy.setEnabled(true);Fragment2.move.setEnabled(true);Fragment2.rename.setEnabled(true);Fragment2.paste.setEnabled(false);Fragment2.delete.setEnabled(true);Fragment2.cancel.setEnabled(true);HashMap<String,Object>map1=(HashMap<String,Object>)Fragment2.lv.getItemAtPosition(position);if(state.size()!=0){Filefirstfile=newFile(Fragmentmanage.checkfile.get(0).get("filepath").toString()); if(!((Fragmentmanage.currentpath.equals(firstfile.getParent()+"/")&&!Fragmentmanage.currentpath.equals("/"))||firstfile.getParent().equals(Fragmentmanage.currentpath)))){ Fragmentmanage.checkfile=newArrayList<HashMap<String,Object>>();}} map.put("position",position); map.put("filepath",Fragmentmanage.currentpath+map1.get("text1")+"/"); state.put(""+position,arg1); Fragmentmanage.checkfile.add(map); if(state.size()>1) Fragment2.rename.setEnabled(false);}else{ state.remove(""+position); if(state.size()==1) Fragment2.rename.setEnabled(true); if(state.size()==0){Fragment2.newfile.setEnabled(true);Fragment2.copy.setEnabled(false);Fragment2.move.setEnabled(false);Fragment2.rename.setEnabled(false);Fragment2.paste.setEnabled(false);Fragment2.delete.setEnabled(false);Fragment2.cancel.setEnabled(false);}for(inti=0;i<Fragmentmanage.checkfile.size();i++){if(Fragmentmanage.checkfile.get(i).get("position").equals(position)){Fragmentmanage.checkfile.remove(i);}}}}});}Button點(diǎn)擊事件的實(shí)現(xiàn)在Fragnmentmanager中聲明了靜態(tài)Boolean變量iscopy,ismove?!靶陆ā保合扰袛喈?dāng)前文件夾是否可寫(xiě),如果可寫(xiě),則進(jìn)行下一步操作,否則提示不能創(chuàng)建。再判斷要新建的文件是否存在,如果存在,則進(jìn)行下一步,否則新建文件。最后,判斷是否覆蓋,如果是,則刪除原文件并新建文件。“復(fù)制”:將靜態(tài)變量iscopy設(shè)置為true,ismove設(shè)置為false?!耙苿?dòng)”:將靜態(tài)變量iscopy設(shè)置為false,ismove設(shè)置為true?!爸孛保合扰袛喈?dāng)前文件夾是否可寫(xiě),如果可寫(xiě),則進(jìn)行下一步,否則提示沒(méi)有寫(xiě)權(quán)限,不能重命名。再判斷要重命名的文件是否存在,如果存在,則進(jìn)行下一步,否則重命名文件。最后,判斷是否覆蓋,如果是,則刪除原文件并重命名文件。流程圖與上圖相同?!罢迟N”:先判斷iscopy是否為true,如果是,則調(diào)用FileManager里面的copyfiles函數(shù),在判斷ismove是否為true,如果是,則調(diào)用FileManager里面的copyfiles函數(shù)。最后將選擇的列表清零,iscopy和ismove設(shè)置為false。Copyfiles函數(shù):publicstaticvoidcopyfiles(finalArrayList<HashMap<String,Object>>list,Stringtofilepath,Contextcontext)if(newFile(tofilepath).canWrite()){ for(inti=0;i<list.size();i++){ Filefile=newFile(list.get(i).get("filepath").toString()); if(file.isDirectory()){//復(fù)制文件夾的函數(shù),即先判斷文件是否為空,如果是,則在tofilepath里面新建一個(gè)文件夾,如果否,則判斷是否為文件,如果是,則直接調(diào)用pastefile函數(shù)將文件復(fù)制過(guò)去,如果否,則遞歸調(diào)用copyfolder函數(shù)copyfolder(file,tofilepath+file.getName()+"/",context);}elsepastefile(file.getPath(),tofilepath+file.getName()+"/",context); }elseToast.makeText(context,"無(wú)法復(fù)制,當(dāng)前文件沒(méi)有寫(xiě)權(quán)限!",Toast.LENGTH_SHORT).show(); }“取消”:將選擇的列表清零,iscopy和ismove設(shè)置為false,并調(diào)用removeselected函數(shù)將勾選的checkbox的鉤鉤去掉。State是MyAdapter中的記錄checkbox是否被選擇的變量。privatevoidremoveselect(){ Adapteradapter=lv.getAdapter(); HashMap<String,Boolean>state=((MyAdapter)adapter).getselected(); for(inti=0;i<state.size();i++){ state.put(Fragmentmanage.checkfile.get(i).get("position") .toString(),null); }}3.3分類管理先遍歷內(nèi)置存儲(chǔ)卡和外置存儲(chǔ)卡通過(guò)后綴名找出相對(duì)應(yīng)的文件,然后將其顯示在expandablelistview中,當(dāng)單擊某一文件時(shí),通過(guò)相關(guān)的應(yīng)用打開(kāi)該文件。具體函數(shù):publicstaticvoidopenFile(Filefile,Contextcontext){ if(file.canRead()){ Intentintent=newIntent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); Stringtype=getMIMEType(file); intent.setDataAndType(Uri.fromFile(file),type); context.startActivity(intent); }elseToast.makeText(context,"沒(méi)有讀取權(quán)限!",Toast.LENGTH_LONG).show();} //通過(guò)后綴名獲取文件類型,并關(guān)聯(lián)相關(guān)程序publicstaticStringgetMIMEType(Filefile){ Stringtype=""; Stringname=file.getName(); if(name.endsWith(".m4a")||name.endsWith(".mp3") ||name.endsWith(".wav")){ type="audio/*"; }elseif(name.endsWith(".mp4")||name.endsWith(".3gp")){ type="video/*"; }elseif(name.endsWith(".jpg")||name.endsWith(".png") ||name.endsWith(".jpeg")||name.endsWith(".bmp") ||name.endsWith(".gif")){ type="image/*"; }elseif(name.endsWith(".apk")){ type="application/vnd.android.package-archive"; }elseif(name.endsWith(".zip")||name.endsWith(".tar")){ type="application/x-compressed"; }elseif(name.endsWith(".txt")||name.endsWith(".sh") ||name.endsWith(".c")||name.endsWith(".conf") ||name.endsWith(".cpp")||name.endsWith(".html")){ type="text/*";}else{type="application/*";//如果無(wú)法直接打開(kāi),跳出列表由用戶選擇}returntype;}4.系統(tǒng)測(cè)試4.1”新建”等按鈕和checkbox關(guān)系的測(cè)試因?yàn)閘istview是采用的是自定義的布局,所以checkbox的選擇無(wú)法正常進(jìn)行,出現(xiàn)滑動(dòng)listview時(shí),被選中的checkbox改變。最后通過(guò)網(wǎng)上搜索,找到解決辦法在自定義的adapter里面定義一個(gè)boolean類型的數(shù)組,用以記錄被選中checkbox的位置,從而解決該問(wèn)題。 按鈕和checkbox之間有很強(qiáng)的關(guān)聯(lián)性,checkbox被選中時(shí)哪些能夠點(diǎn)擊,哪些不能點(diǎn)擊。點(diǎn)擊paste按鈕時(shí),checkbox被選中狀態(tài)的取消等待。這些的邏輯性太強(qiáng),導(dǎo)致我自己在該問(wèn)題上耗費(fèi)大量時(shí)間來(lái)調(diào)試,最終通過(guò)在Fragmentmanager這個(gè)靜態(tài)類里面定義靜態(tài)的boolean變量ismult和issingle來(lái)記錄checkbox總的狀態(tài),從而調(diào)節(jié)button的enable屬性。4.2expandablelistview調(diào)試 為了寫(xiě)這個(gè)expandablelistview,我在網(wǎng)上找了很多教程,但是發(fā)現(xiàn),運(yùn)行別人的程序時(shí)可以成功,但是自己寫(xiě)時(shí)就只能顯示一行,而且無(wú)法點(diǎn)擊顯示該標(biāo)題下的內(nèi)容,在當(dāng)天一下午不管怎樣修改代碼就是不正確,后來(lái)無(wú)意中復(fù)制別人寫(xiě)的布局代碼到我的程序中時(shí)竟然成功了.至此,我才知道原來(lái)布局也可以決定程序運(yùn)行的成敗的.4.3新建,復(fù)制等功能的實(shí)現(xiàn)測(cè)試 新建,復(fù)制等功能在Fragnmentmanager的類中以函數(shù)的形式寫(xiě)好了,但是當(dāng)調(diào)用該函數(shù)時(shí)發(fā)現(xiàn)有些可以成功,有些卻直接讓程序崩潰.通過(guò)不斷嘗試,找到崩潰的位置,終于找到了原因:原來(lái)文件權(quán)限的不同,使得對(duì)部分文件的讀寫(xiě)無(wú)法進(jìn)行.因此在后來(lái)修改代碼時(shí),將權(quán)限的判斷加入后就沒(méi)有出現(xiàn)類似問(wèn)題了.當(dāng)然,一個(gè)人的思維是不完善的,程序中可能還會(huì)有這樣的問(wèn)題沒(méi)有被發(fā)現(xiàn).5.設(shè)計(jì)總結(jié)經(jīng)過(guò)這次課程設(shè)計(jì),我發(fā)現(xiàn)自己在寫(xiě)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025綠化補(bǔ)種合同樣板
- 2025機(jī)械設(shè)備臨時(shí)租賃合同
- 2025年中國(guó)美容器材市場(chǎng)供需現(xiàn)狀及投資戰(zhàn)略研究報(bào)告
- 2021-2026年中國(guó)網(wǎng)絡(luò)視頻行業(yè)市場(chǎng)全景調(diào)研及投資規(guī)劃建議報(bào)告
- 2024-2025年中國(guó)長(zhǎng)三角經(jīng)濟(jì)圈行業(yè)投資潛力分析及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 2025年光伏硅片研究分析報(bào)告
- 2025年徽型鉆頭項(xiàng)目可行性研究報(bào)告
- 2024山東制藥專用設(shè)備制造市場(chǎng)前景及投資研究報(bào)告
- 蘇州搬運(yùn)設(shè)備項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告-圖文
- 2024河南圖書(shū)批發(fā)市場(chǎng)前景及投資研究報(bào)告
- 2024-2030年中國(guó)高密度聚乙烯管道行業(yè)發(fā)展展望與投資策略建議報(bào)告
- 2024-2030年中國(guó)醋酸乙烯行業(yè)運(yùn)營(yíng)狀況與發(fā)展風(fēng)險(xiǎn)評(píng)估報(bào)告
- 企業(yè)文化塑造與員工激勵(lì)方案
- 2024年01月22504學(xué)前兒童科學(xué)教育活動(dòng)指導(dǎo)期末試題答案
- 2023-2024學(xué)年貴州省遵義市新蒲新區(qū)八年級(jí)(上)期末數(shù)學(xué)試卷(含答案)
- 多發(fā)性神經(jīng)病護(hù)理
- 【MOOC】線性代數(shù)-浙江大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 開(kāi)門(mén)紅包費(fèi)用申請(qǐng)
- 區(qū)塊鏈原理與實(shí)踐全套完整教學(xué)課件
- 運(yùn)動(dòng)神經(jīng)元病小講課
- 工會(huì)的財(cái)務(wù)管理制度〔13篇〕
評(píng)論
0/150
提交評(píng)論