Mục tiêu của OHA là phát triển tiêu chuẩn mở cho các thiết bị di động và sản phẩm đầu tiên của liên minh này đó là Android, một nền tảng di động được xây dựng trên nhân Linux phiên bản 2
Trang 1 LỜI CẢM ƠNLời đầu tiên em xin chân thành cảm ơn cô Nguyễn Thị Tính đã rất tận tình
hướng dẫn, chỉ bảo em trong suốt thời gian thực hiện đồ án tốt nghiệp vừa qua
Em cũng xin chân thành cảm ơn tất cả các thầy, các cô trong Trường Đại học Công nghệ Thông tin và Truyền thông đã tận tình giảng dạy, trang bị cho chúng em những kiến thức cần thiết và quý báu
Mặc dù em đã cố gắng, nhưng với trình độ còn hạn chế, trong quá trình làm
đề tài không tránh khỏi những thiếu sót Em hy vọng sẽ nhận được những ý kiến nhận xét, góp ý của các thầy cô giáo và bạn bè
Em xin chân thành cảm ơn !
Trang 2 LỜI CAM ĐOAN
Trong báo cáo này sử dụng những kết quả nghiên cứu lý thuyết, khảo sát thực tế và phân tích thiết kế hệ thống do em tham khảo tài liệu và trực tiếp thực
hiện dưới sự hướng dẫn của cô Nguyễn Thị Tính Những kết quả thu được là của
riêng em và không sao chép trái phép
Em cam đoan những kết luận trên là đúng sự thật, nếu sai lệch em xin chịu hoàn toàn trách nhiệm
Thái Nguyên, ngày 08 tháng 05 năm
2016
Sinh viên
Bế Thị Hằng
Trang 3CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 8
1.1 Tổng quan về Android 8
1.1.1 Khái niệm Android 8
1.1.2 Lịch sử phát triển Android 8
1.1.3 Kiến trúc Android 9
1.2 Hệ thống tập tin trên hệ điều hành Android 11
1.2.1 Tổng quan về hệ thống tập tin trên Android 12
1.2.2 Các kiểu tập tin trên Android 12
1.2.3 Tổ chức quyền sở hữu và quyền hạn trên file 131.2.4 Cây thư mục trên hệ điều hành Android 13
1.3 Phát triển ứng dụng trên Android 14
1.3.1 Lập trình Android cần những gì 14
1.3.2 Các thành phần trong một Android Project 16
1.3.3 Những thành phần cơ bản trong Android 17
1.3.4 Các thành phần giao diện và widget 19
Trang 43.1 Môi trường triển khai 54
3.2 Giao diện của chương trình 54
3.2.1 Giao diện Gridview 54
3.2.2 Giao diện các menu của chương trình 563.2.3 Giao diện Properties 58
3.2.4 Giao diện nén, giải nén và send bluethooth 593.2.5 Giao diện đổi tên tập tin hoặc thư mục 603.2.6 Giao diện tạo thư mục 61
3.2.7 Giao diện tìm kiếm file62
3.2.8 Giao diện xóa file hay thư mục 63
3.2.9 Một số giao diện mở tập tin cơ bản 64
KẾT LUẬN 65
TÀI LIỆU THAM KHẢO 66
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 67
Trang 5 DANH MỤC HÌNH ẢNH
Hình 1.1 Kiến trúc Android9
Hình 1.2 Bảng liệt kê một số kiểu file trong Linux 12Hình 1.3 Quyền hạn truy cập trên file 13
Hình 1.4 Cây thư mục trong Android 14
Hình 1.5 Cấu trúc một project Android 16
Hình 1.6 Cấu trúc một giao diện ứng dụng Android 20Hình 1.7 Activity Stack 24
Hình 1.8 Chu kỳ sống của Activity 25
Hình 2.1 Biều đồ use case của hệ thống 29
Hình 2.2 Biểu đồ trình tự use case đổi tên37
Hình 2.3 Biều đồ trình tự use case tìm kiếm 38
Hình 2.4 Biểu đồ trình tự use case sao chép 38
Hình 2.5 Biểu đồ trình tự use case xóa 39
Hình 2.6 Biểu đồ trình tự use case nén 39
Hình 2.7 Biểu đồ trình tự use case giải nén 40
Hình 2.8 Biểu đồ trình tự use case tạo thư mục mới 40Hình 2.9 Biều đồ trình tự use case gửi tập tin 41
Hình 2.10 Biểu đồ trình tự use case xem thông tin 41Hình 2.11 Biểu đồ trình tự use case mở tập tin 42
Hình 2.12 Biều đồ cộng tác use case đổi tên 42
Hình 2.13 Biểu đồ cộng tác use case tìm kiếm 43
Hình 2.14 Biểu đồ cộng tác use case sao chép 43
Hình 2.15 Biểu đồ cộng tác use case xóa 44
Hình 2.16 Biểu đồ cộng tác use case nén 44
Hình 2.17 Biểu đồ cộng tác use case giải nén 45
Trang 6Hình 2.18 Biểu đồ cộng tác use case tạo thư mục mới 45
Hình 2.19 Biểu đồ cộng tác use case gửi tập tin 46
Hình 2.20 Biểu đồ cộng tác use case xem thông tin 46
Hình 2.21 Biểu đồ cộng tác use case mở tập tin 47
Hình 2.22 Biểu đồ hoạt động use case mở tập tin 47
Hình 2.23 Biểu đồ hoạt động use case gửi tập tin 48
Hình 2.24 Biểu đồ hoạt động use case đổi tên 48
Hình 2.25 Biểu đồ hoạt động use case nén 49
Hình 2.26 Biểu đồ hoạt động use case giải nén 49
Hình 2.27 Biểu đồ hoạt động use case tạo thư mục mới 50
Hình 2.28 Biểu đồ hoạt động use case sao chép 50
Hình 2.29 Biểu đồ hoạt động use case di chuyển 51
Hình 2.30 Biểu đồ hoạt động use case xóa 51
Hình 2.31 Biểu đồ hoạt động use case tìm kiếm 52
Hình 2.32 Biểu đồ lớp của thành phần giao diện 52
Hình 2.33 Biểu đồ lớp tổng quát 53
Hình 3.1 Giao diện chính của chương trình 55
Hình 3.2 Giao diện Options Menu 56
Hình 3.3 Giao diện Context Menu 57
Hình 3.4 Giao diện Properties 58
Hình 3.5 Giao diện nén, giải nén và chia sẻ tập tin 59
Hình 3.6 Giao diện đổi tên file hay thư mục 60
Hình 3.7 Giao diện tao thư mục mới 61
Hình 3.8 Giao diện tìm kiếm file hay thư mục 62
Hình 3.9 Giao diện xóa file hay thư mục 63
Hình 3.10 Giao diện mở file ảnh và file nhạc trong android 64
Trang 8 LỜI NÓI ĐẦU
Trong thời điểm hiện nay, trên thế giới cũng như tại Việt Nam, thị trường điện thoại di động đang trở nên sôi động hơn bao giờ hết Do thu nhập của người dân ngày càng được cải thiện cũng như nhu cầu trao đổi thông tin ngày càng gia tăng theo Mặt khác, các nhà sản xuất điện thoại di động nắm được nhu cầu của giới trẻ ưa chuộng những sản phẩm công nghệ cao và do yêu cầu cạnh tranh giữa các nhà sản xuất điện thoại di động cho nên các nhà sản xuất điện thoại di động liên tục tung ra nhiều sản phẩm mới có nhiều tính năng mới, cấu hình cao, nâng cấp mẫu mã và kiểu dáng đẹp nhằm thu hút người mua, đặc biệt là các bạn trẻ
Cùng với sự phát triển của thị trường điện thoại di động là sự phát triển mạnh mẽ của xu hướng lập trình phần mềm ứng dụng cho các thiết bị di động Phần mềm, ứng dụng cho điện thoại di động hiện nay rất đa dạng và phong phú, đa
số các phần mềm ứng dụng là các loại trò chơi, các chương trình tiện ích như từ
điển, trình soạn thảo, diệt virus…Chính vì lý do đó mà em đã chọn đề tài: “Xây dựng ứng dụng Explorer trên điện thoại di động”.Nhằm giúp cho người sử
dụng quản lý dữ liệu cá nhân dễ dàng và nhanh chóng hơn
Nội dung của đề tài được chia thành 3 chương như sau:
Chương 1: Cơ sở lý thuyết
Chương 2: Phân tích thiết kế hệ thống
Chương 3: Xây dựng ứng dụng
Trang 9 CHƯƠNG 1
CƠ SỞ LÝ THUYẾT
Tổng quan về Android
Khái niệm Android
Android là một ngăn xếp phần mềm cho các thiết bị di động bao gồm một
hệ điều hành, middleware và các ứng dụng khóa được phát triển bởi Google Android được phát triển dựa trên nhân Linux 2.6 và các ứng dụng cho Android sử dụng ngôn ngữ lập trình Java
Android là một hệ điều hành mã nguồn mở, các nhà phát triển có thể tạo ra các ứng dụng cho Android và bất kỳ ai cũng có thể lấy và sửa đổi theo ý thích Tuy nhiên các thiết bị Android cũng chứa một số phần mềm độc quyền mà các nhà phát triển không thể tiếp cận được những phần mềm này
Lịch sử phát triển Android
Năm 2003, một công ty hoạt động trong lĩnh vực phát triển phần mềm cho các thiết bị di động mang tên là Android Inc được thành lập tại California – Mỹ bởi 4 thành viên: Andy Rubin, Rich Miner, Nick Sears và Chris White
Năm 2005, sau hơn 2 năm hoạt động thì Android Inc được Google mua lại với một khoản tiền không được tiết lộ và chính thức trở thành một trong những công ty con của gã khổng lồ ngành tìm kiếm Đồng thời cả Andy Rubin, Rich Miner, Nick Sears và Chris White đều quyết định tiếp tục làm việc tại chính công
ty của mình sau khi được mua lại
Tại Google, một nhóm nghiên cứu đứng đầu là Rubin đã bắt đầu phát triển một nền tảng dành cho thiết bị di động dựa trên nhân của hệ điều hành Linux Và sau đó, hệ điều hành này cũng được giới thiệu đến các nhà phát triển phần cứng lẫn phần mềm
Tháng 5 năm 2007, liên minh các nhà sản xuất thiết bị cầm tay - Open Handset Alliance (OHA) được thành lập bao gồm Google và một số thành viên khác
Trang 10của cộng đồng Linux mở như: Broadcom Corporation, Google, HTC, Intel, LG, Marvell Technology Group, Motorola, Nvidia,Qualcomm, Samsung Electronics, Sprint Nextel, T-Mobile và Texas Instruments Mục tiêu của OHA là phát triển tiêu chuẩn mở cho các thiết bị di động và sản phẩm đầu tiên của liên minh này đó là Android, một nền tảng di động được xây dựng trên nhân Linux phiên bản 2.6.
Tính cho đến thời điểm tháng 02/2016, Google Android đã có 11 phiên bản chính thức được đặt tên theo những món tráng miệng, với ngụ ý người dùng sẽ dễ dàng sử dụng hệ điều hành của họ như thưởng thức các món ăn đó Các phiên bản Android có tên mã lần lượt là: Cupcake 1.5, Donut 1.6, Eclair 2.0, Froyo 2.2, Gingerbread 2.3, Honeycomb 3.0, Ice Cream Sandwich 4.0, Jelly Bean 4.1, KitKat 4.4, Lollipop 5.0 và Marshmallow 6.0
Kiến trúc Android
Trang 11Hình 1.1 Kiến trúc Android
Applications
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: calendar, maps, contacts, brower, camera, phone, … Tất cả các ứng dụng này đều được viết bằng ngôn ngữ Java
Applications Framework
Bằng cách cung cấp một nền tảng phát triển mở Android cung cấp cho các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo Nhà
Trang 12phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo động, cộng thêm các cảnh báo đến các thanh trạng thái và nhiều hơn nữa.
Nhà phát triển có thể truy cập vào các API (Application Programming Interface) cùng một framework được xây dựng bởi các ứng dụng lõi Kiến trúc ứng dụng được thiết kế để đơn giản hóa việc sử dụng lại các thành phần, bất kỳ ứng dụng nào cũng có thể công bố khả năng của nó và bất kỳ ứng dụng nào khác cũng có thể
sử dụng những khả năng này(có thể hạn chế bảo mật được thực thi bởi framework) Tất cả các ứng dụng cơ bản là một bộ dịch vụ và các hệ thống, bao gồm:
Một tập hợp phong phú và mở rộng các View có khả năng kế thừa lẫn nhau dùng để thiết kế phần giao diện ứng dụng như: gridview, tableview, linearlayout,…
Trình cung cấp nội dung (Content Providers): Cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứng dụng khác (chẳng hạn như contacts) hoặc là chia
System C library – Thực hiện triển khai BSD (Berkeley Software
Distribution) của thư viện hệ thống C chuẩn (libc) và chỉnh cho các thiết bị nhúng dựa trên Linux BSD là giấy phép nguồn mở, cho phép mọi người sử dụng chương
Trang 13trình, mã nguồn của nó và các dẫn xuất.
Media Libararies – Dựa trên PacketVideo’s OpenCORE các thư viện hỗ
trợ phát và ghi âm với nhiều định dạng audio và video, cũng như đối với các file ảnh tĩnh bao gồm: MPEG4, H.264, MP3, AAC, ARM, JPG, và PNG
Surface Manager – Quản lý truy cập vào hệ thống hiển thị.
LibWebCore – Một công cụ trình duyệt web hiện đại.
SLG – Công cụ đồ họa 2D cơ sở.
3D libraries – Sự thực hiện dựa trên OpenGL ES 1.0 APIs.
Free Type – Biểu diễn font véc – tơ và bitmap.
QLite – Cơ sở dữ liệu
Webkit – Thư viện cho việc biểu diễn HTML.
Android Runtime
Tầng này bao gồm các thư viện lõi và máy ảo Dalvik Các thư viện lõi bao gồm các thư viện lớp cơ bản nhất như: cấu trúc dữ liệu, mạng, các tiện ích, hệ thống file DVM (Dalvik Virtual Machine) được thiết kế để đạt được các chức năng quản lý chu kỳ sống của đối tượng, quản lý ngăn xếp, quản lý luồng, bảo mật,…DVM là lý tưởng để sử dụng với yêu cầu về không gian bộ nhớ và CPU thấp so với các máy ảo chạy trên các máy tính để bàn và hệ thống máy chủ Theo tính toán của Google thì cần 64M RAM cho phép hệ thống hoạt động tốt, 24M RAM được sử dụng để khởi tạo và bắt đầu hệ thống cơ bản và 20M RAM được sử dụng cho các dịch vụ cấp cao
Linux kernel
Android được xây dựng trên nhân Linux nhưng Android không phải là Linux Android dựa trên Linux phiên bản 2.6 cho các hệ thống dịch vụ cốt lõi như an ninh, quản lý bộ nhớ, quản lý quá trình, ngăn xếp mạng, và mô hình điều khiển Hạt nhân cũng hoạt động như một lớp trừu tượng giữa phần cứng và phần còn lại của ngăn xếp phần mềm Linux Kernel hỗ trợ các thư viện chia sẻ và nó còn là một mã nguồn mở
Hệ thống tập tin trên hệ điều hành Android
Trang 14Như chúng ta đều biết, Android là một hệ điều hành dựa trên nền tảng Linuxnên hệ thống tập tin trên android cực kỳ giống hệ thống tập tin trên linux như
là về cách tổ chức, những quyền hạn của người sử dụng lên file
Tổng quan về hệ thống tập tin 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ệncá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ứatrong 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ự 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 tập tin 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 Thực tế còn một số loại file nữa có thể liệt kê theo bảng sau :
b File kiểu khối (block-type special file)
c File kiểu ký tự (character-type special file)
Trang 15l Liên kết tượng trưng (symbolic link)
p File đường ống (pipe)
- File bình thường (regular file)
Hình 1.2Bảng liệt kê một số kiểu file trong Linux
Tổ chức quyền sở hữu và quyền hạn trên file
Tương tự trên hệ thống linux, trên hệ điều hành android, một file có thể liênkế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ụ thể như sau: Một file sẽ có những quyền hạn tương ứng với 9 ký tự theo mẫu sau : Với ký tự r w x nghĩa là có quyền tương ứng với ký tự viết tắt đó, -nghĩa là không có quyền hạn đó
Hình 1.3 Quyền hạn truy cập trên file
3 ký tự đầu tiên là quyền hạn chủ nhân file
3 ký tự giữa là quyền hạn của nhóm tài khoản sở hữu file
3 ký tự cuối là quyền hạn của những người không thuộc nhóm sở hữu file.Trên hệ thống android, để biết xem được quyền hạn đó, ta có thể sử dụng câu lệnh ls –l –d
Ngoài ra có 2 lệnh khác cũng hữu dụng là lệnh chown đểthay đổi quyền sởhữufile, lệnh chmod đểthay đổi quyền hạn liên quan đến file và lệnh chgrp để thay đổi nhóm người sở hữu file
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ư
Trang 16mụ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 :
Hình 1.4 Cây thư mục trong Android
Giới thiệu một vài thư mục tiêu biểu :
/(root) : là thư mục gốc Là thư mục duy nhất không có thư mục cha
/ mnt : thư mục chứa thiết bị lưu động (removeable)
/system : chứa những thành phần cơ bản nhất của hệ thống
/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 độngcủa hệ thống đều bị chi phối ở những file cấu hình này
/system/lost+found : chứa những tập tin bị mất lúc khởi động máy
/system/font : chứa những font chữ hiển thị được
/system/lib : chứa các thư viện đểcác phần mềm hoạt động (các phần mềmviết bằng ngôn ngữ java)
/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)
/system/bin : chứa các chương trình nội trú của hệ thống
Trang 17
Phát triển ứng dụng trên Android
Lập trình Android cần những gì
Ngôn ngữ lập trình
Ngôn ngữ lập trình chính thức của Android là Java Mặc dù các ứng dụng trên Android được phát triển dựa trên nền tảng Java, nhưng Android không hỗ trợ J2ME và J2SE, là hai ngôn ngữ lập trình phổ dụng cho các thiết bị di động
Dựa trên máy ảo Java của Sun, Google đã tinh chỉnh và phát triển nên máy
ảo Dalvik để biên dịch mã Java với tốc độ biên dịch nhanh hơn và nhẹ hơn Đến phiên bản Froyo 2.2, Android đã hỗ trợ Just-in-time Compiler (JIT) làm tăng tốc
độ biên dịch Java lên gấp 2-5 lần so với các phiên bản trước
Bằng cách sử dụngcác framework của hãng thứ ba (VD: PhoneGap, Titanium,…), các nhà lập trình web cũng có thể phát triển ứng dụng Android một cách dễ dàng bằng các ngôn ngữ web phổ dụng như HTML, CSS, Javascript Tuy nhiên số lượng các ứng dụng đi theo chiều hướng này chưa nhiều
Ngoài ra các ứng dụng của Android sử dụng SQLite để quản lý cơ sở dữ liệu
Công cụ lập trình và cài đặt
Bước 1: Download và giải nén Eclipse Galileo tại :
http://www.eclipse.org/downloads/ Chúng ta nên sử dụng Eclipse gói
Galileo để lát nữa đỡ phải cấu hình lại Eclipse
Bước 2: Cài đặt ADT plugin
Mở Help Install new software Add
Ở mục Name: ADT plugin hoặc bạn có thể nhập tên khác cũng được.
Location: Nhập vào link:http://dl-ssl.google.com/android/eclipse/.
OK Next cho đến khi cài đặt hoàn thành.
Bước 3: Cài đặt Android SDK
Tải Android SDK tại http://developer.android.com/sdk/index.html và giải
Trang 18 Mở Eclipse WindowPreferencesAndroid trong thư mục SDK location chọn Browse đưa đường dẫn đến thư mục SDK vừa giải nén bấm Apply Install.
Bước 4: Tạo một máy điện thoại ảo (AVD)
Vào Window Android SDK and AVD manager Virtual devices New
Điền vào các mục Name, Target: chọn API level cho phù hợp ứng dụng bạn chọn, SDcard chọn Size dùng, nếu không thì để trống cũng được.
Trang 19 Các thành phần trong một Android Project
Hình 1.5Cấu trúc một project Android
AndroidManifest.xml: file XML mô tả ứng dụng và các thành phần được
cung cấp bởi ứng dụng (activities, services,…)
Trang 20R.java : file R.java là một file tự động sinh ra ngay khi tạo ứng dụng, file
này được sử dụng để quản lý các thuộc tính được khai báo trong file XML của ứng dụng và các tài nguyên hình ảnh
Build.xml: một file chứa mã script Ant (ant.apache.com) nhằm compile và
cài đặt ứng dụng lên máy
default.properties: file properties tạo bởi script Ant trên.
Bin/ : nơi chứa ứng dụng sau khi được compile.
bin/classes/: chứa các lớp Java đã được compile.
bin/classes.dex : chứa các file executable tạo bởi các lớp Java.
bin/yourapp.ap_ : chứa các tài nguyên của ứng dụng, đóng gói thành 1 file
zip
bin/yourapp-debug.apk hay bin/yourapp-unsigned.apk : chứa chính ứng dụng Android của ta
libs/ : nơi chứa các file Java JAR ứng dụng yêu cầu (third party).
src/ : nơi chứa mã nguồn Java của ứng dụng.
res/ : chứa các tài nguyên của ứng dụng như các icons, GUI layouts,… res/drawable/ : chứa file hình ảnh (PNG, JPEG,…).
res/layout/ : chứa UI layout, dưới dạng XML.
res/menu/ : chi tiết các menu, dưới dạng XML.
res/raw/ : chứa các file khác (CSV chứa thông tin account,…).
res/values/ : chứa các strings, dimensions,…
res/zml/: chứa các file XML khác cần cho ứng dụng.
assets/ : nơi chứa các files tĩnh (static) được yêu cầu đi kèm với ứng dụng.
Những thành phần cơ bản trong Android
Trang 21nổi, hoặc các Dialog.
Một ứng dụng thường bao gồm một tập hợp các Activity ràng buộc với nhau và thường có một Activity chính được gọi khi ứng dụng bắt đầu được chạy Mỗi một Activity mới được bắt đầu thì các Activity trước bị dừng lại, hệ thống bảo tồn các Activity này trong ngăn xếp (gọi là backstack) Khi người dùng thao tác xong với Activity hiện tại và nhấn nút BACK thì Activity này bị hủy và Activity trước được khôi phục
Giao diện người dùng cho các Activity được xây dựng bởi kiến trúc phân cấp các đối tượng view dẫn xuất từ lớp View đặt trong một cửa sổ của activity bằng phương thức: Activity.setContentView() Content view là đối tượng View ở gốc của cây phân cấp
Service
Service chạy nền và không tương tác trực tiếp với người dùng nên nó không
có giao diện trực quan Sử dụng Service để:
Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ thông
Trang 22báo nào mà nó cho là quan trọng Tất cả các receiver mở rộng từ lớp cơ sở BroadcastReceiver.
Broadcast Receiver không hiển thị một giao diện người dùng Tuy nhiên chúng có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, hay chúng
có thể sử dụng NotificationManager để cảnh báo người dùng Notifications có thể lấy sự chú ý của người dùng bằng nhiều cách, lóe sáng đèn sau, rung, tạo ra âm thanh, etc Chúng thường lấy một biểu tượng bền vững trong thanh trạng thái, cái
mà người dùng có thể mở để lấy thông điệp
Hệ thống chạy mỗi ứng dụng trong một tiến trình riêng biệt và hạn chế truy cập
dữ liệu của ứng dụng khác, vì vậy để ứng dụng của bạn kích hoạt một thành phần từ ứng dụng khác, người dùng phải gửi một thông điệp tới hệ thống xác định mục đích và bắt đầu một thành phần cụ thể Hệ thống sẽ kích hoạt cách thành phần này
Content provider
Một Content provider tạo ra một tập cụ thể các dữ liệu của ứng dụng khả dụng cho các ứng dụng khác Dữ liệu có thể được lưu trữ trong hệ thống file, trong một cơ sở dữ liệu SQLite, hay trong một cách khác nào đó Content provider mở rộng lớp cơ sở ContentProvider để cài đặt một tập các chuẩn các phương thức cho phép các ứng dụng khác đạt được và lưu trữ dữ liệu của kiểu mà nó điều khiển Tuy nhiên, các ứng dụng không gọi trực tiếp các phương thức này, chúng sử dụng một đối tượng ContentResolver và gọi các phương thức của nó Một ContentResolver có thể nói chuyện với bất cứ content provider nào, chúng cộng tác với provider để quản lý giao tiếp liên tiến trình
Content provider cung cấp cho chúng ta một đối tượng con trỏ giúp chúng
ta có thể dễ dàng lấy dữ liệu chỉ cần cung cấp đường dẫn cho nó Đường dẫn này gọi là URI, mỗi URI xác định duy nhất một tập dữ liệu Content provider kiểm soát nhiều tập dữ liệu và đưa ra một đối tượng URI riêng biệt cho mỗi đối tượng đó Cấu trúc một URI như sau:
<standard_prefix>://<authority>/<data_path>/<id>
Trang 23Trong đó:
standard_prefix: Tiền tố chuẩn cho Content provider, luôn là content:// authority: Tên của Content provider.
Data_path: Đường dẫn tới dữ liệu yêu cầu
id: Xác định bản ghi cần lấy.
Các thành phần giao diện và widget
View
Trong một ứng dụng Android, giao diện người dùng được xây dựng từ các đối tượng View và ViewGroup Có nhiều kiểu View và ViewGroup Mỗi một kiểu
là một hậu duệ của class View và tất cả các kiểu đó được gọi là các Widget
Tất cả mọi widget đều có chung các thuộc tính cơ bản như là cách trình bày
vị trí, background, kích thước, lề,… Tất cả những thuộc tính chung này được thể hiện hết ở trong đối tượng View
Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu trúc phân cấp như hình dưới Một screen là một tập hợp các layout và các widget được
bố trí có thứ tự Để thể hiện một screen thì trong hàm onCreate của mỗi Activity cần phải được gọi một hàm là setContentView(R.layout.main); hàm này sẽ load giao diện từ file XML lên để phân tích thành mã bytecode
Trang 24Hình 1.6Cấu trúc một giao diện ứng dụng Android
Viewgroup
ViewGroup thực ra chính là View hay nói đúng hơn thì ViewGroup chính
là các widget Layout được dùng để bố trí các đối tượng khác trong một screen Có một số loại ViewGroup như sau
LinearLayout: LinearLayout được dùng để bố trí các thành phần giao diện theo chiều ngang hoặc chiều dọc nhưng trên một line duy nhất mà không có xuống dòng
LinearLayout làm cho các thành phần trong nó không bị phụ thuộc vào kích thước của màn hình Các thành phần trong LinearLayout được dàn theo những tỷ
lệ cân xứng dựa vào các ràng buộc giữa các thành phần
FrameLayout: FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như là các Layer trong Photoshop Những đối tượng nào thuộc Layer bên dưới thì sẽ bị che khuất bởi các đối tượng thuộc Layer nằm trên FrameLayer thường được sử dụng khi muốn tạo ra các đối tượng có khung hình bên ngoài chẳng hạn như contact image button
Trang 25AbsoluteLayout: Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong layout dựa vào 2 thuộc tính toạ độ x, y Tuy nhiên, kiểu layout này rất ít khi được dùng bởi vì toạ độ của các đối tượng luôn cố định và sẽ không tự điều chỉnh được tỷ lệ khoảng cách giữa các đối tượng Khi chuyển ứng dụng sang một màn hình có kích thước với màn hình thiết kế ban đầu thì vị trí của các đối tượng sẽ không còn được chính xác như ban đầu.
RetaliveLayout: Layout này cho phép bố trí các widget theo một trục đối xứng ngang hoặc dọc Để đặt được đúng vị trí thì các widget cần được xác định một mối ràng buộc nào đó với các widget khác Các ràng buộc này là các ràng buộc trái, phải, trên, dưới so với một widget hoặc so với layout parent Dựa vào những mối ràng buộc đó mà RetaliveLayout cũng không phụ thuộc vào kích thước của screen thiết bị Ngoài ra, nó còn có ưu điểm là giúp tiết kiệm layout sử dụng nhằm mục đích giảm lượng tài nguyên sử dụng khi load đồng thời đẩy nhanh quá trình xử lý
TableLayout: Layout này được sử dụng khi cần thiết kế một table chứa dữ liệu hoặc cần bố trí các widget theo các row và column Chẳng hạn như, giao diện của một chiếc máy tính đơn giản hoặc một danh sách dữ liệu
Button
Sở dĩ widget button được giới thiệu đầu tiên trong số các widget khác là vì đây là đối tượng có thể nói là được dùng nhiều nhất trong hầu hết các ứng dụng Android
Để thiết kế giao diện với một button ta có 2 cách như sau:
Trang 26Cũng tương tự như Button thì với ImageButton chỉ có thêm một thuộc tính
android:src = “@drawable/icon” để thêm hình ảnh vào và không có thẻ text.
Để thể hiện được một list thông tin lên một screen thì cần phải có 3 yếu tố chính:Data Source: Data Source có thể là một ArrayList, HashMap hoặc bất kỳ một cấu trúc dữ liệu kiểu danh sách nào
Adapter: Adapter là một class trung gian giúp ánh xạ dữ liệu trong Data Source vào đúng vị trí hiển thị trong ListView Chẳng hạn, trong Data Source có một trường name và trong ListView cũng có một TextView để thể hiện trường
Trang 27name này Tuy nhiên, ListView sẽ không thể hiển thị dữ liệu trong Data Source lên được nếu như Adapter không gán dữ liệu vào cho đối tượng hiển thị.
ListView là đối tượng để hiển thị các thông tin trong Data Source ra một cách trực quan và người dùng có thể thao tác trực tiếp trên đó
Trang 28Nếu người dùng nhấn nút Back thì activity kết tiếp của stack sẽ di duyển lên
và trở thành active
Trang 29Hình 1.7Activity Stack
Các trạng thái của chu kỳ sống
Trang 30Hình 1.8Chu kỳ sống của Activity
Một Activity chủ yếu có 4 chu kỳ chính sau:
Active hoặc running: Khi Activity là được chạy trên màn hình Activity này tập trung vào những thao tác của người dùng trên ứng dụng
Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dùng vẫn trông thấy Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ
Trang 31đầy màn hình Một Activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi hệ thống trong trường hợp thiếu vùng nhớ.
Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác Nó vẫn còn trạng thái và thông tin thành viên trong nó Người dùng không thấy nó và thường bị loại
bỏ trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác
Killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu tiên Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn
và phục hồi lại trạng thái trước đó
Thời gian sống của ứng dụng
Bảy phương thức chuyển tiếp định nghĩa trong chu kỳ sống của một Activity Thời gian sống của một Activity diễn ra giữa lần đầu tiên gọi onCreate() đến trạng thái cuối cùng gọi onDestroy() Một Activity khởi tạo toàn bộ trạng thái toàn cục trong onCreate() và giải phóng các tài nguyên đang tồn tại trong onDestroy()
Thời gian hiển thị của Activity
Visible lifetime của một activity diễn ra giữa lần gọi một onStart() cho đến khi gọi onStop() Trong suốt khoảng thời gian này người dùng có thể thấy activity trên màn hình, có nghĩa là nó không bị foreground hoặc đang tương tác với người dùng Giữa 2 phương thức người dùng có thể duy trì tài nguyên để hiển thị activity đến người dùng
Các phương thức của chu kỳ sống
onCreate(Bundle): phương thức này được gọi khi Activity khởi chạy lần
đầu tiên Ta có thể sử dụng nó để thực thi việc khởi tạo các thành phần khác như tạo giao diện người dùng, kết nối dữ liệu đến danh sách Phương thức này có một tham số, nó có thể là null hoặc là thông tin trạng thái trước đó và luôn theo sau bởi
onStart().
onRestart(): Nếu phương thức này được gọi thì Activity sẽ được hiển thị
Trang 32lại từ trạng thái stop và luôn theo sau bởi onStart().
onStart(): Phương thức này được gọi trước khi một Activity ẩn với người
dùng Theo sau bởi onResume() nếu hoạt động đến trạng thái gần nhất hoặc onStop () để nó trở nên ẩn.
onResume(): Được gọi khi Activity bắt đầu tương tác với người dùng Tại
thời điểm này thì Activity ở trên đỉnh của ngăn xếp Activity Luôn theo sau bởi
onPause().
onPause(): Nó được gọi khi chuyển sang chế độ chạy nền, thường là khi có
một Activity khác được chạy trên nó Tại đây ta có thể lưu lại trạng thái cố định của chương trình cũng như ghi lại thay đổi trong cơ sở dữ liệu
onStop(): Gọi khi Activity không còn xuất hiện với người dùng và nó sẽ
không cần tới nữa Nếu bộ nhớ không đủ, phương thức này sẽ không bao giờ được gọi
onDestroy(): Phương thức này phải được gọi trước khi hủy một Activity
Nếu bộ nhớ không đủ, phương thức này sẽ không bao giờ được gọi
Trang 33 2.1.1 Biểu đồ Use case của hệ thống
a Xác định các tác nhân và use case
Trang 34 b Biểu đồ use case
Hình 2.1Biều đồ use case của hệ thống
2.1.2 Biểu đồ trình tự của hệ thống
Đặc tả use case
Trang 35Use case tạo thư mục mới
Tên use case : TaoThuMucMoi
Tác nhân : User
Mô tả : Cho phép người dùng tạo một thư mục mới trong sdcard.
Luồng sự kiện chính :
Trên thiết bị di động, người dùng bấm vào nút menu
Hệ thống hiển thị menu của chương trình, người dùng chọn chức năng “ New ”
Hệ thống hiển thị giao diện tạo thư mục mới Người dùng nhập tên thư mục muốn tạo và nhấn “Create”
Hệ thống tiếp nhận và xử lý thông tin, kiểm tra xem tên thư mục mà người dùng nhập có hợp lệ hay không
Nếu hợp lệ, hệ thống tạo thư mục mới và thông báo tạo thư mục thành công
Kết thúc Use case
Luồng sự kiện rẽ nhánh :
Tại giao diện tạo thư mục mới, người dùng chọn “Cancel” Kết thúc Use case
Hệ thống kiểm tra tên thư mục mà người dùng nhập không hợp lệ hoặc
đã tồn tại Hệ thống không tạo thư mục mà hiện thông báo cho người dùng biết Kết thúc Use case
Hậu điều kiện : Tạo được thư mục trong sdcard
Use case đổi tên
Tên use case : DoiTen
Tác nhân : User
Mô tả : Đổi tên tập tin hoặc thư mục trong sdcard.
Luồng sự kiện chính :
Trang 36 Trên giao diện của chương trình, người dùng nhấn và giữ vào tập tin hoặc thư mục muốn đổi tên.
Hệthống hiển thị menu ẩn của chương trình, người dùng chọn
Tại giao diện đổi tên , người dùng chọn “Cancel” Kết thúc Use case
Hệ thống kiểm tra tên thư mục mà người dùng nhập không hợp lệ hoặc
đã tồn tại Hệ thống không đổi tên thư mục hoặc tập tin mà hiện thông báo cho người dùng biết Kết thúc Use case
Hậu điều kiện : Đổi tên được thư mục hoặc tập tin trong sdcard.
Use case sao chép
Tên use case : SaoChep
Hệ thống hiển thị menu ẩn của chương trình, người dùng chọn “Copy”
Hệ thống thông báo đang có tập tin hoặc thư mục được sao chép Người
Trang 37dùng chọn nơi muốn sao chép sang bằng cách nhấn và giữ vào tập tin hoặc thư mục và chọn “Paste”.
Hệ thống hiển thị quá trình sao chép
Nếu thành công, hệ thống thông báo sao chép thành công
Kết thúc Use case
Luồng sự kiện rẽ nhánh
Hệ thống thông báo không có tập tin hoặc thư mục nào được sao chép Kết thúc use case
Hệ thống kiểm tra nơi mà người dùng sao chép dữ liệu đến nếu không
có quyền ghi Hệ thống sẽ từ chối sao chép và hiển thị thông báo Kết thúc use case
Hậu điều kiện : Sao chép được thư mục hoặc tập tin từ nơi này sang nơi
khác trong sdcard
Use case di chuyển
Tên use case : DiChuyen
Hệ thống hiển thị menu ẩn của chương trình, người dùng chọn “Cut”
Hệ thống thông báo đang có tập tin hoặc thư mục được di chuyển Người dùng chọn nơi muốn di chuyển sang bằng cách nhấn và giữ vào tập tin hoặc thư mục và chọn “Paste”
Hệ thống hiển thị quá trình di chuyển
Nếu thành công, hệ thống thông báo di chuyển thành công
Trang 38 Kết thúc Use case.
Luồng sự kiện rẽ nhánh
Hệ thống thông báo không có tập tin hoặc thư mục nào được di chuyển Kết thúc use case
Hệ thống kiểm tra nơi mà người dùng di chuyển dữ liệu đến nếu không
có quyền ghi Hệ thống sẽ từ chối di chuyển và hiển thị thông báo Kết thúc use case
Hậu điều kiện : Di chuyển được thư mục hoặc tập tin từ nơi này sang
nơi khác trong sdcard
Use case xóa
Tên use case : Xoa
Hệ thống hiển thị menu ẩn của chương trình, người dùng chọn “Delete”
Hệ thống hiển thị giao diện xóa tập tin và thư mục Người dùng nhấn
“Yes” để chấp nhận xóa tập tin hoặc thư mục
Hệ thống hiển thị quá trình xóa
Nếu thành công, hệ thống thông báo xóa thành công
Trang 39xóa tập tin và thư mục Kết thúc use case.
Hậu điều kiện : Xóa thành công thư mục hoặc tập tin trong sdcard.
Use case tìm kiếm
Tên use case : TimKiem
Tác nhân : User
Mô tả : Tìm kiếm tập tin hoặc thư mục
Luồng sự kiện chính :
Trên giao diện của chương trình, người dùng chọn nút “Search”
Hệ thống hiển thị giao diện tìm kiếm Người dùng nhập tên tập tin hoặc thư mục muốn tìm Sau đó nhấn nút “Search”
Hệ thống tiếp nhận và xử lý thông tin Tìm kiếm tập tin và thư mục trong thư mục hiện tại
Hệ thống hiển thị các tập tin và thư mục được tìm thấy
Người dùng nhấn nút “Ok” để quay về giao diện chính
Kết thúc Use case
Luồng sự kiện rẽ nhánh
Tại giao diện tìm kiếm , người dùng chọn “Cancel” Kết thúc Use case
Hậu điều kiện : Tìm kiếm được thư mục hoặc tập tin trong thư mục hiện
Trang 40 Hệ thống hiển thị menu ẩn của chương trình, người dùng chọn “Zip”
Hậu điều kiện : Nén thành công thư mục trong sdcard.
Use case giải nén
Tên use case : GiaiNen
Hệ thống hiển thị menu lựa chọn phương pháp giải nén cho tập tin
Hệ thống hiển thị quá trình giải nén