周穎穎 周波
摘要:該文介紹的是基于Android平臺(tái)的第三方應(yīng)用——手機(jī)系統(tǒng)信息查看系統(tǒng),即文件管理器,它的主要作用是查看和管理用戶和系統(tǒng)信息。該文在分析主流Android文件管理器后,結(jié)合市面上最流行的處理技術(shù)和設(shè)計(jì)思想,優(yōu)化管理器設(shè)計(jì)思路,最終設(shè)計(jì)出符合用戶需求的基于Android平臺(tái)的文件管理器。
關(guān)鍵詞:Android;手機(jī)文件管理器;系統(tǒng)信息查看
中圖分類號(hào):TN929文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)18-4422-03
Design of the Mobile Phone Information System Based on Android
ZHOU Ying-ying, ZHOU Bo
(Nanjing Communications Institute of Technology, Nanjing 211188, China)
Abstract: The file manager, a third-party applications, is described in this article based on the Android platform, which is also called mo bile system information to view system. The main role is to view and manage user and system information. In this paper, analysis is to be made out of the mainstream Android file manager, combined with the most popular processing techniques and design ideas and optimal management of design ideas, the final design to meet user needs based on the Android platform file manager.
Key words: Android; mobile phone file manager; view system information
2012年初,以制作信息圖見長(zhǎng)的asymco機(jī)構(gòu)向大家描繪了最新出爐的全球智能手機(jī)市場(chǎng)份額。從上圖中可以看出Android或基于Android定制的操作系統(tǒng)的市場(chǎng)份額最大。文件管理作為人機(jī)交互的重要組成部分,對(duì)于任何一個(gè)操作系統(tǒng)來說都是一個(gè)至關(guān)重要的功能模塊。市面上基于Android的文件管理器有很多種,各種文件管理器都實(shí)現(xiàn)了基本的文件瀏覽功能,但是由于版本繁多,開發(fā)思路各異,加之Android SDK的版本差異,使得各種文件管理器的功能、使用方法也各不同。如一致公認(rèn)的功能最為強(qiáng)大的ER Explore了,它幾乎實(shí)現(xiàn)了所有人們能夠想到的文件管理方面的操作,而且在性能方面做的也處理得非常到位。但是,幾乎所有使用者都反映操作界面單一,無法記錄和設(shè)置用戶偏好信息。另外一個(gè)備受人們歡迎的文件管理器應(yīng)該要算MIUI系統(tǒng)內(nèi)置的文件瀏覽應(yīng)用了。無論是操作界面還是操作方法都受到用戶的一致好評(píng)。但是其系統(tǒng)依賴性強(qiáng),固件配置需求高,使得低端配置的手機(jī)用戶無法得到最優(yōu)的體驗(yàn),部分手機(jī)用戶甚至是根本無法進(jìn)行安裝。所以開發(fā)一款操作簡(jiǎn)單、功能豐富的基于Android的文件管理器顯得非常必要。
1系統(tǒng)設(shè)計(jì)
1.1設(shè)計(jì)目的
設(shè)計(jì)目標(biāo)是為用戶提供一個(gè)界面友好、操作簡(jiǎn)便的手機(jī)文件管理器。為用戶提供常用的文件管理操作,另外還提供文件遠(yuǎn)程備份和還原。
1.2項(xiàng)目功能模塊劃分
按照不同的文件管理要求,將項(xiàng)目功能劃分為四個(gè)相互依賴的模塊:
1)文件讀取模塊,此模塊主要包括文件的展示與查看。
2)文件操作模塊,此模塊主解決文件操作處理方面的問題。
3)文件傳輸模塊,此模塊主要處理的是客戶端與服務(wù)器端進(jìn)行數(shù)據(jù)交互。
4)系統(tǒng)參數(shù)設(shè)置模塊,此模塊主要是對(duì)軟件系統(tǒng)參數(shù)的管理。
1.3系統(tǒng)性能設(shè)計(jì)
1)支持不同分別率(HVGA: 640*480,QVGA: 320*240)和不同尺寸(2.3英寸及其以上)屏幕;
2)支持不同固件版本(2.2及其以上)。
2 系統(tǒng)實(shí)現(xiàn)
2.1文件讀取功能的實(shí)現(xiàn)
在Android框架下,界面的布局主要是通過xml文件進(jìn)行的,主要使用的是線性布局,在其中加入自定義的DDGridView、DDList View使其實(shí)現(xiàn)彈性圖標(biāo)和列表顯示。
在主界面中主要實(shí)現(xiàn)了文件管理器的文件圖標(biāo)、列表顯示功能,此處新建了一個(gè)名為FileAdapter的接口用于指定文件顯示要顯示的最基本方法,其次是新建兩個(gè)名為DDGridView、DDListView的類分別繼承框架中的GridView類和ListView類重寫相應(yīng)的方法以實(shí)現(xiàn)窗口的彈性效果。
在軟件啟動(dòng)過程中已經(jīng)統(tǒng)一為所有菜單選項(xiàng)綁定了監(jiān)聽器,當(dāng)菜單面板被點(diǎn)擊時(shí)監(jiān)聽器中的點(diǎn)擊事件即被觸發(fā)。當(dāng)選擇菜單面板中搜索按鈕被點(diǎn)擊,系統(tǒng)就會(huì)執(zhí)行搜索功能對(duì)應(yīng)的語句??紤]到搜索功能可能會(huì)執(zhí)行較長(zhǎng)的時(shí)間,為不至于阻塞主線程因此這里考慮到使用多線程技術(shù)。
2.2文件操作功能的實(shí)現(xiàn)
當(dāng)處于多選模式下點(diǎn)擊文件或目錄時(shí),當(dāng)點(diǎn)擊項(xiàng)已經(jīng)被選中則從被選中項(xiàng)中刪除反之則添加到被選中項(xiàng)中。示例代碼如下:
文件復(fù)制功能的實(shí)現(xiàn)在多選模式和單選模式下總體實(shí)現(xiàn)思路是一致的,即將文件(目錄)路徑暫存到ArrayList中,但具體實(shí)現(xiàn)方法略有差別。
粘貼是在上一步及以前操作中有過剪切或復(fù)制操作的情況下才能正確進(jìn)行的操作。由于粘貼是比較耗時(shí)的一個(gè)操作,因此將它設(shè)計(jì)為一個(gè)后臺(tái)服務(wù)。用戶在執(zhí)行粘貼任務(wù)的時(shí)候依然可以去做其他的操作。刪除文件操作上主要是調(diào)用Linux shell命令,具體實(shí)現(xiàn)過程中有是否取得了root權(quán)限之分。
2.3文件傳輸功能的實(shí)現(xiàn)
本功能涉及到文件傳輸?shù)挠美斜镜貍浞菸募椒?wù)器和還原服務(wù)器端文件到本地。備份文件到服務(wù)器和還原服務(wù)器端文件到本地是現(xiàn)在很多公司提供的一項(xiàng)增值業(yè)務(wù)。此業(yè)務(wù)一經(jīng)推出受到極大的歡迎和好評(píng),它的目的在于降低因意外導(dǎo)致數(shù)據(jù)造成的損失。出于降低用戶風(fēng)險(xiǎn)考慮該文也實(shí)現(xiàn)了類似的功能。
文件的上傳下載均采用Http協(xié)議。該文主要完成了如何在Android平臺(tái)上利用Http協(xié)議進(jìn)行文件的傳輸。
文件上傳示例代碼如下:
private class DoUploadFile implements Runnable {
private String srcPath = null;
private String result = fileManager.getString(R.string.fail_update);
public DoUploadFile(String srcPath) {
this.srcPath = srcPath;
}
public void run() {
Looper.prepare();
String uploadUrl = "http://192.168.8.1:7001/WebRoot/UploadServlet"; String end = " ";
String twoHyphens = "--";
String boundary = "******";
try {
URL url = new URL(uploadUrl);
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setUseCaches(false);
httpURLConnection.setRequestMethod("POST");
httpURLConnection
.setRequestProperty("Connection", "Keep-Alive");
httpURLConnection.setRequestProperty("Charset", "UTF-8");
httpURLConnection.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
httpURLConnection.setConnectTimeout(3000);//設(shè)置超時(shí)
httpURLConnection.setReadTimeout(3000);
OutputStream os = httpURLConnection.getOutputStream();//連接的通路問題DataOutputStream dos = new DataOutputStream(os);
dos.writeBytes(twoHyphens + boundary + end);
dos.writeBytes("Content-Disposition: form-data; name="file"; filename=""
+ srcPath.substring(srcPath.lastIndexOf("/") + 1)
+ """ + end);
dos.writeBytes(end);
FileInputStream fis = new FileInputStream(srcPath);
byte[] buffer = new byte[8192]; // 8k
int count = 0;
while ((count = fis.read(buffer)) != -1) {
dos.write(buffer, 0, count);
}
fis.close();
dos.writeBytes(end);
dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
dos.flush();
InputStream is = httpURLConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
result = br.readLine();
if (!result.equalsIgnoreCase("SUCCESS"))
result = fileManager.getString(R.string.fail_update);
else {
ContentValues values = new ContentValues();
values.put("uploadfilepath", srcPath);
values.put("filename", new File(srcPath).getName());
DBHelper dbHelper = new DBHelper(fileManager);
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.insert("uploadlog", null, values);
db.close();
}
dos.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
czipDialog.dismiss();
Toast.makeText(fileManager, result, Toast.LENGTH_LONG).show();
Looper.loop();
}
在本地文件備份到服務(wù)器端的時(shí)候,本設(shè)計(jì)在手機(jī)客戶端利用SQLite數(shù)據(jù)庫來記錄備份到服務(wù)器端文件的概要信息,這些信息是日后還原數(shù)據(jù)的重要參數(shù)。2.4系統(tǒng)參數(shù)設(shè)置功能的實(shí)現(xiàn)
對(duì)于使用一個(gè)軟件每個(gè)客戶都有自己的習(xí)慣偏好,為迎合人們的這一習(xí)慣此軟件提供設(shè)置這一功能用于保存和修改用戶偏好信息。
3系統(tǒng)特色
3.1列表顯示狀態(tài)下拖動(dòng)文件實(shí)現(xiàn)刪除、復(fù)制、移動(dòng)功能
列表狀態(tài)下拖動(dòng)文件,實(shí)現(xiàn)文件的刪除、復(fù)制、移動(dòng)功能是為提升用戶體驗(yàn)和方便用戶進(jìn)行最基本的文件操而設(shè)計(jì)的,此功能類似于Windows下按住鼠標(biāo)左鍵操作文件。
實(shí)現(xiàn)此功能主要是重寫ListView中的onTouchEvent(MotionEvent event)。
3.2多語言和國(guó)際化
本系統(tǒng)兼容了簡(jiǎn)體中文和英文兩種語言,首先在values文件夾中建立默認(rèn)strings.xml,再建立values-zh-rCN(zh表示中文rCN表示簡(jiǎn)體)文件夾,在新文件夾里放置一個(gè)strings.xml。strings.xml里是各種語言字符串。如果涉及到參數(shù)配置類xml文件夾也要改成xml和xml-zh。這樣在Android的系統(tǒng)中進(jìn)行語言切換,應(yīng)用程序也會(huì)跟著切換語言。
3.3多標(biāo)簽頁顯示
在本系統(tǒng)中出于方便用戶管理文件特設(shè)計(jì)了類似與Windows下的多窗口的多標(biāo)簽窗口顯示,效果如圖1所示。
4結(jié)束語
本系統(tǒng)具有功能全面、結(jié)構(gòu)完整、數(shù)據(jù)管理容易、程序升級(jí)改造方便、界面友好、操作方便、安全性高等優(yōu)點(diǎn)。
作為人機(jī)交互的重要組成部分,文件管理功能實(shí)現(xiàn)的優(yōu)劣直接影響了這一操作系統(tǒng)的用戶體驗(yàn)。如果能開發(fā)出一款功能豐富、界面友好、性能優(yōu)越的文件管理器,不但能方便用戶管理個(gè)人數(shù)據(jù),為用戶節(jié)約寶貴的時(shí)間,同時(shí)還能增強(qiáng)Android操作系統(tǒng)的用戶體驗(yàn),進(jìn)而促進(jìn)Android系統(tǒng)市場(chǎng)份額的提升。
參考文獻(xiàn):
[1]勒巖,姚尚朗.Android開發(fā)入門與實(shí)戰(zhàn)[M].北京:人民郵電大學(xué),2009.
[2]李煒.Google Android開發(fā)入門指南[M].北京:人民郵電出版社,2009.
[3]郭宏志.Android應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2010.
[4]王向輝,張國(guó)印,沈潔.Android應(yīng)用程序開發(fā)[M].北京:清華大學(xué)出版社,2010.
[5]余志龍.Google Android SDK開發(fā)范例大全[M].北京:人民郵電出版社,2010.