




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、池州學院本科畢業(yè)論文(設計) - 29 -前 言 Android是一種自由的且開放源代碼的HYPERLINK /view/880.htm操作系統(tǒng),它基于HYPERLINK /view/1634.htmLinux,其最顯著的優(yōu)勢就是極佳的塑造性極高的開放性。開放的源碼吸引大量的開發(fā)者和手機開發(fā)商,開放的平臺帶來更大的競爭,讓更多的消費者能夠以低價位買到心儀的手機。隨著智能手機的日益普遍和Android應用,游戲的日益豐富,一個嶄新的智能平臺也正在走向成熟。本課題的目的就是開發(fā)出一款基于Android平臺文件管理器,具備普通文件管理器所具備的基本功能,包括復制,剪切,粘貼,刪除,以及藍牙發(fā)送和接受
2、文件等。具有快速,穩(wěn)定等特點。1 Android應用概述 1.1 研究內(nèi)容 Android平臺文件管理器的設計,主要是滿足了人們?nèi)粘I钪袑κ謾C文件的常用操作包括復制,粘貼,刪除以及對文件共享的一些特殊情況的人性化設置。 1.2 研究意義Android是基于HYPERLINK /view/1634.htmLinux的開放源代碼的HYPERLINK /view/880.htm操作系統(tǒng)。2012年11月數(shù)據(jù)調(diào)查顯示,Android占有全世界智能HYPERLINK /view/148382.htm手機操作系統(tǒng)76%的市場份額,而中國市場占有率達90%1。隨著Android智能手機價格的平民化,那些功
3、能不強,畫面單調(diào),鍵盤操作過時的塞班系統(tǒng)手機已經(jīng)逐漸被淘汰了。在Android平臺開發(fā)應用或游戲,前景廣闊,市場需求量大。以前落后的操作手機上所有能玩的,在Android平臺都能做到,而且做得更好,界面效果更炫,用戶體驗更佳2。隨著手機成為人們?nèi)粘I詈凸ぷ鞑豢苫蛉钡闹匾ㄓ嵐ぞ?,其功能越來越強大。但隨著智能手機的廣泛應用以及技術的日漸成熟,漸漸也引起人們對于手機文件安全以及文件管理的越來越多的關注和擔心。 Android作為開源智能手機操作系統(tǒng),在手機業(yè)界造成了巨大影響,其安全性也隨著普及度日益突出。特別是2011以來,隨著Android應用的飛速增長,各種針對Android 系統(tǒng)的惡意軟件
4、以及攻擊暴增。因此,Android平臺的文件管理的問題,無疑是一個非常有價值的研究課題。 1.3 研究現(xiàn)狀和發(fā)展趨勢最早期的Android由Google公司提出,后來由開放手機聯(lián)盟深入開發(fā)。它是一款基于Linux核心(C語言)的軟件平臺和操作系統(tǒng),由核心操作系統(tǒng),中間件,用戶界面和應用軟件層組成。它具有開放式的體系結(jié)構(gòu),擁有非常良好的開發(fā)和調(diào)試環(huán)境,支持各種可擴展的用戶體驗,存在非常豐富的圖形系統(tǒng),因而有支持多媒體的功能和強大的瀏覽器。號稱是由首個移動終端打造的真正開放和完整的移動軟件。Android底層以Linux核心工作為基礎,只提供最基本功能,如驅(qū)動程序。其它的應用以java語言作為編程
5、規(guī)范編寫。截至5月31日,Android智能手機市場份額為38.1%。iphone市場份額為27.3%,黑莓市場份額從24.7%下滑至19.7%,Windows Phone市場份額也有了小幅下降,從5.8%下滑至5.7%。由于Android平臺的開源政策,他越來越受到人們的喜愛。Google+Linux的模式正逐漸成熟。可以預見,智能手機陣營中Android的市場占有率會越來越大,研究基于Android的文件的管理也會得到廣泛的應用。目前國內(nèi)android開發(fā)還是主要以應用開發(fā)為主:為企業(yè)開發(fā)應用、開發(fā)通用應用以及游戲開發(fā)。把開發(fā)出來的軟件放到Android market或者其他App Mar
6、ket銷售;還有就是一些創(chuàng)業(yè)型公司為國外公司進行外包開發(fā)。其中應用開發(fā)遠大于游戲的開發(fā)。2 系統(tǒng)分析 2.1 研究目標本軟件是基于Eclipse的開發(fā)環(huán)境,通過安裝ADT插件與AndroidSDK,由于目前市場的Android系統(tǒng)主要是2.2以及2.2以上的系統(tǒng),因此本應用的開發(fā)環(huán)境設定為2.2,開發(fā)出了針對Android文件件管理器。需要達到的目標主要有:(1) 了解Android應用程序的設計和開發(fā)過程。(2) 應用多種規(guī)則實現(xiàn)對Android手機中文件的管理。 (3) 穩(wěn)定的IO流對文件進行操作7。 (4) 藍牙文件傳輸。 2.2 需求分析本程序功能上主要包括兩個模塊: (1)對文件的普
7、通操作主要包括復制,粘貼,剪切,刪除,重命名的功能; (2)通過系統(tǒng)自帶的藍牙功能在有藍牙功能的手機之間發(fā)送文件。 2.3 性能分析 本程序性能的體現(xiàn)主要表現(xiàn)在對一些普通文件的操作,系統(tǒng)文件可見但由于考慮到系統(tǒng)的安全性問題以及手機系統(tǒng)的穩(wěn)定,將設定為不可操作。在軟件的整體性能上要求軟件必須有一定的,健壯性和穩(wěn)定性,對不同版本的Android系統(tǒng)有一定的兼容性。 3 Android應用概述 3.1 創(chuàng)建Android應用 打開eclipse,一次點擊File-New-Android Application Project,將看到如下圖所示的界面,下面依次講解各個選項的意義和用途。 (1) Pro
8、ject Name: 應用的工程名稱,在eclipse中開發(fā)時的總項目的跟文件夾的名稱,是應用程序的標識; (2) Package Name: 在src目錄下 的你的包名稱,一般命名為與自己信息相關的名稱,比如com.xyz.demo; (3) Mininum Required SDK: 你的程序要運行的最低android的系統(tǒng)版本,比如你設為2.3版本的話,那你的程序在2.3以下的手機系統(tǒng)上是無法運行的; (4) Target SDK: 如果設置了此屬性,那么在程序執(zhí)行時,如果目標設備的API版本正好等于此數(shù)值,他會告訴Android平臺:此程序在此版本已經(jīng)經(jīng)過充分測,沒有問題。不必為此程序
9、開啟兼容性檢查判斷的工作了。也就是說,如果targetSdkVersion與目標設備的API版本相同時,運行效率可能會高一些。但是,這個設置僅僅是一個聲明、一個通知,不會有太實質(zhì)的作用,比如說,使用了targetSdkVersion這個SDK版本中的一個特性,但是這個特性在低版本中是不支持的,那么在低版本的API設備上運行程序時,可能會報錯:java.lang.VerifyError。也就是說,此屬性不會幫你解決兼容性的測試問題。你至少需要在minSdkVersion這個版本上將程序完整的跑一遍來確定兼容性是沒有問題的。為避免以上問題以及提高效率,在本項目中,我們統(tǒng)一使用2.2版本。 (5)
10、Compile With: 就是你的程序要用android的那個版本的編譯器進行編譯,如果設置的高了,有些過時的方法會提示不建議使用的標示,設置的低了,對于一些高版本的新方法的使用在低版本的android手機上時無法使用的。2.2版本是目前最流行的開發(fā)SDK版本,因此本引用在2.2以下的版本中將無法使用或出現(xiàn)兼容性問題。 (6) Theme:顧名思義,主題的意思,就是設置你的程序的主題是黑色還是白色主題,android中常用這兩個默認的吧。該值將最終出現(xiàn)在AndroidManifest.xml中,并成為應用的主題,在創(chuàng)建過程中,此處只有四個選項,但到AndroidManifest.xml里修改
11、時應用可以有十多個值,甚至支持自定義的主題。圖3-1 新建項目3.2 項目目錄介紹可以看到在名為Application(項目名)的文件夾下面有src、gen、Android 4.4 libs等文件夾,每一個文件夾都對應有不同的作用3。(1)src下面放置的是開發(fā)人員自己編寫的代碼,具體內(nèi)容如下com.example是當前項目的包名(package name),里面包含了一個MainActivity.java文件,這個文件是當前整個Android項目運行時的入口,有如C語言的Main方法。(2) gen文件夾,里面的文件是程序自動生成的代碼,不用手動修改。里面有兩個文件:BuildConfig.
12、java是調(diào)試(Debug)時用的,一般不管。R.java 這個文件時eclipse軟件是自動產(chǎn)生的。會由 ADT 插件自動根據(jù)你放入 res 目錄的 XML 描述文件、圖像等資源,同步更新修改 R.java這個文件中,R.java是定義該項目所擁有的所有資源的索引文件。以 R.java 為名的這個檔案,你完全不需要,也應避免和禁止手工修改 R.java 這個檔案。自動產(chǎn)生的R 文件就像是個整個應用的字典一樣,包含了使用者界面、圖像、字符串等各式的資源與相應的編號 (十六進制的id) 。 Android 應用程序中很多時候會需要透過 R 類別調(diào)用資源。 系統(tǒng)在編譯時編譯器也會查看這個資源列表中
13、的信息,沒有使用到的資源就不會系統(tǒng)編譯,避免應用程序內(nèi)存空間的浪費。另外,當應用的資源丟失,或SDK的版本錯誤時,R.java文件也會丟失,給開發(fā)帶來很多麻煩。以上的src以及gen可以歸類為源碼區(qū),除了放置程序自動生成的源碼,自己寫的代碼也幾乎是放在src中。(3) 還有Android 4.4及Android Private Library,兩個都是類庫,前者是Android類庫,后者是新的SDK版本才有的,包含了libs下引入的第三方包。(4) Asset里面放置的是資源文件(5) Libs放置的是第三方jar包,但最新版本的ADK下會將這些第三方包轉(zhuǎn)移到Android Private L
14、ibrary里面。(6) res也是資源文件的放置位置,和Asset最明顯的不同點是res里的資源文件會通過R.java來生成ID,而Asset里的資源文件則不會,具體區(qū)別自己可谷歌一下。在res下面還有幾個比較重要和常見的文件夾:drawable-hdpi/drawable-ldpi/drawable-mdpi:分別放置高、低、中等分辨率的圖片,程序會自動根據(jù)運行設備的分辨率更換匹配大小的圖片。layout:放置布局文件(XML描述文件),布局文件是調(diào)整制定Activity的窗口布局文件。values:放置styles.xml以及strings.xml文件。(7) AndroidManife
15、st.xml 是 Android 應用程序的功能清單9,應用程序在這里列出該工程所提供的完整的功能。當應用程序開啟時,會提供諸如內(nèi)容提供者 (ContentProvider) 、處理的資料類型、 實際運行的類別、跨應用程序的資訊等等訊息。 你可以在此指定你的應用程序會使用到的服務 ( 諸如電話功能、網(wǎng)路功能、 GPS 功能等 ) 。當你新增一個頁面行為類別 (Activity) 時 ,你也需要先在此注冊這個新增的 Activity 類別后,才能順利調(diào)用1圖3-2 Android項目文件目錄4 文件管理器總體設計 4.1 文件管理器功能需求分析 項目的設計流程通常是基于項目的功能來安排的。以下是
16、文件管理器的功能需求分析: (1)掃描SD卡的目錄,獲得文件的完整路徑和名稱,并根據(jù)文件的后綴名判斷文件類型,然后根據(jù)文件類型,分配圖標,使用ListView顯示文件列表。 (2)為ListView注冊單擊事件,單擊事件的響應過程:根據(jù)文件ListView的位置獲得對應的文件,根據(jù)文件的后綴名分配對應的Intent(意圖),并講Intent發(fā)出,當手機中有注冊了對應的Intent的應用時,會彈出窗口,讓用戶自己選擇打開文件的應用程序。(以上除了發(fā)出Intent之外,都由系統(tǒng)自行完成。) (3)為ListView注冊長按事件,長按后彈出上下文菜單(ContextMenu),并完成剪切,復制,刪除
17、,重命名,屬性,粘貼,藍牙發(fā)送的功能。 (4)Android任何功能實現(xiàn)的基礎都是良好的界面,界面的好壞直接影響到用戶的好感度8,所以對于Android應用的開發(fā),尤其要注意界面的開發(fā)。如今大多數(shù)應用的版本升級,做的基本上都是設計更好的界面贏得更多用戶的青睞6。 4.2 文件管理器的功能實現(xiàn) 4.2.1 獲得SD卡內(nèi)的文件 Java是面向?qū)ο蟮木幊陶Z言4,因此程序中將SD卡內(nèi)的文件(“文件”不僅是指硬盤上的數(shù)據(jù),它還包括任何設備資源。在Unix_like系統(tǒng)中,所有的硬件設備都被看做是文件,“文件”是內(nèi)核范疇的概念,磁盤,U盤,內(nèi)存,網(wǎng)絡,甚至CPU都被內(nèi)核抽象為“文件”。5)抽象為File類
18、的對象。FilecurFileList= getFiles(Environment.getExternalStorageDirectory();MyListViewAdapter adapter = new MyListViewAdapter(this, curFileList); listview.setAdapter(adapter);如上述代碼所述,使用File類數(shù)組存儲內(nèi)存卡內(nèi)的文件,并將數(shù)組和當前Activity的Context和文件數(shù)組作為參數(shù)傳遞到Lisiview的Adapter(適配器)中。Overridepublic View getView(int position, Vi
19、ew convertView, ViewGroup arg2) Bitmap logo = null;View itemView = View.inflate(context, R.layout.listviewitem, null);ImageView imageView =(ImageView) itemView.findViewById(R.id.imageView); 上述代碼是初始化ListView的列表Item上的圖標,使得后面在判斷文件的類后可以在對應的圖標位置顯示相應的圖標。if(filesposition.isDirectory()logo = BitmapFactory.d
20、ecodeResource(context.getResources(), R.drawable.folder); 上述代碼是判斷文件的類型,當文件的類型為文件夾時,顯示相應的文件夾圖標。else if(filesposition.isFile()String name=filesposition.getName().toLowerCase();if(name.endsWith(.txt)logo= BitmapFactory.decodeResource(context.getResources(), R.drawable.text); 當文件的類型為普通文件時,根據(jù)文件的后綴名判斷文件的M
21、IME類型顯示相應的圖標,當文件名為“.txt”結(jié)束時,顯示對應的圖標。else if(name.endsWith(.mp3)logo= BitmapFactory.decodeResource(context.getResources(), R.drawable.audio);else if(name.endsWith(.jpg)|name.endsWith(.png)|name.endsWith(.jpeg)|name.endsWith(.bmp)logo= BitmapFactory.decodeResource(context.getResources(), R.drawable.pi
22、ctures);else if(name.endsWith(.mav)logo= BitmapFactory.decodeResource(context.getResources(), R.drawable.wav);else if(name.endsWith(.pdf)logo= BitmapFactory.decodeResource(context.getResources(), R.drawable.pdf);elselogo= BitmapFactory.decodeResource(context.getResources(), R.drawable.none); 當文件的后綴名
23、無法取得對應的圖標,或者文件沒有后綴名時,文件的圖標為帶問號的圖標。imageView.setImageBitmap(logo);TextView tv = (TextView) itemView.findViewById(R.id.filename);if(position = 0)tv.setText(MainActivity.path); 當文件列表的位置為0時,顯示是對應的文件夾路徑。elsetv.setText(filesposition.getName(); 當文件列表的位置不為0時,顯示是對應的列表項的文件或文件夾名稱。return itemView;以上代碼為Adapter的核
24、心代碼,即根據(jù)File數(shù)組的內(nèi)容顯示出對應的界面,根據(jù)File數(shù)組的類型,判斷文件時文件夾還是文件(Linnux中文件是一個抽象的概念,包括內(nèi)存卡在內(nèi),文件夾也屬于文件的范疇,java的File類可以判斷文件是文件夾還是文件),并根據(jù)類型加載不同的圖標。 如果是文件的話,會繼續(xù)根據(jù)文件的后綴嗎名判斷文件的類型,在如上的代碼中,MP3文件,TXT文件,PDF文件以及PNG文件等幾種常見的文件都加載了各自的圖標,當文件類型不可辨識或沒有后綴名時加載統(tǒng)一的未知文件類型的圖標。(在實際開發(fā)過程中,為防止用戶的誤操作而對文件進行保護,將文件屬性設置成不可讀,或因為安全問題不想讓用戶解析,或不想讓用戶打開
25、某文件,經(jīng)常采用故意修改文件后綴名或直接去掉后綴的方法)。 正確編譯和運行以上代碼,會顯示如下圖的界面,此圖顯示了手機SD卡內(nèi)的所有文件。圖4-1 獲取文件列表 4.2.2 為ListView注冊單擊事件并處理listview.setOnItemClickListener(new OnItemClickListener() Overridepublic void onItemClick(AdapterView arg0, View arg1,int position, long arg3) if(curFileListposition.isDirectory()path=curFileList
26、position.getAbsolutePath(); 點擊列表的選項時,獲取對應文件的絕對路徑。if (!curFileListposition.canRead() Toast.makeText(MainActivity.this, 拒絕訪問, 2000).show();return; 當文件受到系統(tǒng)的保護時,彈出友好提示,提示用戶改文件或文件夾為系統(tǒng)不可讀。if (curFileListposition.isFile() openFile(curFileListposition.getAbsoluteFile(); 當對應的文件為系統(tǒng)可讀文件且為普通文件時,調(diào)用程序中對應的的打開文件的程序
27、。elsecurFileList = getFiles(curFileListposition);/Log.e(curFileListposition, curFileListposition.getAbsolutePath(); 當對應的不是普通文件而是文件夾時,會調(diào)用程序中相應的打開文件夾的方法,獲取文件夾下的所有文件列表,并如同上述打開SD卡列表的方法打開文件夾的文件列表。MyListViewAdapter adapter = new MyListViewAdapter(getApplicationContext(), curFileList);listview.setAdapter(a
28、dapter);); 如上代碼是為ListView注冊并處理單擊事件單擊事件,當文件夾可讀時,判斷類型,如果單擊的是文件夾是,會重復打開內(nèi)存卡的步驟,如下圖所示是打開BlueTooth文件夾的界面。圖 4-2 打開文件夾目錄 當單擊文件時,調(diào)用openFile()方法,以下為openFile()方法代碼 ,當該方法被調(diào)用 ,程序會為選中的文件添加一個 intent屬性type,將對應的文件抽象成file傳入getMIMEType(aFile)方法中。private void openFile(File aFile) Intent intent=new Intent();intent.addFl
29、ags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);String type=getMIMEType(aFile); 打開普通文件的核心方法,根據(jù)文件的后綴名獲取對應文件的MIME類型,發(fā)出intent中帶有相應的type字段。intent.setDataAndType(Uri.fromFile(aFile), type); startActivity(intent); 以下為getMIMEType(File aFile) 方法,在該方法中,程序獲得了完整的文件名,并根據(jù)文
30、件名的后綴返回對應的類型,并將該類型添加到openFile()方法的intent對象中,當程序發(fā)出intent時,手機中注冊了該intent的應用會被加入到選擇打開程序的列表中10,正確編譯和運行以下代碼,將顯示如下圖所示的界面。private String getMIMEType(File aFile) String type=;String fName=aFile.getName();String end=fName.substring(fName.lastIndexOf(.)+1, fName.length().toLowerCase(); 根據(jù)文件的名稱獲取文件的后綴,以備后面的判斷時
31、使用。if(end.equals(m4a)|end.equals(mp3)|end.equals(mid)|end.equals(wav)|end.equals(ogg)type=audio; 當后綴名為m4a,mp3,wav時,返回的type的指端為“audio”;else if(end.equals(3gp)|end.equals(mp4)type=video; 當后綴名為3pg或mp4時,返回的type的指端為“video”;else if(end.equals(jpg)|end.equals(gif)|end.equals(png)|end.equals(jpeg)|end.equal
32、s(bmp)type=image; 當后綴名為jpg,gif,png等對應的圖片后綴時,返回的type的指端為“image”;else if(end.equals(apk)type=application/vnd.android.package-archive; 特別的,當后綴名為apk時,返回的type的指端為“application/vnd.android.package-archive”,返回時會調(diào)用系統(tǒng)方法安裝應用;else if(end.equals(chm)|end.equals(txt)|end.equals(java)type=text; 當后綴名為chm,txt或java時,
33、返回的type的指端為“text”;else if(end.equals(pdf)type=pdf;elsetype=*;if(end.equals(apk)elsetype=type+/*;return type;圖 4-3 選擇打開文件程序4.2.3 為ListView注冊長按事件并處理下面的方法為重寫的上下文菜單的方法,當用戶長按ListView的項目時,用戶的長按事件會交由如下的方法處理。public void onCreateContextMenu(ContextMenu menu, View source,ContextMenu.ContextMenuInfo menuInfo)
34、menu.add(0, ID_MENU_CUT, 120, 剪切);menu.add(0, ID_MENU_COPY, 130, 復制);menu.add(0, ID_MENU_DELETE, 140, 刪除);menu.add(0, ID_MENU_RENAME, 150, 重命名);menu.add(0, ID_MENU_PROPERTY, 160, 屬性);menu.add(0, ID_MENU_PASTE, 170, 粘貼); 在該方法中,注冊過上下文菜單的View對象,彈出上下文菜單,上述的代碼為給上下文菜單添加菜單子項,此處添加了復制,粘貼,刪除,重命名等菜單子項,后文會詳細介紹各
35、子菜單的具體用途。String fromFile = null;String toFile = null;String fFile = null;File cutFile = null;public boolean onContextItemSelected(MenuItem item) AdapterView.AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();final int index = (int) menuInfo.id; 上面添加子菜單的流程之后,在此處為子項分配ID和視圖,以
36、便在點擊時處理相應的點擊事件。switch (item.getItemId() case ID_MENU_CUT:fFile = curFileListindex.getAbsoluteFile().toString();cutFile = curFileListindex.getAbsoluteFile();break; 此處處理的為菜單的剪切事件,并記錄下對應的文件的絕對路徑并將對應的文件抽象成剪切的對象。case ID_MENU_COPY:fromFile = curFileListindex.getAbsolutePath().toString(); if(curFileListind
37、ex.getAbsoluteFile().isFile() isFile=true; else if(curFileListindex.getAbsoluteFile().isDirectory() copyFile(fromFile,toFile);break; 此處的代碼用于處理復制事件,記錄下對應文件的絕對路徑,并將對應的文件抽象成File對象,并立即判斷對應的文件時普通文件還是文件夾,并分別調(diào)用復制文件或文件夾的方法。復制文件和文件夾的處理方式有很大的區(qū)別,后文中會具體詳述。case ID_MENU_PASTE:toFile = curFileListindex.getAbsolute
38、Path().toString();if (fromFile != null) Log.e(paste, fromFile); if(isFile=true) copyFile(fromFile,toFile); isFile=false; 此處處理上下文菜單中對應的粘貼事件,并獲取對應的文件絕對路徑,獲取對應的文件抽象成File對象。 elsetry copyFloder(fromFile, toFile); 當源文件標記為復制文件時,分為復制文件和復制文件夾兩種情況,上文中標記的文件實例在此處使用。 catch (IOException e) e.printStackTrace();fin
39、ally if(fFile!=null) if(cutFile.isFile() copyFile(fFile, toFile); delete(cutFile); 此處代碼先判讀標記的剪切文件是否為空,當標記不為空,調(diào)用程序中的代碼處理剪切事件,其實是調(diào)用了上文的復制事件,然后調(diào)用系統(tǒng)的刪除方法刪除對應的文件。 if(cutFile.isDirectory() try copyFloder(fFile, toFile); catch (IOException e) e.printStackTrace();finallydelete(cutFile); 此處代碼被標記剪切的文件為文件夾的處理事
40、件,調(diào)用程序中的復制文件夾的方法,再調(diào)用刪除文件的方法,刪除文件方法內(nèi)部會判斷選擇的文件是文件或文件夾,并分別處理。MyListViewAdapter adapter1 = new MyListViewAdapter(getApplicationContext(),getFiles(curFileListindex.getParentFile();adapter1.notifyDataSetChanged();listview.setAdapter(adapter1);break; 重新獲取當前顯示目錄下的全部文件,并調(diào)用上文中顯示文件列表的方法,刷新列表,重新加載。case ID_MENU_
41、PROPERTY:AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.ic_launcher);builder.setTitle(文件屬性:);String path = curFileListindex.getAbsolutePath().toString();String name = curFileListindex.getName().toString(); 此處代碼處理的是查看文件屬性的事件,程序中會彈出對話框,并獲取文件的絕對路徑,文件名,并設置對話框的標題。l
42、ong size = 0;if(curFileListindex.getAbsoluteFile().isFile()size = curFileListindex.length(); 此處代碼用于獲取File對象的長度,及字節(jié)長度,變量的類型為long類型。 if(curFileListindex.getAbsoluteFile().isDirectory() try size=getsize(curFileListindex.getAbsoluteFile(); 此處代碼用于獲取File對象的長度,變量的類型為long類型,并將File對象判斷普通文件或文件夾,分情況計算長度。 catch
43、 (IOException e) e.printStackTrace(); builder.setMessage(文件路徑: + path + n文件名: + name + n文件大小+ size); 顯示對話框的主要信息,包含了對應的文件對象的文件絕對路徑,文件名,以及處理過長度的文件大小。builder.setPositiveButton(確定, new OnClickListener() Overridepublic void onClick(DialogInterface arg0, int arg1) );builder.create();builder.show();break;
44、設置對話框的確定按鈕,初始化按鈕并顯示出來,點擊到該確定按鈕只會將對話框去除,這是一種用戶友好的界面的設計。case ID_MENU_DELETE:Builder builder2 = new Builder(MainActivity.this);builder2.setTitle(警告!);builder2.setIcon(R.drawable.ic_launcher);builder2.setMessage(確定要刪除 + curFileListindex.getName(); 此處的代碼處理用戶的刪除的事件,彈出對話框,警告用戶,標題為警告,并設置圖標,獲取對應文件的文件名,這也是一種用
45、戶友好體驗的設計。builder2.setPositiveButton(確定, new OnClickListener() Overridepublic void onClick(DialogInterface arg0, int arg1) delete(curFileListindex.getAbsoluteFile(); 重寫對話框中的的按鈕點擊方法,并處理刪除對應文件的方法,程序中的刪除方法,改方法的內(nèi)部會判斷對應的文件對象是普通文件還是文件夾,并調(diào)用不同的流程刪除文件。MyListViewAdapter adapter = new MyListViewAdapter(getAppli
46、cationContext(),getFiles(curFileListindex.getParentFile();adapter.notifyDataSetChanged();listview.setAdapter(adapter); 刪除文件或文件夾后,重新獲取對應目錄下的所有文件,并重新刷新列表,重新加載界面中的ListView12。);builder2.setNegativeButton(取消, new OnClickListener() Overridepublic void onClick(DialogInterface arg0, int arg1) );builder2.cre
47、ate();builder2.show();break; 設置對話框的取消按鈕,點擊取消按鈕,對話框會被取消,但取消和確定事件的調(diào)用都是回調(diào)的方法,此處會初始化界面,并顯示到界面。case ID_MENU_RENAME:final EditText input = new EditText(getApplicationContext();/ AlertDialog dialog;Builder builder1 = new Builder(MainActivity.this);builder1.setTitle(重命名);builder1.setIcon(R.drawable.ic_launc
48、her);builder1.setView(input); 此處的代碼處理用戶的重命名事件,彈出對話框讓用戶輸入新的用戶名,并在用戶點擊類似確定的按鈕,完成完整的重命名事件。builder1.setPositiveButton(修改, new OnClickListener() Overridepublic void onClick(DialogInterface arg0, int arg1) String rename = input.getText().toString();if (curFileListindex.renameTo(new File(curFileListindex.g
49、etParent() + /, rename) Log.e(rename, success); 獲取對話框的按鈕確定按鈕,將對應的文件對象獲取,并調(diào)用File類的對應方法重名該文件。/ Log.e(rename, rename+);MyListViewAdapter adapter = new MyListViewAdapter(getApplicationContext(),getFiles(curFileListindex.getParentFile();adapter.notifyDataSetChanged();listview.setAdapter(adapter);); 在重命名后,系統(tǒng)下的文件列表的名稱,并重新獲取當前目錄下的全部文件,給構(gòu)造器新的文件列表,刷新列表。builder1.setNegativeButton(取消, new OnClickListener() Overridepublic void onClick(DialogInterface arg0, int arg1) );builder1.create();builder1.show();break; 同樣的,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機化學原料的環(huán)保合成方法優(yōu)化研究進展分析預測考核試卷
- 機器人服務創(chuàng)新模式與實踐案例考核試卷
- 景區(qū)旅游信息化平臺運營與管理考核試卷
- 制作氣球培訓課件
- 家電公司轉(zhuǎn)讓合同范本
- 委托汽車融資合同范本
- 正規(guī)吊車租賃合同范本
- 圍墻制作安裝合同范本
- 項目建設策劃合同范本
- 酒店餐飲服務流程優(yōu)化與提升制度
- 2025年廣西職業(yè)院校技能大賽高職組(商務數(shù)據(jù)分析賽項)參考試題庫資料及答案
- 2025年黑龍江農(nóng)墾職業(yè)學院單招職業(yè)傾向性測試題庫帶答案
- 四年級下冊 道德與法治 全冊教案
- 個人租房房屋合同范本
- MSA測量系統(tǒng)培訓
- 線上教育平臺教師教學行為規(guī)范與責任書
- 中央2025年全國婦聯(lián)所屬在京事業(yè)單位招聘93人筆試歷年參考題庫附帶答案詳解
- 《環(huán)境污染對生態(tài)系統(tǒng)的影響》課件
- 2024年保安員證資格考試題庫及答案
- 機器狗:技術成熟性能優(yōu)越場景剛需放量在即2025
- 《生態(tài)安全》課件
評論
0/150
提交評論