Chẳn hạn như nó phải chạy trên hệ thống máy có cấu hình máy hạn chế về tốc độ bộ vi xử lý, bộ nhớ sử dụng, phải chạy được ổn định liên tục trong một thời gian dài mà chỉ sử dụng một lượn
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA KỸ THUẬT MÁY TÍNH
LẬP TRÌNH TRÊN THIẾT BỊ DI ĐỘNG
ĐỀ TÀI: Xây dựng chương trình Android Explorer
GVHD : ThS Phạm Xuân Khánh
Võ Ngọc Hải Đăng 08520087 Huỳnh Thanh Việt 08520616
TP Hồ Chí Minh – 2012
Trang 2Mục Lục
1 Giới thiệu về hệ điều hành Android 3
2 Hệ thống tập tin, thư mục trên Android 3
II Xây dựng chương trình 5
1 Phân tích chức năng 5
2 Xây dựng chức năng 6
III Tài liệu tham khảo 16
Trang 3I Tổng quan
1 Giới thiệu về hệ điều hành Android
- Hệ điều hành là chương trình chạy trên hệ thống máy tính, quản lý các tài nguyên trên máy tính và là môi trường cho các chương trình ứng dụng chạy trên nó Ngày nay, khái niệm hệ điều hành không chỉ là trên máy vi tính mà còn được mở rộng cho nhiều thiết bị điện tử khác chẳng hạn như điện thoại thông minh (smart phone), các thiết bị cầm tay PDA v.v Như vậy hệ điều hành di động là hệ điều hành chạy trên hệ thống máy có tính di động cao Với đặc thù đó, hệ điều hành di động phải có những khả năng đặc biệt mà những hệ điều hành thông thường không có được Chẳn hạn như nó phải chạy trên hệ thống máy có cấu hình máy hạn chế về tốc độ bộ vi xử lý, bộ nhớ sử dụng, phải chạy được ổn định liên tục trong một thời gian dài mà chỉ sử dụng một lượng điện năng nhỏ, trong suốt thời gian chạy đó có thể duy trì các kết nối mạng không dây để đảm bảo việc liên lạc
- Android là một hệ điều hành chạy trên điện thoại di động được phát triển từ nhân Linux, mang nhiều đặc tính đặc trưng của môt hệ điều hành di động nhưng vẫn mang những tính chất chung của các hệ điều hành Là một hệ điều hành trẻ trung, hiện đại, tuy ra đời muộn nhưng lại được phát triển từ linux, rút kinh nghiệm từ nhiều hệ điều hành đi trước, được tích hợp nhiều công nghệ tiên tiến và đặc biệt là được phát triển
từ một “ông trùm công nghệ” tầm cỡ thế giới là Google nên Android đã sớm tìm được chổ đứng của mình
2 Hệ thống tập tin, thư mục trên Android
Tổng quan về hệ thống file trên Android :
- Trong android, các file được tổ chức thành các thư mục, theo mô hình phân cấp Tham chiếu đến một file bằng tên và đường dẫn Các câu lệnh thao tác file cho phép thực hiện các chức năng như dịch chuyển, sao chép toàn bộ thư mục cùng với các thư mục con chứa trong nó…
- Có thể sử dụng các ký tự, dấu gạch dưới, chữ số, dấu chấm và dấu phảy để đặt tên file Không được bắt đầu một tên file bằng dấu chấm hay chữ số Những ký tự khác như ‘/’, ‘?’,
‘*’, là ký tự đặc biệt được dành riêng cho hệ thống Chiều dài của tên file có thể tới 256 ký
tự Trong hệ điều hành android có sự phân biệt tên file chữ hoa và chữ thường, điều đó có nghĩa là trong cùng 1 thư mục có thể tồn tại những file có tên là File, FILE, file và chúng
là những file khác nhau Tất cả các file trong android có chung cấu trúc vật lý là chuỗi các byte (byte stream) Cấu trúc thống nhất này cho phép android áp dụng khái niệm file cho mọi thành phần dữ liệu trong hệ thống Thư mục cũng như các thiết bị được xem như file Chính việc xem mọi thứ như các file cho phép android quản lý và chuyển đổi dữ liệu một cách dễ dàng Một thư mục chứa các thông tin về thư mục, được tổ chức theo một
Trang 4định dạng đặc biệt Các thành phần được xem như các file, chúng được phân biệt dựa trên kiểu file: ordinary file, directory file, character device file, và block device file
Các kiểu file và tổ chức quyền hạn trên android :
- Trong nhiều hệ điều hành như window, người ta phân biệt rõ file (tập tin) và folder (hay directory : thư mục) là 2 thành phần khác hẳn nhau Tuy nhiên trên hệ điều hành android(cũng như linux) thì coi directory cũng là file và nó là một loại file đặc biệt
- Tương tự trên hệ thống linux, trên hệ điều hành android, một file có thể liên kết với một người sử dụng và một nhóm người sử dụng Sự liên kết đó là một tập hợp các quyền hạn truy cập bao gồm quyền được phép đọc (read), được phép ghi (write) và được phép thực thi (execute)
Cây thư mục trên hệ điều hành android:
- Thư mục (hay có thể gọi là file) root là thư mục gốc của tất cả các file thư mục còn lại Dưới nó có chứa một số file thư mục hệ thống Mỗi thư mục (trừ thư mục root) đều có một thư mục cha chứa nó, bản thân nó cũng có thể có nhiều file thư mục con Cấu trúc
đó có thể mô tả bằng một cây thư mục có dạng như sau :
Giới thiệu một vài thư mục tiêu biểu :
o /(root) : Là thư mục gốc Là thư mục duy nhất không có thư mục cha
o / mnt : thư mục chứa thiết bị lưu động (removeable)
o /system : chứa những thành phần cơ bản nhất của hệ thống
o /ect : chứa những file cấu hình của hệ thống, nó cực kỳ quan trọng vì sự hoạt động của hệ thống đều bị chi phối ở những file cấu hình này.
o /system/font : chứa những font chữ hiển thị được
o /system/lib : chứa các thư viện để các phần mềm hoạt động (các phần mềm viết bằng ngôn ngữ java)
o /system/app : chứa các file apk của phần mềm (Các file cài đặt ứng dụng, kiểu như MSI trong window hay dev trong Linux)
Trang 5II Xây dựng chương trình
1 Phân tích chức năng
- Hiển thị một danh sách các tập tin và thư mục trong thẻ nhớ của thiết bị chạy hệ điều hành Android, thiết lập icon tương ứng với các thư mục hay tập tin hiển thị Khi người dùng thao tác với các item trong danh sách đó thì :
Nếu item đó là thư mục thì chuyển qua hiển thị danh sách các thư mục và tập tin trong đó
Nếu item đó là tập tin thì thực thi mở tập tin đó bằng một chương trình thích hợp Ví
dụ như mở các file hình ảnh, file nhạc
- Hỗ trợ các tính năng thao tác giúp quản lý thư mục, tập tin cho người dùng :
Copy : sao chép thư mục, tập tin
Move : di chuyển thư mục, tập tin
Rename : đổi tên thư mục, tập tin
Delete : xóa thư mục, tập tin
Multi : hỗ trợ thao tác nhiều thư mục, tập tin
Properties : xem thông tin của thư mục, tập tin
Sorting : sắp xếp thư mục, tập tin
Create new directory : tạo một thư mục mới
Open : mở thư mục, tập tin
Go up : trở về thư mục cha
Android Explorer //mnt/sdcard
Create New Folder
Sorting
Open
Trang 62 Xây dựng chức năng
2.1 Giao diện chương trình
- Chương trình khi khởi chạy có giao diện như hình trên, bao gồm 1 listview hiển thi danh sách các thư mục và tập tin có trong thư mục hiện hành Các button hỗ trợ cho việc quản lý Màn hình làm việc chính của chương trình được xây dựng trong 2 layout
là main.xml : chứa ListView hiển thị các tập tin và thư mục trên sdcard và list_row.xml : chứa 2 trường là TextView – filename và ImageView - fileicon
- Để hiển thị thông tin thư mục, tập tin cũng như chèn các icon phù hợp cho từng item
trong list, nhóm em đã xậy dựng lớp CustomAdapter.java Giao diện trong
list_row.xml sẽ được gán cho đối tượng View để thực thi bằng cách sử dụng LayoutInflater Toàn bộ công việc sẽ được xử lý trong phương thức getView
- Trong lớp Main.java, ta khởi tạo một đối tượng thộc lớp CustomAdapter.java và set thông tin các trường filename, fileicon lên ListView để hiển thị ra chương trình
- Phương thức setOnItemClickListener sẽ xử lý sự kiện khi có một item trên ListView
được nhấn Nếu như vị trí item được nhấn là 0 thì chương trình sẽ trở về thư mục cha của thư mục hiện hành Nếu các item là thư mục thì phương thức sẽ xử lý đường dẫn và hiển thị danh mục tệp trong thư mục vừa nhấn Khi item được nhấn là tập tin, phương thức này sẽ gọi đến chương trình phù hợp để khởi chạy tập tin trên
- Trong lớp Main.java, phương thức refreshFileList thực thi việc hiển thị các tập tin và
thư mục có trong thư mục hiện hành Đầu tiên, nó sử dụng câu lệnh
static String rootPath=new Environment().getExternalStorageDirectory().getPath();
để lấy đường dẫn dữ liệu trong sdcard
Trang 7- Tiếp đó toàn bộ dữ liệu trả về sẽ được đưa vào một ArrayList là mFiles và tiến hành xử
lý để xuất ra
private String currentPath =rootPath;
private void refreshFileList()
{
File file=new File( currentPath );
File[] files = file.listFiles();
mFiles clear();
mFiles add(file);
if (files!=null) {
for (int i = 0; i< files length ; i++) mFiles add(files[i]);
}
path setText(currentPath);
}
2.2 Chức năng Open
- Thực hiện thao tác mở tập tin hoặc thư mục khi các đối tượng trên được nhấp chọn
Trang 8- Phương thức xử lý khi có 1 đối tượng trên ListView được nhấn
public void onItemClick(AdapterView<?> arg0, View v, int position,
long id)
{
File f = (File) list getItemAtPosition(position);
if(position==0) {
if( currentPath compareTo(rootPath)!=0) {
currentPath =f.getParent();
refreshFileList();
} }
else if(f.isDirectory()) {
currentPath =f.getPath();
refreshFileList();
}
else
{
actionOpen(f.getPath());
} }
- Để mở 1 tập tin thì trên thiết bị đó phải có chương trình hỗ trợ để mở tập tin này Sau
đó, ta sử dụng một Intent để gọi hàm API trên hệ thống giúp mở tập tin vừa chọn
2.3 Chức năng tạo thư mục mới
- Để tạo thư mục mới, chương trình sử dụng phương thức mkdir() nằm trong gói thư viện java.io , một bàn phím ảo sẽ được gọi ra để hỗ trợ cho việc gõ tên thư mục
Trang 92.4 Chức năng sắp xếp
- Hỗ trợ sắp xếp thư mục, tập tin theo tên trong chương trình Đồng thời có thể phát triển lên nhiều cách sắp xếp khác nhứ : theo kích thước, theo đuôi mở rộng
- Một biến kiểu boolean là iSort được gán true khi button Sort trên thanh công cụ được nhấn Lúc này chương trình sẽ thực hiện hiển thị lại tất cả file và folder trong thư mục hiện thời, chúng sẽ được đưa vào một list Comparator để tiến hành so sánh và sắp xếp theo tên rồi trả về lại giá trị để hiển thị theo thứ tự
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
iSort =isChecked;
refreshFileList();
}
private void refreshFileList() {
File file=new File( currentPath );
File[] files = file.listFiles();
mFiles clear();
mFiles add(file);
if( iSort )
Arrays.sort(files, filecomparator );
if (files!=null) {
for (int i = 0; i< files length ; i++) mFiles add(files[i]);
}
path setText( currentPath );
} Comparator<? super File> filecomparator = new Comparator<File>()
{ public int compare(File file1, File file2)
Trang 10{
return
String.valueOf(file1.getName().toLowerCase()).compareTo(file2.getName().toL
owerCase());
}
};
- Trước khi sắp xếp :
- Sau khi sắp xếp :
Trang 112.5 Chức năng Rename :
- Một AlertDialog được gọi để hiển thị hộp thoại Rename, phương thức actionRename sẽ
kiểm tra tên mới có trùng với một tên nào đó trong thư mục hiện tại hay không Sau đó
sẽ tiến hành đổi tên file hoặc folder
- Phương thức renameTo() trong gói java.io sẽ thực thi việc đổi tên file
Trang 122.6 Sao chép file và thư mục:
Ở đây ta sẽ dùng đệ quy để thực hiện việc copy 1 hay nhiêu thư mục và file
Trước tiên ta sẽ đưa hết các file hoặc thư mục được chọn vào một ArrayList<String> trong File Main.java và ta sẽ thực hiện việc truyền dữ liệu và gọi Activity mới với file
copyfile.xml là giao diện và Filescopy.java sẽ xử lý việc copy và thể hiện tiến trình này lên ProgressBar của copyfile.xml thông qua Intent để truyền dữ liệu và hàm
startActivityForResult để gọi Activity mới
Sơ đồ thuật giải:
Thư mục
File
Tạo thư mục
Phần tử tiếp theo trong ds
Kết thúc
Là File hay
là thư mục
Bắt đầu với danh sách file hoặc thư mục
Thực hiện copy file có
Không
Thực hiện đệ quy
Trang 13Hình minh họa thao tác copy:
2.7 Di chuyển file và thư mục:
Trong thực tế thì việc di chuyển file hoặc thư mục thì được thực hiện bằng cách đổi đường dẫn của file cần di chuyể như vậy để thực hiện việc di chuyển file và thư mục trong đồ án này ta sẽ dùng hàm rename() mà java đã hỗ trợ sẳn
Một chương trình chạy trên Android có thể sẽ có cấu trúc phức tạp Yêu cầu kết nối đến Server, CSDL, tải file … Nếu chúng ta xử lý các công việc đó trên Main Thread sẽ làm ứng dụng có vẻ chạy chậm hay treo vì chúng làm gián đoạn việc cập nhật, xử lý trên GUI Có
Trang 14nhiều cách để giải quyết vấn đề này: sử dụng Service, Thread hay đơn giản hơn là dùng Async Task (Asynchronous Task) Ở đây chúng ta dùng Async Task
Class AsyncTask này cho phép chúng ta chạy tác vụ nền và sau đó trả lại kết quả cập nhật lên GUI mà không phải động đến Thread/handler khá rắc rối và đau đầu
private class MyTask extends AsyncTask <Params, Progress, Result>{
@Override
protected void onPreExecute() { }
@Override
protected Result doInBackground(Params param) { }
@Override
protected void onProgressUpdate(Progress progress) { }
@Override
protected void onPostExecute(Result result) { }
}
Trong đó:
- Params: các parameters được truyền vào khi task được thực hiện
- Progress: Các thông tin về tiến độ task được trả về khi task chạy
- Result: Kết quả cuối cùng khi task xong
- Không phải khi nào cũng phải sử dụng đầy đủ chúng Để đánh dấu không dùng ta sử dụng kiểu Void
4 hàm thực hiện task (Không nhất thiết phải đầy đủ
+ onPreExecute() báo thay đổi đến UI ngay khi task chạy, thường được dùng để hiện progressbar chẳng hạn
+ doInBackground(Params ) Dùng để xử lý Task, có thể tốn nhiều thời gian
+ onProgressUpdate(Progress ), cập nhật tiến độ Task
+ onPostExecute(Result), trả về kết quả cập nhật lên UI
2.8 Di chuyển file và thư mục
Trrong java đã hỗ trợ xóa file hoặc thư mục rỗng bằng hàm Delete().Nhưng để xóa được một thư mục mà có nhiều thư mục con cấp 2 hay cấp 3 … thì ta phải dùng đệ quy và cũng tương tự như copy ta cùng dùng Intent để truyền dữ liệu đến FileDelete.java và hàm
startActivityForResult để gọi Activity mới
Ta có sơ đồ giải thuật sau:
Không
File
Thư mục
có
Phần tử tiếp theo trong ds
Kết thúc
Là File hay
là thư mục
Bắt đầu với danh sách file hoặc thư mục
Xóa File Thực hiện đệ quy
Thư mục
Rỗng
Trang 152.9 Di chuyển file và thư mục:
Chức năng này cho phép ta chọn nhiều file hoặc thư mục để thực hiện các tao tác copy, move, delete
Trong đồ án này chúng ta dùng một AlertDialog và dùng hàm setMultiChoiceItems để thể hiện một danh sách cho phép đánh dấu nhiều file hoặc thư mục
Ngoài ra ta còn thể hiện thêm 3 button là Copy, Move và Delete Khi nút nào được nhấn thì danh sách các file đã được chọn sẽ được gửi đi đến class tương ứng để xử lý
Vd: nhấn nút Copy thi ta sẽ thực hiện copy tất cả các file mà ta đã chọn
Trang 16III Tài liệu tham khảo
- Wei-Meng Lee Beginning Android Application Development
- Mark L Murphy Beginning Android Apress