ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
Tel. (84-511) 3736 949, Fax. (84-511) 842 771
Website: itf.ud.edu.vn, E-mail:
LUẬN VĂN TỐT NGHIỆP KỸ SƯ
NGÀNH CÔNG NGHỆ THÔNG TIN
MÃ NGÀNH : 05115
ĐỀ TÀI :
XÂY DỰNG ỨNG DỤNG “ẨM THỰC ĐÀ THÀNH” TRÊN
NỀN TẢNG ANDROID
Mã số : 11TLT - 089
Ngày bảo vệ : 15-16/06/2013
SINH VIÊN : HỨA BÁCH TRUNG
LỚP : 11TLT
CBHD : TH.S LÊ THỊ MỸ HẠNH
ĐÀ NẴNG, 06/2013
LỜI CẢM ƠN
Em xin chân thành cảm ơn các Thầy Cô trong khoa Công Nghệ Thông
Tin, trường Đại Học Bách Khoa – Đại Học Đà Nẵng đã truyền đạt những
kiến thức quý báu cho em trong những năm em theo học tại trường và nhất
là tạo điều kiện thuận lợi cho em học tập và thực hiện đề tài tốt nghiệp này.
Đặt biệt, em xin chân thành cảm ơn cô Lê Thị Mỹ Hạnh, thuộc bộ môn
Công Nghệ Phần Mềm, ngành Công Nghệ Thông Tin, trường Đại Học Bách
Khoa. Người đã trực tiếp, tận tình hướng dẫn, động viên và giúp đở em
trong suốt thời gian thực hiện đề tài.
Để có được kết quả như ngày hôm nay, em rất biết ơn Ông Bà, Cha Mẹ
và những người thân trong gia đình đã động viên, khích lệ và tạo mọi điều
kiện thuận lợi nhất về vật chất lẫn tinh thần trong suốt quá trình học tập
cùng như quá trình thực hiện đề tài tốt nghiệp này.
Mặc dù đã cố gắng hoàn thành đồ án trong phạm vi và khả năng cho
phép nhưng chắc chắn khó tránh khỏi những thiếu sót. Do đó, em rất mong
nhận được sự thông cảm và góp ý bảo tận tình của Quý Thầy Cô vá các
bạn.
Một lần nữa, em xin chân thành cảm ơn!
Đà Nẵng, ngày ……. tháng 06 năm 2013
Sinh viên thực hiện
Hứa Bách Trung
NHẬN XÉT CỦA CÁN BỘ HƯỚNG DẪN
Đà Nẵng, ngày ……. tháng 06 năm 2013
Cán bộ hướng dẫn
Th.S Lê Thị Mỹ Hạnh
LỜI CAM ĐOAN
Em xin cam đoan :
1 Những nội dung trong luận văn này là do em thực hiện dưới sự
hướng dẫn trực tiếp của Cô Th.S Lê Thị Mỹ Hạnh
2 Mọi tham khảo dùng trong luận văn này đều được trích dẫn rõ ràng
tên tác giả, tên công trình, thời gian, địa điểm công bố.
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá,
em xin chịu hoàn toàn trách nhiệm.
Sinh viên,
MỤC LỤC
MỞ ĐẦU 1
I. Bối cảnh của đề tài 1
II. Mục đích và ý nghĩa của đề tài 1
II.1. Mục đích của đề tài 1
II.2. Ý nghĩa của đề tài 1
III. Nhiệm vụ của đề tài 2
IV. Nội dung nghiên cứu 2
CƠ SỞ LÝ THUYẾT 3
I. Hệ điều hành Android 3
I.1. Lịch sử của Android 3
I.2. Kiến trúc của Android 4
I.2.1. Tầng ứng dụng 4
I.2.2. Application framework 4
I.2.3. Library 5
I.2.4. Android Runtime 6
I.2.5. Linux Kernel 6
I.3. Android Emulator 6
I.4. Các thành phần của một ứng dụng Android 7
I.5. Cấu trúc một Project 10
II. Công cụ để tạo một ứng dụng Android 10
II.1. Eclipse IDE 10
II.2. Android SDK 11
III. Các thành phần giao diện trong Android 11
III.1. View 11
III.2. ViewGroup 12
III.2.1. LinearLayout 12
III.2.2. FrameLayout 13
III.2.3. AbsoluteLayout 13
III.2.4. RetaliveLayout 14
III.2.5. TableLayout 14
III.3. Button 15
III.4. ImageButton 16
III.5. ImageView 16
III.6. ListView 17
III.7. TextView 18
III.8. EditText 18
III.9. CheckBox 19
III.10. Acvivity & Intend 19
III.10.1. Activity 19
III.10.2. Intent 20
IV. SQLite 22
V. GPS 23
VI. Google Map 23
PHÂN TÍCH THIẾT KẾ HỆ THỐNG 24
I. Phân tích yêu cầu 24
I.1. Đặc tả bài toán 24
I.2. Các chức năng chính của hệ thống 24
I.2.1. Đồng bộ facebook 24
I.2.2. Tìm kiếm quán ăn 24
I.2.3. Xem thông tin quán ăn 24
I.2.4. Quán ăn ưa thích 24
I.2.5. Chỉ đường quán ăn 25
I.2.6. Bản đồ quán ăn 25
I.2.7. Học nấu ăn 25
II. Các biểu đồ hệ thống 26
II.1. Biểu đồ ca sử dụng 26
II.1.1. Biểu đồ ca sử dụng tổng quát 26
II.1.2. Xem quán ăn 27
II.1.3. Đồng bộ facebook 28
II.1.4. Xem bản đồ 28
II.1.5. Học nấu ăn 29
II.2. Biểu đồ hoạt động 30
II.2.1. Tìm kiếm 30
II.2.2. Bản đồ 31
II.2.3. Tìm đường 32
II.2.4. Đăng nhập facebook 33
II.2.5. Xem thông tin quán ăn 34
II.3. Biểu đồ tuần tự 35
II.3.1. Tìm kiếm 35
II.3.2. Bản đồ 36
II.3.3. Tìm đường 37
II.3.4. Đăng nhập facebook 38
III. Cơ sở dữ liệu sqlite 39
III.1. Bảng tblATDT 39
III.2. Bảng tblNauAn 39
TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 40
I. Hướng dẫn cài đặt 40
II. Minh họa chạy chương trình 40
KẾT LUẬN 47
I. Kết quả đạt được 47
II. Đánh giá kết quả 47
III. Hướng phát triển 47
DANH MỤC HÌNH ẢNH
Hình 11: Cấu trúc hệ thống Android 4
Hình 12: Android emulator 7
Hình 13: Vòng đời của Activity 8
Hình 14: Cấu trúc một giao diện ứng dụng Android 12
Hình 15: Bộ trí các widget sử dụng LinearLayout 13
Hình 16: Bố trí các widget trong FrameLayout 13
Hình 17: Bố trí widget trong RelativeLayout 14
Hình 18: Bố trí widget trong TableLayout 15
Hình 19: ImageButton 16
Hình 20: ImageView và ImageButton 17
Hình 21: Minh họa cho một ListView 18
Hình 25: Truyền dữ liệu giữa 2 Acticity 21
Hình 26: Các thuộc tính của Intent 21
Hình 27: Các Action đã được định nghĩa sẵn trong Intent 22
Hình 27: SQLite Manager 22
Hình 28. Biểu đồ ca sử dụng tổng quát 26
Hình 29. Biểu đồ ca sử dụng xem quán ăn 27
Hình 30. Biểu đồ ca sử dụng đồng bộ facebook 28
Hình 31. Biểu đồ ca sử dụng xem bản đồ 28
Hình 32. Biểu đồ ca sử dụng học nấu ăn 29
Hình 33. Biểu đồ hoạt động Tìm kiếm 30
Hình 34. Biểu đồ hoạt động Bản đồ 31
Hình 35. Biểu đồ hoạt động Tìm đường 32
Hình 36. Biểu đồ hoạt động Đăng nhập facebook 33
Hình 37. Biểu đồ hoạt động Xem thông tin quán ăn 34
Hình 38. Biểu đồ tuần tự Tìm kiếm 35
Hình 39. Biểu đồ tuần tự Bản đồ 36
Hình 40. Biểu đồ tuần tự Tìm đường 37
Hình 41. Biểu đồ tuần tự Đăng nhập facebook 38
Hình 42. Giao diện màn hình chính 40
Hình 43. Giao diện màn hình Tìm Kiếm 41
Hình 44. Giao diện màn hình Yêu Thích 41
Hình 45. Giao diện màn hình danh sách quán ăn 42
Hình 46. Giao diện màn hình chi tiết quán ăn 42
Hình 47. Giao diện màn hình tìm đường đi 43
Hình 48. Giao diện màn hình chia sẻ quán ăn 43
Hình 49. Giao diện màn hình bình luận quán ăn 44
Hình 50. Giao diện màn hình chủ dạy hướng dẫn nấu ăn 44
Hình 51. Giao diện màn hình danh sách các món được hướng dẫn nấu 45
Hình 52. Giao diện màn hình chi tiết hướng dẫn nấu ăn 45
Hình 53. Giao diện màn hình bản đồ quán ăn 46
DANH MỤC BẢNG BIỂU
Bảng 1. Mô tả các usecase trong biểu đồ ca sử dụng tổng quát 27
Bảng 2. Mô tả các usecase trong biểu đồ ca sử dụng xem quán ăn 27
Bảng 3. Mô tả các usecase trong biểu đồ ca sử dụng đồng bộ facebook 28
Bảng 4. Mô tả các usecase trong biểu đồ ca sử dụng xem bản đồ 29
Bảng 5. Mô tả usecase trong biểu đồ ca sử dụng học nấu ăn 29
Bảng 6. Cơ sở dữ liệu bảng tblATDT 39
Bảng 7. Cơ sở dữ liệu bảng tblNauAn 39
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 1
MỞ ĐẦU
I. Bối cảnh của đề tài
Nền công nghệ thông tin đang thực sự đi vào giai đoạn phát triển bậc nhất từ trước
đến nay. Nếu trước kia, sự ra đời của máy tính xách tay mang lại sự thuận tiện cho
người sử dụng, thì sau sự ra đời của chiếc điện thoại thông minh đánh dấu sự phát triển
vượt bậc của công nghệ thông tin. Mọi sản phẩm công nghệ đều nằm trong chiếc điện
thoại thông minh. Thật dễ dàng cho cuộc sống các bạn khi có cho bản thân chiếc điện
thoại như thế.
Thế giới điện thoại phát triển không ngừng, những chiếc điện thoại chạy hệ điều
hành Android đầu tiên ra đời đã đánh dấu bước tiến lớn của Google trong thị trường
này. Số lượng sử dụng điện thoại này càng tăng do có nhiều tính năng và giá cả khá
mềm.
Ngày nay việc thưởng thức ẩm thực càng ngày càng trở nên khắc khe hơn đối với
thực khách,những quán ăn cũng trở nên phong phú và mở rộng nhiều nơi khắp thành
phố. Việc tìm được một quán ăn ưng ý hay chỉ là nhớ ra quán ăn ở vị trí nào cũng hết
sức khó khăn hơn.
Với những suy nghĩ đó em quyết định chọn đề tài Xây dựng ứng dụng “Ẩm thực Đà
Thành” trên nền tảng Android,giúp giải quyết được khó khăn trong việc tìm kiếm quán
ăn chỉ với thiết bị cầm tay.
II. Mục đích và ý nghĩa của đề tài
II.1. Mục đích của đề tài
Luận văn tốt nghiệp trên ý tưởng đề tài với hai mục đích chính như sau :
Thứ nhất là tìm hiểu về kỹ thuật lâp trình ứng dụng với Android SDK
Thứ hai là xây dựng ứng dụng trên thiết bị di động Android có khả năng triển
khai ứng dụng vào thực tế,đem lại sự tiện lợi cho người sử dụng có thể tra
cứu mọi nơi.
Với những kiến thức đã học được tại trường, kết hợp với sự tìm hiểu công nghệ của
cá nhân. Em hy vọng luận văn tốt nghiệp của em sẽ đạt được kết quả như mong đợi.
II.2. Ý nghĩa của đề tài
Trước hết, ứng dụng “Ẩm thực Đà Thành” được xây dựng như một đề tài thể hiện
việc áp dụng những kiến thức quý báu đã được các Thầy, Cô của trường Đại học Bách
Khoa – Đại học Đà Nẵng đã nhiệt tình truyền đạt lại cho em. Và đặc biệt là sự theo dõi
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 2
và tận tình giúp đỡ của Cô Lê Thị Mỹ Hạnh trong suốt thời gian em thực hiện đề tài
này.
Trong thời đại công nghệ thông tin phát triển như vũ bão ngày nay, công nghệ không
ngừng được cải tiến, những công nghệ mới ra đời đòi hỏi người lập trình viên phải cố
gắn nghiên cứu và tìm hiểu để áp dụng vào thực tiễn. Điều này củng được thể hiện qua
sự cố gắng của em khi quyết định thực hiện đề tài này với công nghệ được coi là mới
hiện nay và được phát triển mạnh mẽ trong tương lai.
Ứng dụng có thể nói như là một phụ kiện đi kèm theo các bà nội trợ để hổ trợ cho
các bà làm tốt hơn trong việc chuẩn bị bữa cơm cho gia đình.
III. Nhiệm vụ của đề tài
Ứng dụng “Ẩm thực Đà Thành” là một ứng dụng chạy trên nền Android. Dưới đây
là các chức năng chính mà em dự định thực hiện trong ứng dụng như sau:
Người dùng có thể tìm kiếm các địa điểm quán ăn trên địa bàn thành phố Đà
Nẵng
Người dùng có thể xem tất cả các quán ăn,thông tin chi tiết quán ăn.
Thêm quán ăn vào danh sách yêu thích.
Người dùng có thể xem chỉ dẫn đường đi từ vị trí đang đứng tới quán ăn muốn
đến.
Có thể gọi điện trực tiếp từ ứng dụng.
Ứng dụng có chức năng hiển thị các quán ăn lên bản đồ để người dùng định
hướng và chọn quán ăn ngay trên bản đồ.
Ứng dụng có chức năng hướng dẫn nấu một số món ăn theo từng loại cụ thể.
Có thể chia sẻ quán ăn và bình luận về quán ăn đang xem.
IV. Nội dung nghiên cứu
Tìm hiểu công nghệ Android và kỹ thuật cần thiết để lập trình ứng dụng điện
thoại Android.
Phân tích các yêu cầu cần thiết của đề tài.
Phân tích thiết kế hệ thống.
Xây dựng cơ sở dữ liệu.
Xây dựng ứng dụng với đầy đủ các chức năng cần thiết.
Viết báo cáo tổng kết đề tài và đề ra hướng phát triển.
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 3
CHƯƠNG 1
CƠ SỞ LÝ THUYẾT
I. Hệ điều hành Android
I.1. Lịch sử của 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 mạng tên Android được thành lập bởi 4 thành viên là:
1. Andu Rubin: nhà đồng sáng lập công ty Danger – công ty chuyên về các nền
tảng, phần mềm, thiết kế và dịch vụ cho các thiết bị điện toán di động
2. Rich Miner: nhà đồng sáng lập công ty truyền thông Wildfire
Communications
3. Nick Sears: một trong những vị phó chủ tịch của nhà cung cấp mạng viễn
thông di động T-Mobile ở Mỹ
4. Chris While: trưởng bộ phận thiết kế và phát triển giao diện WebTV
Năm 2005, sau hơn 2 năm hoạt động thì Android đượ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 tiềm kiếm. Đồng thời cả Andy Rubin, Rich Miner và Chris While
đề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. Ở
thời điểm đó, nhiều người không thực sự chú ý vào thương vụ này thế nhưng nó lại
đánh dấu bước đi đầu tiên của Google trong thị trường thiết bị di động thế giớ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, báo
hiệu sự có mặt của một “ngôi sao” khác trên “thiên hà” thị trường công nghệ di động.
Đến tháng 12 năm 2006, suy đoán về ý định gia nhập thị trường truyền thông di
động của Google tiếp tục được củng cố sau khi BBC và The Wall Street Journal cho
biết rằng hang này muốn đưa ứng dụng và chức năng tìm kiếm của mình lên các thiết
bị di động. Lập tức ngay sau đó, nhiều tin đồn về chiếc điện thoại mang thương hiệu
Google xuất hiện khắp các phương tiện truyền thông.
Tháng 7 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 của cộng
đồng Linux 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.
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 4
Tính cho tới thời điểm này, Google Android đã có 5 phiên bản chính thức và 1 phiên
bản sắp ra mắt được đặt tên theo những món tráng miệng, vợi ngụ ý người dung 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, Écair 2.0, Froyo 2.2,
Gingerbread 2.3, Honeycomb 3.0/3.1,, và các phiên bản sắp ra mắt là Android Ice
Cream Sandwich.
I.2. Kiến trúc của Android
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành Android.
Mỗi một phần sẻ được đặc tả một cách chi tiết dưới đây.
Hình 11: Cấu trúc hệ thống Android
I.2.1. Tầng ứng dụng
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: contacts, brower,
camera, phone,… Tất cả các ứng dụng chạy trên hệ điều hành Android đều viết bằng
java.
I.2.2. Application 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à phá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ụ
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 5
chạy nền, thiết lập hệ thống báo động, thêm các thông báo để các thanh trạng thái, và
nhiều, nhiều hơn nữa.
Nhà phát triển có thể truy cập vào các API cùng một khuôn khổ được sử dụng bởi
các ứng dụng lõi. Các kiến trúc ứng dụng được thiết kế để đơn giản hóa việc sử dụn lại
các thành phần, bất kỳ ứng dụng nào có thể xuất bản khả năng của mình và ứng dụng
nào khác sau đó có thể sử dụng những khả năng (có thể hạn chế bảo mật được thực thi
bởi khuôn khổ). Cơ chế này cho phép các thành phần tương tự sẽ được thay thế bởi
người sử dụng.
Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống bao gồm:
- Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau dung để thiết
kế giao diện ứng dụng như: gridview, tableview, linearlayout…
- Một “Content Provider” 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 chia sẻ dữ liệu giữa các
ứng dụng đó.
- Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không phải
là mã nguồn chẳng hạn như: localized string graphics và layout files.
- Một “Notifycation Manager” cho phép tất cả các ứng dụng hiện thị custom
alerts trong status bar.
Activity Manager được dùng để quản lý chu trình sống của ứng dụng và điều hướng
các activity.
I.2.3. Library
Android bao gồm một tập hợp các thư viện C/C++ được sử dụng bởi nhiều thành
phần khác nhau trong hệ thống Android. Điều này được thể hiện thông qua nền tảng
ứng dụng Andorid. Một số thư viện cơ bản được liệt kê dưới đây:
System C library: có nguồn gốc từ hệ thống thư viện chuẩn C (LIBC) giúp
điều chỉnh nhúng cho các thiết bị sử dụng nền tảng Linux.
Media Libraries: dựa trên OpenCore của PacketVideo, hổ trợ ghi và phát
lại âm thanh, hình ảnh, video dưới nhiều định dạng phổ biện như MPEG4,
H.264, MP3, AAC, AMR, JPG và PNG
LibWebCore: trình duyệt web hiện đại hổ trợ cả trình duyệt web của
Android và các trình duyệt web nhúng khác.
3D Libraries: dựa trên OpenGL ES 1.0 API, dùng để tăng tốc phần cứng 3D
(nếu có) hoặc để tối ưu hóa các phần mềm 3D.
SQLite: cở sở dữ liệu dùng cho tất cả các ứng dụng
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 6
I.2.4. Android Runtime
Cung cấp các chức năng có sẵn trong thư viện gốc của ngôn ngữ lập trình Java. Mỗi
ứng dụng trên hệ điều hành Android sẽ chạy trên một tiến trình của riêng nó. Ví dụ: các
máy ảo Dalvik chạy trên các lớp được biên soạn bởi một trình biên dịch ngôn ngữ Java
và được chuyển đổi sang định dạng Dalvik (.dex) bằng công cụ “dx” tích hợp. Các tập
tin được thực thi dưới dạng .dex sẽ giúp tối ưu hóa cũng như quản lý bộ nhớ ở cấp độ
thấp.
I.2.5. Linux Kernel
Android hoạt động dựa trên nhân hệ điều hành Linux 2.6 qua đó cung cấp các dịch
vụ cho hệ thống cốt lõi như an ninh, quản lý bộ nhớ, quá trình hay mô hình điều khiển…
Đồng thời nhân hệ điều hành hoạt động như một lớp trừu tướng giúp kết nối giữa phần
cứng và phần mềm còn lại trên nền tảng.
I.3. Android Emulator
Android SDK và Plugin Eclip được gọi là một Android Deverloper Tool (ADT).
Các Android coder sẽ cần phải sử dụng công cụ IDE (Integrated Development
Enveronment) này để phát triển, debugging và testing cho ứng dụng. Tuy nhiên, các
coder cũng có thể không cần phải sử dụng IDE mà thay vào đó là sử dụng command
line để biên dịch và tất nhiên là vẫn có Emulator như thường.
Android Emulator được trang bị đầy đủ hầu hết các tính năng của một thiết bị thật.
Tuy nhiên, một số đã bị giới hạn như là kết nối qua cổng USB, camera và video, nghe
phone, nguồn điện giả lập và Bluetooth.
Android Emulator thực hiện các công việc thông qua một bộ xử lý mã nguồn mở,
công nghệ này được gọi là QEMU được phát triển bởi Fabrice Bellard.
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 7
Hình 12: Android emulator
I.4. Các thành phần của một ứng dụng Android
- Activity
Một ứng dụng có giao diện người dùng nhìn thấy được, sẽ được thực hiện bằng
một Activity. Activity dùng Views để ạo nên giao diện đồ họa người dùng, để hiện thị
thông tin và đáp lại hành động của người dùng. Khi người dùng chọn một ứng dụng từ
màn hình chủ hoặc trình khởi chạy ứng dụng thì một Activity được khởi động. Activity
trong Android cũng tương tự như một Form trong các ứng dụng destop truyền thống.
Vòng đời của ứng dụng Android
Activity là thành phần quan trọng nhất và đóng vai trò chinh trong xây dựng
ứng dụng Android
Hệ điều hành Android quản lý Activity theo dạng stack: khi một Activity mới
được khởi tạo, nó sẽ được xếp lên đầu của stack và trở thành running activity, các
Activity trước đó sẽ bị tạm dừng và chỉ hoạt động trở lại khi Activity mới được giải
phóng.
Các trạng thái trong Activity:
- Running: Activity đang hiện thị trên màn hình
- Paused: Activity vẫn hiện thị nhưng không thể tương tác
- Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 8
- 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 được khởi
động lại hoàn toàn và phục hồi lại trạng thái trước đó.
Hình 13: Vòng đời của Activity
- Service
Service là một ứng dụng component có thể thực hiện các hoạt động long-running
trong background và không cung cấp một giao diện người dùng. Một ứng dụng
component có thể bắt đầu một service và nó tiếp tục chạy trong background thậm chí
nếu người dùng chuyển cho ứng dụng khác. Ngoài ra, một component có thể liên kết
cho một dịch vụ tương tác với nó và thậm chí thực hiện giao tiếp InterProcess. Ví dụ,
một dịch vụ có thể xử lý giao diện mạng, nghe nhạc, thực hiện các tập tin I/O hoặc
tương tác với một provider content, tất cả từ background.
Một service cơ bản có thể có hai hình thức như sau:
Started
Service là “started” khi một component ứng dụng bắt đầu nó bằng cách gọi
startService(). Khi bắt đầu, một service có thể chạy trên background vô thời hạn, ngay
cả khi các thành phần đó bắt đầu nó bị phá hủy. Thông thường, một service bắt đầu
thực hiện một hoạt động đơn lẻ và không trả lại kết quả cho người gọi. Ví dụ, nó có thể
tải về hoặc tải lên một tập tin qua mạng.Khi hoạt động được thực hiện, các service nên
dừng lại bản thân
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 9
Bound
Service là “bound” khi một component ứng dụng liên kết cho nó bằng cách gọi
bindService(). Một service rang buộc cung cấp một giao diện client-server cho phép các
component tương tác với các dịch vụ, gửi các yêu cầu, có được kết quả và thậm chí làm
như vậy qua quá trình giao tiếp InterProcess. Một service bound chỉ chạy miễn là ứng
dụng component khác bị rang buộc vào nó. Nhiều thành phần có thể liên kết cho dịch
vụ cùng một lúc, nhưng khi tất cả chúng unbind, service này bị phá hủy.
Để tạo ra một service, bạn phải tạo một lớp dịch vụ. Trong implementation của
bạn, bạn cần cho ghi đè lên một số method gọi lại có thể xử lý các khía cạnh quan trọng
của vòng đời service và cung cấp một cơ chế cho các component gắn kết với dịch vụ
nếu thích hợp. Các method quan trọng nhất bạn có nên ghi đè lên gọi là:
- onStartCommand()
Hệ thống gọi method này khi component như là một Activity, yêu cầu các
service được started, bằng cách gọi startService(). Sau đó thực hiện phương pháp này,
các service được khởi động và có thể chạy trong background vô thời hạn. Nếu bạn có
triển khai điều này, đó là trách nhiệm của bạn đề dừng dịch vụ khi công việc của mình
được thực hiện, bởi stopSelf gọi điện thoại () hoặc stopService().
- onBind()
Hệ thống này gọi method này khi component muốn liên kết với các
service, bằng cách gọi bindService(). Trong implemention của phương thức này, bạn
phải cung cấp một giao diện đó khách hàng sử dụng để giao tiếp với dịch vụ, bằng cách
trả lại một IBinher. Bạn luôn luôn phải triển khai phương pháp này, nhưng bạn không
muốn cho phép liên kết, sau đó bạn nên trở về null.
- onCreate()
Hệ thống gọi method này khi service đầu tiên tạo ra, để thực hiện các thủ
tục thiết lập một lần (trước khi cuộc gọi hoặc là onStartCommand() hoặc onBind()).
Nếu service đang chạy, phương pháo này không được gọi.
- onDestroy()
Hệ thống gọi method này khi service không còn được sư dụng và đang
được bị phá hũy. Service của bạn nền triển khai điều này cho làm sạch bất cứ nguồn tài
nguyên như chủ đề, người nghe đa đăng ký, nhận v v. Đây là các cuộc gọi qua dịch
vụ này nhận được.
- Content Provider
Có thể coi như là một máy chủ cơ sở dữ liệu. Công việc của nó là quản lý truy cập
và chia sẻ dữ liệu đang tồn tại, chẳng hạn như một cơ sở dữ liệu SQLite. Nó có thể được
cấu hình để cho phép các ứng dụng khác truy xuất và ngược lại. Nếu ứng dụng rất đơn
giản thì không nhất thiết phải tạo ra một trình cung cấp nội dung.
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 10
Content Provider giúp tách biệt tầng ứng dụng ra khỏi tầng dữ liệu. Nó có đầy đủ
các quyền điều khiển và được truy xuất thông qua mô hình URI đơn giản như là có thể
thêm, xóa, cập nhập dữ liệu của các ứng dụng.
- Broadcats Receiver
Bằng cách tạo và đăng ký một Broadcast Receiver, ứng dụng Android có thể lắng
nghe toàn bộ các Intent theo một chuẩn cụ thể được chỉ định. Các Broadcast Receiver
sẽ chạy ứng dụng một cách tự động để đáp ứng một Intent gửi đến, hay xữ lý một phần
từ dữ liệu hoặc đáp ứng một sự kiện, chẳng hạn như nhận một văn bản thông báo.
Broadcast Receiver chỉ có duy nhất một phương thức onReceiver():
Khi có sự kiện mà Broadcast Receiver đã đăng ký nhận được phát đi, thì
phương thức onReceiver() của Broadcats Receiver đó sẽ được gọi.
Sauk hi thực thi xong phương thức này, vòng đời của một Broadcast Receiver
kết thúc.
I.5. Cấu trúc một Project
Một Android project bao gồm các thư mục sau:
Thư mục src chứa source code ứng dụng. Gồm các package và các class
Thư mục gen chứa các file tự động phát sinh (mà thường gặp nhất là R.class)
Thư mục res để chứa các resource dùng trong ứng dụng (thông qua ID)
Thư mục assets chứa các resource file mà ứng dụng cần dùng (dưới dạng file)
File Manifest là file khai báo thông tin về ứng dụng với hệ thống (như ứng
dụng gồm những activity nào, có service nào… xin các quyền gì, phiên bản
bao nhiêu, dùng từ SDK phiên bản nào ).
File thư viện…
II. Công cụ để tạo một ứng dụng Android
Cách dễ nhất để bắt đầu phát triển các ứng dụng Android là tải về Bộ công cụ phát
triển phần mềm Android và Môi trường phát triển tích hợp Eclipse (Eclipse IDE) Việc
phát triển Android có thể diễn ra trên Microsoft Windows, Mac OS X, hoặc Linux.
Trong bài luận văn này, nhóm chúng em chọn phát triển ứng dụng Android bằng
Microsoft Windows.
II.1. Eclipse IDE
Các ứng dụng Android được viết bằng ngôn ngữ Java nhưng biên dịch và thi hành
bằng máy ảo Dalvik. Viết mã bằng ngôn ngữ Java trong Eclipse là rất trực quan. Eclipse
cung cấp môi trường Java phong phú, gồm cả việc trợ giúp theo ngữ cảnh và các mách
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 11
nước gợi ý về mã. Khi bộ mã Java được biên dịch thành công, Android Deverloper
Tools sẽ đảm bảo rằng ứng dụng đó được đóng gói một cách đúng đắn, gồm cả tập tin
Android Manifest.xml.
II.2. Android SDK
Bộ công cụ phát triển ứng dụng Android SDK là công cụ giả lập thiết bị ảo trên máy
tính để phát triển ứng dụng với các hàm API hỗ trợ cho lập trình viên lập trình trên các
thiết bị di động sử dụng nền tảng Android thông qua ngôn ngữ lập trình Java. SDK gồm
có:
Android.jar: tập tin lưu trữ Java chứa toàn bộ các lớp SDK Android cần thiết
để xây dựng ứng dụng.
Document.html và thư mục docs: tài liệu SDK được cung cấp tại chỗ và trên
web, chủ yếu nó ở dạng JavaDocs, tạo điều kiện dễ dàng cho việc hướng dẫn
trong nhiều gói SDK. Tài liệu cũng gồm cả hướng dẫn phát triển mức cao và
các liên kết đến cộng đồng Android rộng rãi.
Thư mục sample (các ví dụ mẫu): thư mục con samples chứa bộ mã nguồn
đầy đủ dùng cho một loạt các ứng dụng, gồm cả ApiDemo, nó sử dụng nhiều
API. Ứng dụng mẫu là một nơi khám phá tuyệt vời khi bắt đầu phát triển ứng
dụng Android.
Thư mục tools (các công cụ): chứa toàn bộ các công cụ dòng lệnh để xây
dựng nên các ứng dụng Android. Công cụ được dùng phổ biến và hữu ích
nhất là tiện ích adb (Android Debug Bridge).
Usb__driver: thư mục chứa các trình điều khiển cần thiết để kết nối môi
trường phát triển với một thiết bị có khả năng chạy Android, chẳng hạn như
G1 hay điện thoại đã được phát triển Android Dev 1. Các tập tin này là đòi
hỏi duy nhất đối với các nhà phát triển đang sử dụng nền Windows.
III. Các thành phần giao diện trong Android
III.1. 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 classs 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ó
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 12
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.
Hình 14: Cấu trúc một giao diện ứng dụng Android
III.2. ViewGroup
ViewGroup thực ra chính là View hay nói đung shown thì ViewGroup chính là các
widget Layout được dùng để bố trí các đối tượng khác trên một screen. Có một số loại
ViewGroup như sau:
III.2.1. 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.
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 13
Hình 15: Bộ trí các widget sử dụng LinearLayout
III.2.2. FrameLayout
FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như 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. FrameLayout 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.
Hình 16: Bố trí các widget trong FrameLayout
III.2.3. AbsoluteLayout
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 tọa độ x,y. Tuy nhiên, kiểu layout này rất ít khi được dùng bởi vì tọa
độ của các đối tượng luôn cố định và sẽ không được điều chỉnh được tỷ lệ khoảng cách
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 14
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 chính xác như ban đầu.
III.2.4. RetaliveLayout
Layout này cho phép bố trí các widget theo mộ 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ý.
Hình 17: Bố trí widget trong RelativeLayout
III.2.5. 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 danh sách dữ liệu.
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 15
Hình 18: Bố trí widget trong TableLayout
III.3. 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:
Thiết kế bằng XML
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cmdButton1"
android:text="Touch me!"
android:onClick="touchMe"/>
Thuộc tính android:onClick =”touchMe” được dùng để nắm bắt sự kiện click
vào button. Khi sự kiện click button xảy ra thì phương thức “touchMe” được khai báo
trong thẻ thuộc tính sẽ được gọi. Nếu trường hợp phương thức “touchMe” chưa được
khai báo trong file mã nguồn tương ứng thì sẽ phát sinh một exception. Ngược lại,
phương thức “touchMe” sẽ nhận được một đối tham biến là đối tượng View nơi đã sinh
ra sự kiện. Đối với View này có thể ép kiểu trực tiếp sang kiểu Button vì thực chất nó
là một button.
Ví dụ: trong file mã nguồn khai báo một hàm như sau:
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 16
public void touchMe(View v){
Button me = (Button) v;
Me.setText(“Touched”);
}
Thiết kế bằng code
Thực ra mà nói thì nều không phải đòi hỏi phải custom lại một widget thì không
cần phải sử dụng tới code. Trong một số trường hợp bắt buộc chúng ta phải custom các
widget để cho phù hợp với hoàn cảnh. Chẳng hạn như trong game, các menu hay các
nút điều khiển,….
Để khai báo một Button trong code ta làm như sau:
Button cmdButton = new Button(this);
cmdButton.setText(“Touch Me!”);
cmdButon.setOnClickListener(…);
Để custom một widget nào đó ta phải tạo một class kế thừa từ một class widget
muốn custom, sau đó sử dụng hàm draw để vẽ lại widget đó như một Canvas.
VD: canvas.drawPicture(Picture.createFromStream( ));
III.4. ImageButton
Cũng tương tự như Button, 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
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cmdButton1"
android:src="@drawable/icon"
android:onClick="touchMe"/>
Hình 19: ImageButton
III.5. ImageView
Được dùng để thể hiện một hình ảnh. Nó cũng giống như ImageButton, chỉ khác là
không có hình dáng của một cái button.
Xây dựng ứng dụng “Ẩm thực Đà Thành” trên nền tảng Android
SVTH: Hứa Bách Trung – Lớp 11TLT Trang 17
Code:
ImageView iv = new ImageView(this);
iv.setImageResource(R.drawble.icon)
Hình 20: ImageView và ImageButton
III.6. ListView
Được sử dụng để thể hiện một danh sách các thông tin theo từng cell. Mỗi cell thông
thường được load lên từ một file XML đã được cố định trên đó số lượng thông tin và
loại thông tin cần được thể hiện.
Để thực 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 name 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: 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 đó.