Một chương trình do người dùng tựviết sẽ không khác gì so với phần mềm đi cùng máy do cả 2 đều có toàn quyền sửdụng và triệu gọi các dịch vụ nền tảng của chiếc máy điện thoại vận hành tr
Trang 1LỜI CẢM ƠN
Sau một thời gian tìm hiểu về hệ điều về Hệ điều hành Android, em đã hoàn
thành đề tài: “Tìm hiểu hệ điều hành Android và xây dựng ứng dụng game Sudoku” Đề tài được hoàn thành nhờ sự cố gắng của bản thân, nhờ có sự hướng dẫn, chỉ bảo của thầy Trần Văn Khánh, cùng với sự giúp đỡ của bạn bè, của những
người đã có kinh nghiệm làm việc với Android Vì thời gian có hạn, cùng với kiếnthức hạn chế của mình, cho dù em đã cố gắng nhưng chắc chắn không tránh khỏi saisót Em rất mong nhận được sự góp ý của các thầy cô trong bộ môn cùng toàn thểcác bạn
Em xin chân thành cảm ơn!
Thái Nguyên, tháng 6 năm 2012
Sinh viên thực hiện
Trần Văn Toàn
Trang 2LỜI CAM ĐOAN
Đồ án tốt nghiệp là sản phẩm tổng hợp kiến thức mà sinh viên đã học đượctrong suốt quá trình học tập tại trường đại học Ý thức được điều đó, với tinh thầnnghiêm túc, sự học tập miệt mài của bản thân và nhờ sự giúp đỡ của bạn bè, thầy cô
em đã hoàn thành xong đồ án tốt nghiệp của mình
Em xin cam đoan những kết quả trong đồ án “Tìm Hiểu HĐH Android và xây dựng ứng dụng game Sudoku” là sự nghiên cứu của em, không sao chép của
ai Nội dung đồ án có tham khảo, sử dụng tài liệu, thông tin từ một số nguồn đượctrích dẫn trong phần tài liệu tham khảo Nếu có gì sai lệch em xin hoàn toàn chịutrách nhiệm
Tác giả đồ án
Trần Văn Toàn
Trang 3DANH MỤC CÁC BẢNG BIỂU
BẢNG 1.1 CÁC PHIÊN BẢN ANDROID ĐÃ PHÁT HÀNH 11
BẢNG 3.1 CHI TIẾT BẢNG FOLDER 66
BẢNG 3.2 CHI TIẾT BẢNG SUDOKU 67
DANH MỤC CÁC HÌNH ẢNH HÌNH 1.1 KIẾN TRÚC HĐH ANDROID 15
HÌNH 1.2 ANDROID BACK STACK 22
HÌNH 1.3 VÒNG ĐỜI CỦA ACTIVITY 23
HÌNH 1.4 CÀI ĐẶT ANDROID SDK 38
HÌNH 1.5 CÀI ĐẶT ANDROID ADT VÀO ECLIPSE 39
HÌNH 1.6 TÍCH HỢP ANDROID SDK VÀO ECLIPSE 40
HÌNH 1.7 TẠO ANDROID AVD 41
HÌNH 2.1 KHUÔN DẠNG GAME SUDOKU CHUẨN 43
HÌNH 2.2 BIỂU ĐỒ USE-CASE CỦA HỆ THỐNG 46
HÌNH 2.3 BIỂU ĐỒ TRÌNH TỰ UC SELECT NEW GAME 48
HÌNH 2.4 BIỂU ĐỒ CỘNG TÁC CHO UC NEW GAME 49
HÌNH 2.5 BIỂU ĐỒ TRÌNH TỰ UC SET CHECKPOINT 50
HÌNH 2.6 BIỂU ĐỒ CỘNG TÁC UC SET CHECKPOINT 51
HÌNH 2.7 BIỂU ĐỒ TRÌNH TỰ UC “UNDO TO CHECKPOINT” 53
HÌNH 2.8 BIỂU ĐỒ CỘNG TÁC UC “UNDO TO CHECKPOINT 54
HÌNH 2.9 BIỂU ĐỒ TRÌNH TỰ UC “GAME SETTING” 55
HÌNH 2.10 BIỂU ĐỒ CỘNG TÁC UC “GAME SETTING” 55
HÌNH 2.11 BIỂU ĐỒ TRÌNH TỰ UC “ADD NEW GAME” 57
HÌNH 2.12 BIỂU ĐỒ CỘNG TÁC UC “ADD NEW GAME” 58
HÌNH 2.13 BIỂU ĐỒ TRÌNH TỰ UC “ADD/EDIT DESCRIPTION” 60
HÌNH 2.14 BIỂU ĐỒ CỘNG TÁC UC “ADD/EDIT DESCRIPTION” 61
Trang 4HÌNH 2.16 BIỂU ĐỒ CỘNG TÁC UC “FILTER GAME” 64
HÌNH 2.17 BIỂU ĐỒ LỚP CỦA HỆ THỐNG 65
DANH MỤC TỪ VIẾT TẮT VÀ THUẬT NGỮ
Android SDK Android Software Development Kits(Bộ phát triển phần mềm Android)
ADT (Công cụ phát triển Android)Android Development Tool
AVD Android Virtual Devices(Thiết bị Android Ảo)
Trang 5MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
DANH MỤC CÁC BẢNG BIỂU 3
DANH MỤC CÁC HÌNH ẢNH 3
DANH MỤC TỪ VIẾT TẮT VÀ THUẬT NGỮ 4
MỤC LỤC 5
MỞ ĐẦU 8
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 10
1.1 Android là gì 10
1.2 Lịch sử phát triển của Android 10
1.3 So sánh Android với các HĐH khác và Android với J2ME 11
1.3.1 Android so với các HĐH khác 11
1.3.2 Android so với J2ME 12
1.4 Các tính năng của Android 13
1.5 Nhược điểm của Android 13
1.6 Kiến trúc của HĐH Android 14
1.7 Cấu trúc của một project Android 18
1.7.1 File AndroidManifest.xml 18
1.7.2 File R.java 19
1.7.3 Các tài nguyên dùng trong một ứng dụng Android 19
1.8 Các thành phần cơ bản của 1 ứng dụng Android 20
1.8.1 Activity 20
1.8.2 Services 25
1.8.3 Broadcast Receiver 25
1.8.4 Content provider 26
1.8.5 Intent 27
1.8.6 Notification 29
Trang 61.9 Giao diện người dùng trong Android 30
1.9.1 Views và ViewGroup 30
1.9.2 Button 32
1.9.3 ListView và GridView 32
1.9.4 TextView, EditText 33
1.9.5 Menu 34
1.9.6 Bắt sự kiện giao diện người dùng 34
1.10 Multimedia trong Android 35
1.11 Network và CSDL SQLite trong Android 35
1.12 Các công cụ cần có để xây dựng 1 ứng dụng Android 36
1.13 Cài đặt Android 37
1.13.1 Cài đặt Java JDK 37
1.13.2 Cài đặt Eclipse 37
1.13.3 Cài đặt Android SDK 37
1.13.4 Tích hợp Android SDK vào Eclipse 39
1.13.5 Tạo Android Virtual Devices (AVDs) 40
CHƯƠNG 2 XÂY DỰNG ỨNG DỤNG GAME SUDOKU 42
2.1 Sơ lược về game Sudoku 42
2.1.1 Nguồn gốc 42
2.1.2 Luật chơi 43
2.2 Phân tích bài toán 44
2.2.1 Các yêu cầu 44
2.2.2 Đặc tả các chức năng của chương trình 45
2.2.3 Biều đồ UC 46
2.2.4 Kịch bản cho các UC chính 47
2.2.5 Biểu đồ lớp của hệ thống 65
CHƯƠNG 3 CÀI ĐẶT CHƯƠNG TRÌNH 66
3.1 Thiết kế cơ sở dữ liệu 66
Trang 73.2 Một số lớp chính trong chương trình 67
3.3 Một số hình ảnh về giao diện chương trình 68
3.3.1 Giao diện Folder List 68
3.3.2 Giao diện Sudoku List 69
3.3.3 Giao diện Sudoku Play 70
3.3.4 Giao diện Game setting 71
KẾT LUẬN 73
TÀI LIỆU THAM KHẢO 74
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 75
Trang 8MỞ ĐẦU
Công nghệ các thiết bị di động đã phát triển mạnh mẽ chỉ trong một thời gianngắn, đặc biệt là với các dòng điện thoại thông minh Những chiếc điện thoại ngàycàng trở nên thông minh hơn, mạnh mẽ hơn, giá thành hạ, mẫu mã đẹp và bên cạnh
đó, chúng được trang bị những hệ điều hành mạnh mẽ Có thể kể đến một số Hệđiều hành phổ biến như Simbian, iOS, RIM, Window Mobile… Các hệ điều hànhnày đều có những tính năng mạnh mẽ, hỗ trợ tốt cho việc xây dựng ứng dụng chođiện thoại di động Một hệ điều hành ra đời sau, tuy nhiên đã gây được sự chú ý củangười dùng cũng như của các nhà phát triển ứng dụng đó là hệ điều hành Android.Android là một hệ điều hành mạnh mẽ không thua kém bất cứ hệ điều hành nào rađời trước đó Điều đặc biệt nhất phải kể đến đó là Android, là một nền tảng mãnguồn mở đầu tiên cho việc phát triển ứng dụng trên các thiết bị di động Với ưu thế
là mã nguồn mở, việc phát triển ứng dụng trên nền Android trở nên dễ dàng hơn vàđược hỗ trợ bởi các cộng đồng mã nguồn mở trên toàn thế giới
Ngày nay, do nhu cầu đời sống của con người ngày càng được nâng cao trong
đó nhu cầu giải trí được quan tâm tới nhiều nhất Chiếc điện thoại không chỉ đơnthuần là một phương tiện để nghe - gọi - nhắn tin nữa mà thêm vào đó là chức nănggiải trí như: nghe nhạc, đọc báo, lướt web Không khó để bắt gặp việc mọi ngườicầm điện thoại chơi game, đọc tin, nghe nhạc… ở mọi nơi, mọi lúc Một chiếc smartphone hỗ trợ đủ các tính năng như nghe nhạc, chơi game là sự lựa chọn của đa sốngười dùng Trong đó, các ứng dụng game là phong phú nhất, đa dạng nhất
Chính vì các lý do trên, em đã chọn đề tài “Tìm hiểu hệ điều hành Android
và xây dựng ứng dụng game Sudoku” cho đồ án tốt nghiệp của mình.
Nội dung chính của đồ án bao gồm:
CHƯƠNG I CƠ SỞ LÝ THUYẾT
Chương này trình bày các kiến thức cơ bản về hệ điều hành Android, cách tạomột ứng dụng trên nền Android, vòng đời của ứng dụng đó Đồng thời, chương này
Trang 9cũng trình bày các công cụ cần thiết để xây dựng một ứng dụng cũng như cách càiđặt các công cụ này.
CHƯƠNG 2 XÂY DỰNG ỨNG DỤNG GAME SUDOKU
Chương này trình bày về nguồn gốc, các biến thể, luật chơi của game, quátrình khảo sát, phân tích và thiết kế ứng dụng game Sudoku
CHƯƠNG 3 CÀI ĐẶT CHƯƠNG TRÌNH
Chương này trình bày một số cài đặt cụ thể của chương trình
Trang 10CHƯƠNG 1 CƠ SỞ LÝ THUYẾT1.1 Android là gì
Một cách định nghĩa đầy đủ thì có thể coi Android là một nền tảng mở chothiết bị di động của Google (gồm hệ điều hành, middleware và một số ứng dụng cơbản) Bộ Android SDK (Software Development Kits – devkit) cung cấp các công cụ
và các API cần thiết để xây dựng các ứng dụng android sử dụng ngôn ngữ lập trìnhjava.
1.2 Lịch sử phát triển của Android
- Android là tên 1 công ty nhỏ được thành lập 10/2003 tại Palo Alto, bangCalifornia, Mỹ Vào 8/2005 Google mua lại công ty này Những nhà đồng sáng lậpcủa Android chuyển sang làm việc tại Google gồm có Andy Rubin (đồng sáng lậpcông ty Danger), Rich Miner (đồng sáng lập công ty Wildfire Communications),Nick Sears (từng là phó chủ tịch của T-Mobile), và Chris White (trưởng nhóm thiết
kế và phát triển giao diện tại WebTV
- Tại Google, nhóm do Rubin đứng đầu đã phát triển một nền tảng thiết bị diđộng dựa trên hạt nhân Linux, được họ tiếp thị đến các nhà sản xuất thiết bị cầm tay
và các nhà mạng trên những tiền đề về việc cung cấp một hệ thống mềm dẻo, có khảnăng nâng cấp mở rộng cao
- Google muốn Android trở thành 1 nền tảng mở và miễn phí, vì thế, đa sốcác mã nguồn android được xuất bản dưới giấy phép mã nguồn mở Bất cứ ai muốndùng Android cũng có thể download đầy đủ mã nguồn của nó Đó là một sản phẩmkết tinh từ ý tưởng của Khối Liên minh thiết bị cầm tay mở do Google dẫn đầu, gồm
34 thành viên với các công ty hàng đầu về công nghệ và di động toàn cầu như:Qualcomm, Intel, Motorola, Texas Instruments và LG Electronics, các nhà mạngnhư T-Mobile, Sprint Nextel, NTT DoCoMo và China Mobile…
- Các nhà phát triển có thể sử dụng miễn phí bộ Android SoftwareDevelopment Kit (SDK) để xây dựng các ứng dụng của mình
Trang 11- Với Android khái niệm phần mềm lõi của điện thoại và các phần mềm đượccung cấp bởi hãng thứ 3 là không còn ranh giới Một chương trình do người dùng tựviết sẽ không khác gì so với phần mềm đi cùng máy do cả 2 đều có toàn quyền sửdụng và triệu gọi các dịch vụ nền tảng của chiếc máy điện thoại vận hành trên nềnAndroid.
- Android cung cấp cách tiếp cận thống nhất cho việc phát triển ứng dụng.Người phát triển chỉ cần phát triển ứng dụng cho Android và tất cả các ứng dụng của
họ sẽ chạy trên các thiết bị cầm tay khác được trang bị HĐH Android
Trang 12- Android là thực sự là một nền tảng đa nhiệm Các nền tảng khác cũng có thểlàm được điều này tuy nhiên việc quản lý đa nhiệm của chúng có phần khó khăn vàkém khả thi
- Android cho phép xây dựng các ROM tuỳ biến cho Android, điều này manglại khả năng tuỳ biến cao hơn
- Android cho phép thay đổi các cài đặt nhanh hơn Với các HĐH khác ngườidùng thường gặp rắc rối với các thiết lập hệ thống mỗi khi họ muốn sử dụng cácthiết bị Android thì cho phép bạn sử dụng các widget để quản lý các cài đặt trực tiếp
từ màn hình chính, những cài đặt ít được sử dụng có thể không có widget riêng, tuynhiên cũng có thể tạo Shortcut trên màn hình chính để có thể truy cập ngay đến cácthiết lập khi muốn thay đổi
- Đồng bộ với máy tính và bộ nhớ, người dùng Android có thể copy dữ liệuvào thẻ nhớ, đưa vào máy Ngoài ra, việc đồng bộ với máy tính cũng đơn giản hơn,thêm vào đó Android cũng hỗ trợ Flash, pin và thẻ nhớ có thể tháo rời và dễ dàngthay mới, nâng cấp
1.3.2 Android so với J2ME
a) Giống nhau
Đều sử dụng nền tảng là ngôn ngữ lập trình java
Đều sử dụng máy ảo và các API có sẵn cho các nhà phát triển ứngdụng
b) Điểm khác nhau
J2ME (Java 2 Micro Edition) là một nhánh của ngôn ngữ lập trìnhJava để phát triển các ứng dụng trên điện thoại di động hay các thiết bịcầm tay nhỏ gọn khác Trong khi đó Android là một nền tảng gồmHĐH, ngôn ngữ lập trình và các phần mềm trung gian khác
J2ME chạy trên các thiết bị di động có hỗ trợ java trong khi đóAndroid chạy trên nền tảng của HĐH Android J2ME đòi hỏi chương
Trang 13trình phải nhỏ gọn do vậy bị hạn chế về bộ nhớ, kích thước file, đồhoạ, âm thanh, Android thì hỗ trợ tốt hơn.
Android có thể can thiệp sâu vào phần cứng còn J2ME thì không Bêncạnh đó, J2ME biên dịch chương trình thành mã bytecode còn Androidbiên dịch thành định dạng dex, định dạng được tối ưu hoá cho việcgiảm dung lượng bộ nhớ
1.4 Các tính năng của Android
- Storage (Lưu trữ): Android sử dụng SQLlite - một CSDL quan hệ nhỏ đểlưu trữ DL có cấu trúc
- Kết nối (Connectivity): Android hỗ trợ GSM/EDGE, IDEN, CDMA,
EV-DO, UMTS, Bluetooth (bao gồm A2DP and AVRCP), WiFi, LTE, và WiMAX
- Tin nhắn: Android hỗ trợ cả tin nhắn dạng SMS (Short Message Services)
và MMS (Multimedia Messaging Service)
- Tích hợp Trình duyệt Web (Web Browser): Dựa trên các bộ Webkit mãnguồn mở (open Webkit) cùng với GoogleChrome V8 javascript
- Hỗ trợ truyền trông (Media Support): Android hỗ trợ các định dạng âmthanh, video phổ biến và các định dạng ảnh như: MPEG4, H.264, MP3, AAC,AMR, JPG, PNG, GIF…
- Hỗ trợ phần cứng (Hardware Support): Accelerometer Sensor, Camera,Digital Compass, Proximity Sensor, và GPS
- Cảm ứng đa chạm (Multil Touch)
- Đa tác vụ (Multil Task)
- Hỗ trợ Flash: Android 2.3 hỗ trợ Flash 10.1
- Tethering (Chia sẽ kết nối internet tới các thiết bị khác)
1.5 Nhược điểm của Android
- Hệ điều hành bị phân mảnh: HĐH này vốn phân chia làm 2 nhánh, 1 cho
SmartPhone và 1 cho Tablet Hiện tại có 8 phiên bản Android trên thị trường, việc
Trang 14phân mảnh này gây khó khăn cho việc cập nhật Android từ phiên bản bất kỳ lênphiên bản cao hơn.
- Có nhiều lỗ hổng bảo mật: Khi người sử dụng vô tình chấp nhận cài đặt 1
phần mềm độc hại nào đó, thiết bị chạy Android không có cách nào để tự bảo vệ.Mặc dù Google cũng đã đưa ra một vài biện pháp bảo vệ người dùng như gỡ bỏ tất
cả malware và tài khoản của các nhà phát triển liên quan trên Android Market nhưngđiều này vẫn chưa đủ đảm bảo Người dùng nên cài đặt các phần mềm bảo vệ đểtránh dính bẫy malware
1.6 Kiến trúc của HĐH Android
HĐH Android được xây dựng từ 5 thành phần nằm trong 4 tầng khác nhau:
Trang 15Hình 1.1 Kiến trúc HĐH Android
- Nhân Linux (Linux Kenel): Android được xây dựng dựa trên nhân Linux
phiên bản 2.6 Thành phần này chứa tất cả các dịch vụ lõi của hệ thống như: quản lý
bộ nhớ, quản lý tiến trình, giao tiếp phần cứng, bảo mật và điều khiển mọi hoạtđộng của thiết bị Tuy được phát triển dựa vào nhân linux nhưng thực ra nhân linux
đã được nâng cấp và sửa đổi rất nhiều để phù hợp với tính chất của những thiết bịcầm tay như hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhucần kết nối mạng không dây
- Thành phần thư viện (Libraries): bao gồm 1 tập các thư viện được viết bằng
C/C++ cung cấp những tính năng chính cho một hệ điều hành android Gồm một sốthư viện lõi như:
SQLite: Hỗ trợ trong việc lưu trữ dữ liệu
LibWebCore: Để xây dựng trình duyệt web, hỗ trợ nhiều công nghệmạnh mẽ như HTML5, JavaScript, CSS, DOM, AJAX…
Trang 16 Thư viện 3D: Sử dụng để tăng tốc độ phần cứng xử lý 3D hoặc tối ưuhoá phần mềm 3D.
Surface Manager: Quản lý việc hiển thị 2D và 3D
Media Libraries: Hỗ trợ phát hoặc thu lại các định dạng hình ảnh, âmthanh, video thông dụng
System C: Dựa trên thư viện C chuẩn sử dụng cho HĐH hoặc nhúngvào các thiết bị
SGL: Cung cấp các công cụ đồ hoạ 2D cơ bản
- Android runtime: Thành phần này tại cùng một tầng với các thư viện, bao
gồm 1 tập các thư viên lõi cung cấp các chức năng sẵn có như trong thư viện lõi củangôn ngữ lập trình java, cho phép các nhà phát triển viết các ứng dụng android bằngcách sử dụng ngôn ngữ lập trình java Android runtime cũng bao gồm máy ảoDalvik, cho phép mọi ứng dụng android chạy trong tiến trình của mình Dalvik làmột máy ảo chuyên dụng được thiết kế đặc biệt cho android và tối ưu hóa cho cácthiết bị điện thoại di động với giới hạn bộ nhớ và CPU Dalvik thực thi file có địnhdạng là dex
- Bộ khung ứng dụng (Application framework): Bằng cách cung cấp 1 nềntả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 phong phú và sáng tạo Thành phần này đưa ra các khả năng khác nhaucủa HĐH và người phát triển có thể tự do tận dụng ưu điểm của thiết bị phần cứng,truy cập thông tin, chạy các dịch vụ nền, thêm thông báo trên các thanh trạng thái vànhiều hơn nữa Cho phép nhà phát triển truy cập đến các API dùng bởi ứng dụng lõi.Kiến trúc các ứng dụng được thiết kế để đơn giản hoá khả năng sử dụng lại của cácthành phần
- Thành phần ứng dụng: Nằm ở tầng trên cùng của kiến trúc Android Tại
tầng này ta có thể tìm thấy các ứng dụng có sẵn trong thiết bị Android, cũng như cácứng dụng mà chúng ta download và cài đặt từ Android Market hay các chương trìnhđược viết tại tầng này Các ứng dụng viết Android có những đặc tính sau :
Trang 17 Viết bằng java và có phần mở rộng là apk.
Khi mỗi ứng dụng được chạy thì có 1 Virtual Machine riêng vì vậy mãnguồn của ứng dụng được chạy trong sự cô lập với mã nguồn của cácứng dụng khác
Theo mặc định, mỗi ứng dụng chạy trên một tiến trình Linux riêng củamình Android bắt đầu tiến trình khi bất kỳ thành phần nào của ứngdụng cần được thực thi sau đó tắt tiến trình nếu không cần thiết hoặckhi hệ thống cần khôi phục bộ nhớ cho các ứng dụng khác
Hệ điều hành Android là hệ thống đa người dùng, mỗi ứng dụng thuộc
về người dùng khác nhau Do đó, theo mặc định, mỗi ứng dụng đượcgắn ID của người sử dụng nhằm phân quyền khi sử dụng tài nguyên,cấu hình phần cứng và hệ thống
Android là hệ điều hành đa nhiệm, điều đó có nghĩa rằng, tại một thờiđiểm có thể có nhiều ứng dụng được chạy, tuy nhiên mỗi ứng dụng chỉ
có một thực thể (instance) duy nhất được chạy Điều đó có tác dụnghạn chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn Cácứng dụng được phân quyền và tự hệ thống sẽ hủy nếu mức ưu tiênthấp
Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành
di động khác, Android cho phép một ứng dụng của bên thứ ba đượcphép chạy nền Các ứng dụng đó chỉ có một hạn chế nhỏ đó là nókhông được phép sử dung quá 5~10% công suất CPU, điều đó nhằm
để tránh độc quyền trong việc sử dụng CPU
Trang 181.7 Cấu trúc của một project Android
1.7.1 File AndroidManifest.xml
- AndroidManifest.xml là file yêu cầu phải có trong tất cả các ứng dụng
Android, nó được đặt ở thư mục gốc của ứng dụng và được tự động sinh ra ngay saukhi ta tạo 1 project mới Nó mô tả các biến toàn cục dùng trong gói ứng dụng, baogồm các thành phần ứng dụng như : Services, activity…
- Mỗi khi tạo ra 1 Activiy mới ta đều phải khai báo nó trong file này Mộtđiều quan trọng được đề cập đến trong file AndroidManifest.xml là IntenFilter CácFilter này mô tả khi nào, và ở đâu các Activiy có thể được bắt đầu Khi 1 Activityhay hệ điều hành muốn thực hiện 1 hành động nào đó như mở 1 trang web, hay mànhình contact nó tạo một đối tượng Intent Đối tượng Intent này có thể chứa vài thôngtin mô tả người dùng muốn làm gì, cần những dữ liệu gì để thực hiện và một sốthông tin khác Android sẽ so sánh các thông tin trong 1 đối tượng Intent với cácIntent Filter được khai báo trong file AndroidManifest.xml bởi mỗi ứng dụng và tìm
ra Activity phù hợp nhất để xử lý dữ liệu hoặc thực hiện 1 hành động cụ thể Nếu cónhiều Activity phù hợp với Intent đó thì người dùng sẽ được hỏi thành phần nào sẽđược thực hiện
- Cấu trúc của file AndroidManifest.xml được biểu diễn dưới dạng các tags.Một số tags cơ bản gồm:
<manifest> : Là nút gốc của mỗi file AndroidManifest.xml, nó chứađựng các thuộc tính của gói ứng dụng
<uses-permission> : Bao gồm các thuộc tính chỉ định quyền truyxuất và sử dụng tài nguyên của ứng dụng Khi cần sử dụng mộtloại tài nguyên nào đó thì trong file AndroidManifest xml của ứngdụng cần phải khai báo các quyền truy xuất
<application> : Là phần tử gốc, chứa các khai báo, các thành phầnđược định nghĩa, sử dụng trong ứng dụng Android Nó cũng bao gồmcác thuộc tính chung hay mặc định cho ứng dụng như icon, theme,
Trang 19 <activity> : Mỗi Activity phải có 1 <activity> tag với tên tương ứngtrong file Androidmanifest.xml nếu không chúng ta sẽ không thể chạy
nó Mỗi Activiy có thể chứa 1 hoặc nhiều Intent-Filter mô tả các hànhđộng mà Activity này hỗ trợ
<intent-filter>: Mô tả các loại Intent mà một thành phần ứng dụng cóthể hỗ trợ Bên trong tag này có thể chứa nhiều tag khác như:
<action> , <category>, <data>, <meta-data>
<service>: Một Services là một thành phần của ứng dụng và có thểchạy ở chế độ nền trong một khoảng thời gian tùy ý Cũng nhưActivity chúng ta cũng có thể khai báo <intent-filter>, <meta-data>cho mỗi Service
<provider>: Một ContentProvider là một thành phần của ứng dụngquản lý các dữ liệu liên tục và cho phép các thành phần khác truy cậpđến nó Chúng ta có thể khai báo 1 hoặc nhiều <meta-data> cho mộtContentProvider
1.7.2 File R.java
- R.java là file tự sinh khi ta tạo một project, nó tự động tạo chỉ số và quản lý
các thuộc tính được khai báo trong file xml và các tài nguyên của ứng dụng (nhưhình ảnh, âm thanh…), tự động được cập nhật khi có thay đổi trong ứng dụng.Chúng ta sử dụng lớp này trong mã lệnh như một cách nhanh nhất để tham chiếuđến các tài nguyên đã khai báo trong ứng dụng
1.7.3 Các tài nguyên dùng trong một ứng dụng Android
- Các file tài nguyên của một ứng dụng có liên quan rất chặt chẽ tới fileR.xml, các thay đổi trong các file tài nguyên sẽ được tự động thay đổi trong R.xml
- Các file tài nguyên của ứng dụng Android là các file ngoài (không chứa mãlệnh) được sử dụng trong mã lệnh và biên dịch vào thời gian chạy của ứng dụng.Android hỗ trợ nhiều loại file tài nguyên như: xml, jpg, png, mp3… Các file xml córất nhiều cấu trúc khác nhau tùy thuộc vào mục đích sử dụng cũng như cách thức
Trang 20môt tả nó Các tài nguyên dùng trong ứng dụng Android được tách rời với mã lênh,các file xml được biên dịch sang dạng nhị phân, một định dạng giúp cho việc load
dữ liệu nhanh và hiệu quả hơn, các dữ liệu String sẽ được nén vào các hình thức lưutrữ hiệu quả hơn
- Các file tài nguyên được lưu trong thư mục /res của ứng dụng android, baogồm một số loại sau :
Các file giao diện, chứa trong thư mục /res/layout: Các file này mô tảcách thức bố trí của giao diện trong một Activity hay trong một thànhphần của giao diện người dùng
Image file, đặt trong thư mục res/drawable: Android hỗ trợ các loạiảnh như jpg, png, gif
Style, strings và arrays, chứa trong thư mục res/values
- Muốn sử dụng các tài nguyên đã định nghĩa trong các file xml của gói ứngdụng ta chỉ cần gọi đến id của nó
Để gọi các tài nguyên của gói ứng dụng hiện tại, ta sử dụng cấu trúc:
- Activity là 1 thành phần của ứng dụng cung cấp 1 màn hình mà người dùng
có thể tương tác theo thứ tự để thực hiện việc gì đó như: thực hiện cuộc gọi, chụpảnh, gửi Email, xem bản đồ… Một của sổ ứng dụng thường lấp đầy màn hình nhưngcũng có thể nhỏ hơn hoặc nổi trên cùng của màn hình Một Activity có thể sử dụngcửa sổ bổ xung, ví dụ như một pop-up dialog gọi cho một đáp ứng người dùng ởgiữa của Activity, hay một cửa sổ biểu diễn những cho người dùng với thông tinquan trọng khi họ chọn một item cụ thể trên màn hình
Trang 21- Một ứng dụng thường bao gồm 1 tập hợp các Activity được ràng buộc vớinhau Thông thường trong ứng dụng có 1 Activity được gọi là Activity chính,Activity này sẽ được hiện ra khi người sử dùng bắt đầu sử dụng ứng dụng MộtActivity có thể bắt đầu các Activity khác theo thứ tự thực hiện các hành động khácnhau Mỗi lần 1 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 1 ngăn xếp (gọi là backstack) Khi người dùngthao tác xong với Activity hiện tại và nhấn nút BACK thì Activity này bị huỷ 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âncấp các đối tượng View dẫn xuất từ lớp View Mỗi View chiếm một khoảng khônggian hình chữ nhật bên trong cửa sổ của Activity và có thể đáp ứng được các tươngtác người dùng Một cấu trúc phân cấp các view được gắn vào Activity thông quaphương thức: Activity.setContentView()
- Android cung cấp sẵn một số view cho phép người dùng sử dụng để thiết kế
và tổ chức các layout Widget là view cung cấp các thành phần trực quan và tươngtác cho màn hình như: button, textfield, checkbox hoặc chỉ là 1 hình ảnh…
- Layout là views được dẫn suất từ ViewGroup cung cấp một mô hình bố trínhất định cho các view con của nó như: linerLayout, GridLayout, RelativeLayout.Cách phổ biến để tạo ra layout cho ứng dụng là sử dụng file XML được lưu trongthư mục của ứng dụng Bằng cách này chúng ta có thể duy trì các thiết kế của giaodiện người dùng tách biệt với mã nguồn khai báo các hành vi của Activity
- Mỗi Activity phải được khai báo trong file AndroidManifest.xml MỗiActivity có thể truyền hay nhận dữ liệu từ Activity khác
- Một tác vụ trong một ứng dụng Android là một ngăn xếp các Activiy Khimột Activity mới được start, nó được đặt ở đỉnh của stack và trở thành activity đangchạy Activity trước sẽ ở bên dưới Activity mới và sẽ không thấy trong suốt quá trìnhactivity mới tồn tại Nế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 22Hình 1.2 Android Back Stack
* Vòng đời của 1 Activity:
onCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên Luôntheo sau bởi onStart() Đây là lúc lập trình viên cần thiết lập tất cả cáccài đặt tĩnh cơ bản, như khởi tạo các view, ràng buộc dữ liệu vào danhsách
onStart(): Được gọi ngay khi ứng dụng được nhìn thấy với ngườidùng Theo sau bởi onResume() nếu ứng dụng bắt đầu hoạt đông.Hoặc onStop() nếu ứng dụng bị ẩn đi
onResume(): Được gọi ngay khi Activity tương tác với người dùng,lúc này Activity ở trên đỉnh của ngăn xếp luôn theo sau bởionPause()
onPause(): Được gọi khi hệ thống bắt đầu khôi phục lại các activitykhác Phương thức này được dùng để thực hiện các thay đổi chưađược lưu, tạm dừng các hành vi có thể tiêu thụ CPU, theo sau bởi
Trang 23OnResume khi Activity được khôi phục hoặc onStop() nếu nó trở nên
vô hình với người dùng
onStop(): Được gọi khi ứng dụng không còn được nhìn thấy Hànhđộng này sảy ra khi nó bị huỷ hoặc Activity khác đã được khôi phục.Theo sau bởi onRestart() nếu Activity trở lại và tương tác với ngườidùng, hoặc theo sau là onDestroy() nếu ứng dụng kết thúc
onDestroy(): Được gọi khi Activity bị huỷ Nó có thể được gọi khiActivity kết thúc hoặc hệ thống tạm thời phá huỷ nó để bảo tồn bộnhớ
onRestart(): Được gọi ngay khi Activity được bắt đầu trở lại Luôntheo sau bởi onStart()
Hình 1.3 Vòng đời của Activity
Trang 24- Một Activity có thể gọi đến 1 Activity khác thông qua 1 Intent Việc gọiđến 1 Activity khác có thể có dữ liệu trả về từ Activity được gọi hoặc có thể khôngtrả về dữ liệu nào.
Để gọi 1 Activity khác nhưng không cần trả về dữ liệu nào, ta dùngphương thức startActivity()
Để gọi 1 Activity khác những cũng cần có DL trả về ta dùng phươngthức startActivityForResult() Khi đó, Activity được gọi sẽ trả lại DLcho Activity gọi nó sau khi hoàn thành qua phương thức finish().Activity ban đầu lấy dữ liệu được gửi tới bởi phương thức
onActivityResult()
* Các loại Activity
- ListActivity là 1 Activity hiển thị danh sách các items bằng cách liên kết với
1 nguồn dữ liệu như một mảng, một con trỏ và nắm bắt các sự kiện khi người dùngchọn 1 item trong danh sách Một ListActivity có một layout mặc định bao gồm 1danh sách đơn ở giữa của màn hình Tuy nhiên, nếu muốn chúng ta cũng có thể tùychọn giao diện bằng cách thiết lập layout của chúng ta với setContentView() trongphương thức onCreate()
- PreferenceActivity: Khi chúng ta xây dựng 1 ứng dụng Android, thông
thường chúng ta muốn có một số tùy chọn cho ứng dụng như: Cách thức hiện thị,giao diện tùy chọn, cài đặt ứng dụng hay chia sẻ thông tin với các thành phầnkhác… Các tùy chọn này sẽ được lưu trữ trong bộ nhớ trong của thiết bị gọi là cácShared Preferences Android cung cấp 1 số cơ chế để thực hiện việc này, một trong
số đó là lớp preferenceActivity Để làm được điểu này trước hết ta cần khai báo 1file xml chứa các Preferences file này được đặt trong thư mục res/xml Tiếp theo tacần tạo 1 Activity kế thừa từ lớp PreferenceActivity Trong phương thức onCreate()
ta gọi phương thức addPreferencesFromResource(int xmlResource) để gắn cácPreferences vào Activity Sau đó trong ứng dụng ta có thể truy cập đến các Shared
Trang 25Preference thông qua tên của chúng như đã khai báo trong file xml bằng thuộc tính
“android:key”
1.8.2 Services
- Thành phần dịch vụ không cung cấp giao diện người dùng mà chỉ chạy ởchế độ nền, trong khoảng thời gian không xác định Các thành phần khác của ứngdụng có thể bắt đầu các dịch vụ và nó sẽ tiếp tục chạy dưới chế độ nền ngay cả khingười dùng chuyển sang 1 chế độ khác Một thành phần có thể tương tác với cácdịch vụ và thậm chí là thực hiện các tiến trình giao tiếp
Bound: Một service là Bound khi 1 thành phần liên kết đến nó bằng cách gọi bindService() Một Bound service cung cấp giao diện Client –
Server cho phép các thành phần tương tác với các dịch vụ, gửi yêucầu, nhận kết quả, hoặc làm tương tự như vậy với các tiến trình truyềnthông
1.8.3 Broadcast Receiver
- Một Broadcast Receiver là một thành phần nhận và đáp lại các thông báobroadcast trên toàn bộ hệ thống Nhiều broadcast được bắt nguồn từ hệ thống như:thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay người dùng đã thay đổingôn ngữ… Các ứng dụng có thể tạo ra các broadcast, chẳng hạn để ứng dụng khácbiết được một số dữ liệu đã được tải về thiết bị và sẵn sàng cho việc sử dụng chúng
- Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ thôngbáo nào mà nó cho là quan trọng Tất cả các Broadcast 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
Trang 26Tuy nhiên chúng có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, haychú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 âmthanh…
- Bởi vì hệ thống chạy mỗi ứng dụng trong một tiến trình riêng biệt với cácquyền truy cập file hạn chế truy cập các ứng dụng khác, ứng dụng của bạn có thểkhông trực tiếp kích hoạt một thành phần từ một ứng dụng khác Vì vậy, để kíchhoạt một thành phần trong ứ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 1 thành phần cụ thể Hệ thống sau đó kíchhoạt các thành phần này
- Để tạo ra một thành phần Broadcast Receiver ta có thể dùng 2 cách: khaibáo trong file AndroidManiFest.xml hoặc trong kế thừa lớp BroadcastReceiver trong
mã lệnh của chương trình
1.8.4 Content provider
- Content provider lưu trữ và lấy dữ liệu và làm cho nó có thể được truy cập
từ tất cả các ứng dụng Đây là cách duy nhất để chia sẻ dữ liệu giữa các ứng dụng,không có không gian lưu trữ chung mà các gói Android có thể truy cập 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ộtcách khác nào đó Content provider mở rộng lớp cơ sở ContentProvider để cài đặtmột tập các phương thức cho phép các ứng dụng khác lấy, thao tác và lưu trữ dữliệu mà không cần sử dụng nhiều lệnh SQL Tuy nhiên, các ứng dụng không gọi trựctiếp các phương thức này, chúng sử dụng một đối tượng ContentResolver được tạo
ra bằng cách gọi getContentResolver() bên trong hoạt động của Activity hay của cácthành phần ứng dụng, hoặc chúng ta cũng có thể tạo ra các Content Provider riêng
ContentResolver cr = getContentResolver();
- 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 được dữ liệu nào chỉ cần cung cấp đường dẫn cho nó Đườngdẫn này gọi là URI Một đối tượng URI xác định duy nhất một tập dữ liệu Content
Trang 27provider 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ỗitập dữ liệu đó Cấu trúc của một URI như sau:
<standard_prefix>://<authority>/<data_path>/<id>
Trong đó:
standard_prefix : Tiền tố chuẩn cho Content Provider, luôn là content://
authority: Tên của Content Provider, ví dụ : “contacts” trong ứng dụng
Contact của điện thoại Nếu là Content Provider của một hãng thứ ba thì nó
có thể là tên đầy đủ như: “com.wrox.provider” hay
- Một Intent là 1 mô tả trừu tượng của hành động sẽ được thực hiện Nó cóthể dùng với hàm startActivity() để khởi động 1 Activity, dùng broadcastIntent() đểgửi Intent đến bất kỳ thành phần BroadcastReceiver nào hoặc dùng với startServiceshoặc bindServices để giao tiếp với 1 dịch vụ chạy nền của hệ thống
- Có intent tường minh và trừu tượng:
Intent tường minh (Explicit): thường được sử dụng trong các ứng dụng(như 1 lớp trong ứng dụng đó)
Trang 28 Intent trừu tượng (Implicit): Không chỉ rõ tên lớp được gọi mà chỉ raaction được thực thi và cung cấp URL được dùng bởi action này KhiIntent trừu tượng được gửi tới hệ thống, Android sẽ tìm tất cả cáccomponent (Các activity) đã đăng ký action này (trong inten-filter) vớikiểu dữ liệu tương ứng Nếu chỉ tìm được một Component thì nó thựchiện luôn, ngược lại sẽ hiện ra màn hình cho người dùng chọn.Component nào sẽ được thực thi
- Các thành phần quan trọng của 1 Intent là:
Action: Hành động chung sẽ được thực hiện, như: ACTION_VIEW,ACTION_EDIT, ACTION_MAIN
Data: Dữ liệu được xử lý, như bản ghi thông tin liên lạc về 1 người trong cơ
sở dữ liệu Các data được xác định như một đôi tượng URI Một số cặp action/data như:
ACTION_VIEW content://contacts/people/1: Hiển thị thông tin về
người có định danh là 1
ACTION_DIAL content://contacts/people/1: Hiển thị màn hình quay số
gọi người có định danh là 1
ACTION_DIAL tel:123: Hiển thị màn hình quay số với số được điền
vào
ACTION_EDIT content://contacts/people/1: Chỉnh sửa thông tin về
người có định danh là 1
ACTION_VIEW content://contacts/people/: Hiển thị 1 danh sách người
trong danh bạ Sau đó có thể chọn 1 người cụ thể để xem thông tintrong một Intent mới
- Ngoài ra Intent còn có Các thuộc tính phụ như:
Category: Cung cấp thêm thông tin về hành động sẽ được thực hiện,thông tin về nhóm của Action
Trang 29 Chỉ định kiểu dữ liệu của Intent (chuẩn là MIME), thường được tựđộng xác định.
Component: Chỉ định tên của 1 lớp thành phần cụ thể dùng Activity.Thông thường nó được bằng cách xem thông tin trong Intent và kếthợp với các thành phần có thể xử lý nó
Extras: Sử dụng để mở rộng thông tin cho một thành phần nào đó Ví
dụ khi chúng ta có một hành động gửi một tin nhắn, chúng ta có thể sửdùng dữ liệu bổ xung để gửi kèm một tiêu đề
- Intent filter: Để thông báo cho hệ thống những Intent mà nó có thể xử lý.Các Activities, Services và Broadcast Receiver có thể có một hoặc nhiều Intentfilter Mỗi filter mô tả khả năng của các thành phần, tập các Intent mà các thành phần sẵn sàng nhận.
1.8.6 Notification
- Cung cấp thông báo cho các tình huống phát sinh cho người sử dụng Một
số sự kiện yêu cầu người sử dụng đáp ứng, một số khác thì không Ví dụ: Thông báolưu tập tin hoàn tất, thông báo cho người sử dụng biết ứng dụng đang chạy trong chế
độ nền, chờ đợi 1 thao tác được hoàn tất
- Có nhiều kỹ thuật khác nhau để hiển thị thông báo cho người dùng:
Toast Notification: Là một thông điệp dạng pop-up trên bề mặt của
cửa sổ Nó chỉ lấp đầy khoảng không gian vừa đủ cho thông điệp, chophép người dùng có thể nhìn thấy được ứng dụng đang chạy, nó tựđộng hiện và ẩn và không chấp nhận tương tác
Status Bar Notification: Liên tục hiển thị thông điệp và yêu cầu người
dùng thao tác Khi người dùng chọn thông điệp Android sẽ đưa ra 1Intent được xác định bởi notification (thường được dùng để bắt đầu 1Activity)
Dialog Notification: Hiển thị thông báo liên quan đến Activity Nó
dùng 1 cửa sổ nhỏ xuất hiện phía trước và che Activity hiện tại và
Trang 30chấp nhận tất cả các tương tác của người dùng Nên dùng Dialog khicần hiển thị thanh tiến trình hoặc một thông điệp ngắn yêu cầu ngườidùng xác nhận hành động Cũng có thể sử dụng Dialog như 1 thànhphần tách rời của giao diện ứng dụng cho mục đích khác bên cạnh hiệnthông điệp.
1.9 Giao diện người dùng trong Android
- Giao diện người dùng trong Android có thể được xây dựng bằng 2 cách:bằng cách định nghĩa trong file XML, hoặc bằng cách viết mã lệnh java Việc địnhnghĩa cấu trúc giao diện người dùng bằng file XML là lợi thế hơn vì nó hướng theonguyên tắc của mô hình MCV rằng giao diện người dùng luôn tách ra khỏi các khốilogic của chương trình, ta có thể dễ dàng thay đổi giao diện của chương trình màkhông cần sửa mã lệnh, đồng thời việc điều chỉnh để phù hợp với độ phân giải củacác màn hình khác nhau dễ dàng hơn
- Một Activity hiển thị giao diện người dùng của ứng dụng Nó chứa đựngcác Widget như button, labels, textbox Thông thường chúng ta thường định nghĩagiao diện người dùng trong file XML (đặt trong thư mục res/layout của gói ứngdụng) Bên cạnh đó chúng ta cũng có thể tạo ra các phần tử giao diện sử dụng mãlệnh trực tiếp trong chương trình.
1.9.1 Views và ViewGroup
- Activity chứa Views và ViewGroup, View là đối tượng cơ bản của giaodiện người dùng trong nền tảng Android, View có lớp con gọi là “Widget” cung cấpcác đối tượng giao diện người dùng như TextField và Button… view được dẫn suất
từ lớp cơ sở là Android.view.View ViewGroup là 1 view đặc biệt do một hoặcnhiều view được nhóm lại với nhau ViewGroup có các lớp con là Layout cung cấpnhiều kiểu kiến trúc layout trong đó ta có thể sắp đặt sự xuất hiện và trình tự của cácview, một ViewGroup được dẫn xuất từ lớp cơ sở Android.view.ViewGroup
Trang 31- Mỗi view và viewGroup có các thuộc tính cơ bản và một số các thuộc tínhnày chỉ được dùng cho các viewGroup đặc biệt.
- Khi định kích thước cho các phần tử của giao diện ta có thể sử dụng các đơn
vị đo như:
dp (Density-independent pixel hay dip): Đây là đơn vị thường đượcdùng trong việc định kích thước cho 1 view trong layout 160dp tươngứng với 1 inch trên màn hình vật lý
sp (Scale-independent pixel): Thường dùng cho việc định kích thướccủa font chữ
pt (point): 1 pt = 1/72 inch của màn hình
px (pixel): Tương ứng với các pixel thực tế trên mành hình Đơn vịnày không được khuyến khích sử dụng vì nó có thể hiển thị khôngchính xác trên các thiết bị với những kích thước màn hình khác nhau
- Android hỗ trợ 6 loại ViewGroup:
LinearLayout: LinearLayout sắp xếp các views theo 1 hàng hoặc 1 cột
đơn Các views con có thể được sắp xếp theo chiều dọc hoặc hiềungang
AbsoluteLayout: Định vị tuyệt đối, cho phép chúng ta xác định chính
xác vị trí của các view AbsoluteLayout bị phản đối sử dụng từ phiênbản Android 1.5 do gặp vấn đề khi hiển thị trên các màn hình có độphân giải cao
TableLayout: Nhóm các view vào trong các hàng và cột Dùng phần
tử <TableRow> để chỉ định số hàng cho trong bảng Mỗi hàng có thểchứa 1 hoặc nhiều view, mỗi view được đặt trong 1 ô Chiều rộng củamỗi cột là chiều rộng nhất của các ô trong cột đó
RelativeLayout: Cho phép xác định mỗi view được định vị tương đối
như thế nào với các phần tử khác
Trang 32 FrameLayout: Là một khung chứa trên màn hình, dùng để hiển thị một
view đơn lẻ View đặt trong FrameLayout luôn được cố định tại vị tríphía trên bên trái của layout Nếu đặt nhiều view vào FrameLayoutchúng sẽ nằm đè lên nhau và kích thước của FramLayout là kích thướccủa View lớn nhất FrameLayout hữu ích trong trường hợp chúng tamuốn tạo ra 1 ảnh động với 1 ảnh duy nhất được hiển thị tại 1 thờiđiểm
ScrollView: Là 1 dạng đặc biệt của FrameLayout cho phép chúng ta
cuộn 1 danh sách các View chiếm 1 không gian hiển thị lớn Nó có thểchứa duy nhất 1 view hoặc ViewGroup mà thông thường là mộtLinearLayout
1.9.2 Button
- Button là một widget được sử dụng trong hầu hết các ứng dụng Android Cóthể tạo ra một Button bằng cách khai báo nó trong file XML:
<Button android:layout_width="wrap_content"
Trang 331.9.3 ListView và GridView
- Một ListView hiển thị dữ liệu một danh sách cuộn theo chiều dọc MộtGridView hiển thị danh sách theo dạng lưới có thể cuộn theo chiều dọc hoặc ngangvới số cột do chúng ta chỉ định, có thể dùng GridView với ImageView để hiện thịmột dãy các ảnh
- Để hiện thị được ListView và GridView phải cần có 2 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 trongData Source vào đúng vị trí hiển thị trong ListView hoặc GridView
1.9.4 TextView, EditText
- TextView cho phép hiển thị văn bản, ngoài văn bản thuần nó còn có thểhiện thị văn bản dạng HTML ngay trong file XML hoặc trong mã lệnh của chươngtrình
Trang 34 Android:inpuType xác định phương thức nhập cho EditText như Email
hay password hoặc một trường số…
Android:singleLine = “true” thì EditText sẽ là một TextField ngược lại nếu Android:singleLine = “false” thì nó là một TextBox.
1.9.5 Menu
- Menu là 1 thành phần quan trọng trong giao diên người dùng Nó cung cấp
1 giao diện đáng tin cậy cho thấy chức năng của ứng dụng và các cài đặt của nó.Menu cũng được cấu trúc bằng cách sử dụng kiến trúc View Menu cũng xử lý các
sự kiện của riêng nó, do đó chúng ta không cần phải đăng ký bộ lắng nghe sự kiệncho các mục của Menu Khi 1 mục trên Menu được chọn thì phương thứconOptionsItemSelected() hoặc onContextItemSelected() sẽ được gọi
- Trong Android có 2 loại menu là Context menu và Option menu.
Option menu dùng để hiển thị thông tin liên quan đến Activity hiện tại.
Trong Android chúng ta có thể hiện thị option menu bằng cách nhấn
phím MENU Các menu items được hiển thị khác nhau tuỳ theo
Activity hiện tại đang hoạt động Option menu cho phép tạo ra cácshortcut keys và icons cho các items
Context menu dùng để hiện thị thông tin liên quan đến một view cụ
thể trong một Activity Các menu items được hiện thị khác nhau tuỳthuộc vào thành phần hoặc view đang được chọn Để kích hoạt một
Context menu, người sử dụng chọn một item trên màn hình và có thể
nhấp và giữ nó hoặc cách đơn giản hơn là nhấn phím giữa trên bànphím Context menu không hỗ trợ các Shortcut keys và các icon chocác items
- Chúng ta có thể tạo ra một menu trong ứng dụng Android bằng 2 cách: Sửdụng mã lệnh trực tiếp hoặc khai báo trong file xml Với cả 2 cách này, ta đều phảighi đè phương thức onCreateOptionsMenu(Menu m) của Activity
Trang 351.9.6 Bắt sự kiện giao diện người dùng
- Sau khi thêm các View/Widget vào giao diện người dùng chúng ta có thểmuốn biết về tương tác giữa người sử dụng với chúng, để được thông báo về sự kiệngiao diện người dùng, chúng ta phải làm 1 trong 2 việc:
Thiết lập một bộ lắng nghe sự kiện và gắn nó vào các View Lớp Viewchứa tập hợp các giao diện lồng nhau được đặt tên dạngOn<something>Listener, với một callback method được đặt tên dạng
on<something> Ví dụ: View.onClickListener() chứa sự kiện khi click vào View, View.onKeyListener() chứa sự kiện 1 phím của thiết bị được nhấn
trong 1 View, View.OnTouchListener () chứa dự kiện với màn hình cảmứng trong 1 View
Ghi đè các callback method cho mỗi view để xác định các thao tác, hành
vi cần thực hiện với từng sự kiện của giao diện người dùng Ví dụ:
Button btn = new Button();
btn.setOnClickListener( new View.onClickListener () {
public void onClick(View v) { Toast.makeText(getBaseContext(),"Clicked", Toast.LENGTH_SHORT).show();
} });
1.10 Multimedia trong Android
- Android multimedia framework chụp và chạy Android cung cấp một thưviện MediaStore cho phép mã hoá và xử lý các định dạng file Media phổ biến,chúng ta có thể dễ dàng tích hợp audio, video hay ảnh vào ứng dụng Chúng ta cóthể chạy các file audio, video từ các file media được lưu trữ trong tài nguyên củaứng dụng hay từ hệ thống file độc lập hoặc nguồn dữ liệu được truyền đến thông quacác kết nối mạng, tất cả dùng các API của lớp MediaPlayer
1.11 Network và CSDL SQLite trong Android
Trang 36- Android hỗ trợ truyền tin dùng Socket và phương thức http để kết nối tớiwebServer Do nó được thừa hưởng toàn bộ thư viện java.net của java nên việctruyền tìn dùng Socket tương tự như trong java.
- Mỗi ứng dụng đều sử dụng dữ liệu, nó có thể là dữ liệu đơn giản hoặc kiểu
dữ liệu có cấu trúc Trong Android thì hệ cơ sở dữ liệu được sử dụng là SQLite
Database, đây là hệ thống mã nguồn mở được sử dụng rộng rãi trong các ứng dụng( Mozilla Firefox sử dụng SQLite để lưu trữ các dữ liệu về cấu hình, iPhone cũng sửdụng cơ sở dữ liệu là SQLite) Trong Android, cơ sở dữ liệu mà bạn tạo cho 1 ứngdụng thì chỉ ứng dụng đó có quyền truy cập và sử dụng, các ứng dụng khác thìkhông Các thao tác truy xuất dữ liệu trong SQLite cũng sử dụng các hàm SQLthông thường như trong MSSQL hoặc MySQL Ngoài ra chúng ta có thể sử dụngcác hàm có sẵn của thư viện Android cung cấp
- Android cung cấp đủ các hỗ trợ cho database Sqlite Khi tạo 1 database thì
nó có thể được sử dụng bởi tất cả các class trong application
- Cách tốt nhất để tạo 1 Sqlite database là tạo 1 lớp helper kế thừa từSQLiteOpenHelper và ghi đè phương thức onCreate(), onUpgrade Theo cách nàychúng ta có thể thực thi 1 lệnh Sqlite và tạo table mong muốn
- Sau khi tạo 1 lớp chúng ta có thể tạo 1 thể hiện SQLiteOpenHelper bằnghàm khởi tạo mà ta định nghĩa Sau đó đọc, ghi database bằnggetWritableDatabase() và getReadableDatabase() tương ứng chúng đều trả về 1 đốitượng SQLiteDatabase đại diện cho CSDL và cung cấp các thao tác với Sqlite
- Có thể thực thi 1 query bằng phương thức query() của đối tượngSQLiteDatabse Nó chứa 1 số tham cơ bản như bảng, cột, nhóm, lựa chọn… để truyvấn nếu muốn có 1 query phức tạp ta có thể dùng lớp SQLiteQueryBuilder, lớp nàycung cấp các phương thức thuận tiện hơn cho việc xây dựng 1 query
- Tất cả các truy vấn với database đều trả về 1 đối tượng Cursor để chỉ ra tất
cả các hàng dữ liệu được trả về bởi query Cursor là 1 cơ chế cho phép truy điềuhướng kết quả từ 1 database và đọc các hàng, các cột
Trang 371.12 Các công cụ cần có để xây dựng 1 ứng dụng Android
- Java JDK: Android SDK sử dụng Java SE development Kit (JDK)
- Eclipse: Một môi trường phát triển phần mềm đa ngôn ngữ và có thể mởrộng các plugin Nó có thể dùng để viết nhiều loại ứng dụng dùng các ngôn ngữ nhưjava, Ada, C, C++, COBOL, Python…
- Android SDK: Android SDK chứa các trình gỡ rỗi (debugger), Các thưviện, thiết bị giả lập, tài liệu, mã nguồn mẫu và các hướng dẫn
- Android development tools (ADT): Là 1 plugin cho Eclipse, hỗ trợ cho việc
gỡ rối các ứng dụng Android
- Anroid virtual devices (AVDs): Là 1 ví dụ giả lập cho phép bạn mô hìnhhoá 1 thiết bị thực tế Mỗi AVD bao gồm 1 hồ sơ phần cứng (hardware profile), 1ánh xạ tới ảnh của hệ thống (a mapping to a system image), mô phỏng lưu trữ (như
SD card)
1.13 Cài đặt Android
1.13.1 Cài đặt Java JDK
- Cài đặt Java SE Devolopment Kit (JDK) Có thể tải bản cài đặt bằng cách
vào địa chỉ www.oracle.com/technetwork/java/javase/downloads/index.html, sau đó
chọn phiên bản cho hệ điều hành mà chúng ta đang sử dụng
1.13.2 Cài đặt Eclipse
- Eclipse là môi trường phát triển phần mềm tính hợp có nhiều plugin mởrộng và hỗ trợ nhiều ngôn ngữ lập trình khác nhau Để xây dựng ứng dụng Androidchúng ta download bản Eclipse IDE cho java EE tại địa chỉ:
www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1
1.13.3 Cài đặt Android SDK
- Một thành phần quan trọng không thể thiếu là Android SDK Nó chứa cáctrình gỡ rỗi (debugger), Các thư viện, thiết bị giả lập, tài liệu, mã nguồn mẫu và cáchướng dẫn
Trang 38- Bước 1: Vào địa chỉ http://developer.android.com/sdk/index.html để tải về
Android SDK, tuỳ thuộc vào HĐH đang sử dụng mà chúng ta chọn cho Mac,Window hay Linux
- Bước 2: Giải nén file vừa tải vào 1 thư mục nào đó, sau đó đó chạy fileSDK Manager.exe
- Bước 3: Tại cửa sổ sổ “Android SDK and AVD manager” ta chọn
“Available packages” sau đó đánh dấu vào các Packages muốn tải Một số Packages
có sẵn như:
Documents chính là phần Javadoc mô tả hoạt động của các phươngthức và các lớp
Sample là các đoạn code mẫu
SDK Platform ứng với các phiên bản hệ điều hành, mỗi phiên bản cómột API level riêng (2.2 - API level 8, 2.1 - API level 7, )
Google API để phát triển các phần mềm liên quan đến dịch vụ củaGoogle (như Google Map nếu bạn muốn lập trình liên quan đến GPS)
- Bước 4: Chọn Install Selected -> Install và quá trình cài đặt bắt đầu.