Tải bản đầy đủ (.doc) (15 trang)

lập trình trên thiết bị di động đề tài xây dựng chương trình android explorer

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (936.11 KB, 15 trang )

TRƯỜ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
SVTH : Trần Ngọc Thành 08520352
Trần Hữu Thành 08520351
Võ Ngọc Hải Đăng 08520087
Huỳnh Thanh Việt 08520616
TP. Hồ Chí Minh – 2012
Mục Lục
Mục Lục 2
I. 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
Page 2
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
đị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).

Page 3
 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)
Page 4
II. 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
Page 5
Android Explorer
//mnt/sdcard
Thư Mục Tập Tin
Create New Folder
Copy Move Rename Delete Properties
Sorting
Open
2. Xây dựng chức năng
2.1Giao 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().getExter nalStorageDirectory().getPath();
để lấy đường dẫn dữ liệu trong sdcard
- 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()
Page 6
{
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]);
}
mAdapter.notifyDataSetChanged();
path.setText(currentPath);
}
2.2Chứ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
- Phương thức xử lý khi có 1 đối tượng trên ListView được nhấn
Page 7
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.3Chứ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
2.4Chức năng sắp xếp
Page 8
- 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]);
}
mAdapter.notifyDataSetChanged();
path.setText(currentPath);
}
Comparator<? super File> filecomparator = new Comparator<File>()
{
public int compare(File file1, File file2)
{
return
String.valueOf(file1.getName().toLowerCase()).compareTo(file2.getName().toL
owerCase());
}
};

- Trước khi sắp xếp :
Page 9
- Sau khi sắp xếp :
2.5Chức năng Rename :
Page 10
- 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
2.6Sao 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:
Page 11
Thư mục
File
Tạo thư mục
Phần tử ếp
theo trong
ds
Kết thúc
Là File hay
là thư mục
Bắt đầu với danh sách
*le hoặc thư mục
Thực hiện copy *le

Lấy danh sách của thư mục

Không
Thực hiện đệ quy
Hình minh họa thao tác copy:
2.7Di chuyển file và thư mục:
Page 12
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ó
nhiề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.8Di 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:
Page 13
Không
File
Thư mục

Phần tử ếp
theo trong
ds
Kết thúc
Là File hay
là thư mục
Bắt đầu với danh sách
*le hoặc thư mục
Xóa File
Lấy danh sách của thư mục

Thực hiện đệ quy
Thư
mục
Có phần tử con
Rỗng
2.9Di 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
Page 14
III. Tài liệu tham khảo
- www.goole.vn
- www.vietandroid.com
- Wei-Meng Lee. Beginning Android Application Development
- Mark L. Murphy. Beginning Android Apress

Page 15

×