Vì vậy, một chiếc điện thoại di động tốt không chỉ là một chiếc điện thoại có cấu hình tốt, mà còn phải được chạy trên một hệ điều hành tốt, hệ điều hành ấy ngoài việc hoạt động ổn định
Trang 1NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Ngày Tháng Năm
Giáo Viên Hướng Dẫn (Ký, ghi rõ họ và tên)
Trang 2NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ii
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Ngày Tháng Năm
Giáo Viên Phản Biện
(Ký, ghi rõ họ và tên)
Trang 3LỜI CẢM ƠN
Chúng em xin chân thành cám ơn khoa Công nghệ thông tin, Bộ môn Công nghệ phần mềm, trường Đại học Sư Phạm Kỹ Thuật Tp.HCM đã tạo điều kiện thuận lợi cho chúng em thực hiện đề tài này
Chúng em cũng xin được gửi lời cảm ơn chân thành nhất đến thầy Nguyễn Minh Đạo, người đã tận tình chỉ bảo và hướng dẫn em thực hiện đề tài này
Bên cạnh đó, chúng em xin gửi lời cảm ơn đến các thầy cô giáo, những người đã giảng dạy, tạo điều kiện cho em tích lũy được những kiến thức quý báu trong những năm học qua
Chúng em xin gửi lời biết ơn sâu sắc đến cha mẹ, gia đình, bạn bè, những người đã luôn bên cạnh, chăm sóc, ủng hộ, động viên chúng em trong suốt thời gian học tập và nghiên cứu
Dù đã cố gắng hoàn thành đề tài khóa luận đúng yêu cầu, nhưng do thời gian hạn hẹp
và khả năng còn hạn chế nên chắc chắn sẽ có những thiếu sót không tránh khỏi Chúng
em mọng nhận được sự thông cảm và tận tình chỉ bảo của các thầy cô và các bạn
TP Hồ Chí Minh, ngày 26 tháng 06 năm 2015
Nhóm sinh viên thực hiện
Chung Nhật Trường Phạm Xuân Lộc
Trang 4MỤC LỤC iv
MỤC LỤC NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN i
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ii
LỜI CẢM ƠN iii
MỤC LỤC iv
DANH MỤC HÌNH ẢNH viii
DANH MỤC BẢNG BIỂU xi
CÁC KÝ HIỆU VÀ VIẾT TẮT xiv
GIỚI THIỆU ĐỀ TÀI xv
PHẦN A MỞ ĐẦU 0
LỜI GIỚI THIỆU 1
1 Tính cấp thiết của đề tài 1
2 Ý nghĩa khoa học thực tiễn 2
3 Mục đích nghiên cứu 2
4 Đối tượng và phạm vi nghiên cứu 3
PHẦN B NỘI DUNG 4
Chương 1 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH MOBILE ANDROID 5
1.1 Lịch sử hệ điều hành mobile Android 5
1.2 Máy ảo Dalvik 10
1.3 Kiến trúc của Android 10
1.3.1 Tầng ứng dụng 11
1.3.2 Tầng Application Framework 11
1.3.3 Library và Android Runtime 12
1.3.4 Linnux Kernel 13
1.4 Ứng dụng Android 14
1.4.1 Các thành phần của ứng dụng Android 14
1.4.2 Vòng đời của ứng dụng Android 15
1.4.3 Chu kỳ của một Activity 15
1.4.4 Intent 19
Trang 51.4.5 Content Provider và Uri 21
1.4.6 Background Service 23
1.5 Android Emulator 25
1.6 Các thành phần giao diện trong Android 26
1.6.1 View 26
1.6.2 ViewGroup 27
1.7 SQLITE 31
Chương 2 GOOGLE APIs 33
2.1 Google Maps API 33
2.1.1 Giới thiệu 33
2.1.2 Sử dụng Google Maps API trên Android 34
2.2 JavaScript Object Notation (JSON) 41
2.2.1 JSON là gì? 42
2.2.2 Cấu trúc của JSON 42
2.3 Google Places Autocomplete API 47
2.3.1 Giới thiệu 47
2.3.2 Sử dụng 47
2.3.3 Request 47
2.3.4 Response 49
2.4 Google Places API 50
2.4.1 Giới thiệu 50
2.4.2 Sử dụng 50
2.4.3 Place Searches 51
2.4.4 Place Details 53
2.5 Google Directions API 55
2.5.1 Giới thiệu 55
2.5.2 Direction Request 56
2.5.3 Direction Response 57
Chương 3 RESTFUL WEB SERVICES 64
3.1 Định nghĩa REST 64
Trang 6MỤC LỤC vi
3.2 Kiến trúc dịch vụ web RESTful 65
3.2.1 Tài nguyên 65
3.2.2 Bộ định danh tài nguyên đồng bộ - URI 66
3.2.3 Đồng bộ giao diện thông qua yêu cầu HTTP 66
Chương 4 HỆ CHUYÊN GIA 73
4.1 Giới thiệu hệ chuyên gia 73
4.2 Biểu diễn tri thức bởi các luật sản xuất 74
4.2 Phương pháp lập luận không chắc chắn dựa trên hệ số chắc chắn Stanford 76
Chương 5 CHƯƠNG TRÌNH MINH HỌA 80
5.1 Khảo sát hiện trạng 80
5.2 QuickPlaces RESTful Web Services 83
5.2.1 Giới thiệu 83
5.2.2 Tài nguyên 83
5.2.3 Dịch vụ 84
5.2.4 Thiết kế dữ liệu 95
5.3 Xây dựng hệ chuyên gia chuẩn đoán bệnh 100
5.3.1 Xây dựng cơ sở tri thức cho hệ chuyên gia 100
5.3.2 Mô tả xây dựng hệ chuyên gia 103
5.4 Ứng dụng tìm kiếm và chia sẻ địa điểm trên Android – MyShare 105
5.4.1 Giới thiệu 105
5.4.2 Sơ đồ Use Case 106
5.4.3 Sơ đồ lớp 119
5.4.4 Thiết kế dữ liệu 122
5.4.5 Thiết kế giao diện 123
5.4.6 Test Case 148
5.4.7 Cấu hình cài đặt 155
PHẦN C KẾT LUẬN 156
Kết quả đạt được 157
Hướng phát triển 159
PHẦN D PHỤ LỤC 161
Trang 7TÀI LIỆU THAM KHẢO 162
Trang 8MỤC LỤC HÌNH ẢNH viii
DANH MỤC HÌNH ẢNH
Hình 1 1 Giao diện màn hình khóa (android 4.4) 5
Hình 1 2 Giao diện màn hình chính (Android 4.4) 6
Hình 1 3 Các phiên bản hệ điều hành Android 7
Hình 1 4 Kiến trúc hệ điều hành Android 11
Hình 1 5 Chu kỳ sống của ứng dụng Android 15
Hình 1 6 Activity stack 16
Hình 1 7 Chu kỳ sống của Activity 17
Hình 1 8 Intent 20
Hình 1 9 Các Action được dựng sẵn 21
Hình 1 10 Chu trình sống của một Service 25
Hình 1 11 Emulator 26
Hình 1 12 Các thành phần giao diện 27
Hình 1 13 Bố trí các widget sử dụng LinearLayout 28
Hình 1 14 FrameLayout 28
Hình 1 15 RelativeLayout 29
Hình 1 16 TableLayout 30
Hình 1 17 ListView 31
Hình 1.18 Activity tương tác với DBAdapter 32
Hình 2 1 Cài đặt Google APIs trên Eclipse 34
Hình 2 2 Cài đặt gói Google Play services trên eclipse 35
Hình 2 3 Import thư viện google-play-service-lib vào workspace 36
Hình 2 4 Cài đặt google APIs và google-play-services-lib vào project 37
Hình 2 5 Lấy mã SHA1 fingerprint 38
Hình 2 6 Kích hoạt các gói hỗ trợ 39
Hình 2 7 Tạo Browser Key 39
Hình 2 8 Đăng ký Android Key 40
Hình 2 9 Object trong JSON 43
Hình 2 10 Array trong JSON 43
Hình 2 11 Value trong JSON 44
Hình 2 12 String trong JSON 45
Trang 9Hình 2 13 Number trong JSON 46
Hình 2 14 Bản đồ minh họa Google Direction 58
Hình 2 15 Hiển thị dữ liệu JSON dạng cây của Google Direction API 59
Hình 3 1 Lược đồ tuần tự của một yêu cầu GET 69
Hình 3 2 Lược đồ tuần tự của một yêu cầu POST 70
Hình 3 3 Lược đồ tuần tự của một yêu cầu PUT 71
Hình 3 4 Lược đồ tuần tự của một yêu cầu DELETE 72
Hình 4 1 Hoạt động của hệ chuyên gia 73
Hình 4.2 : Minh họa tính kết hợp CF 79
Hình 5 1 Mạng xã hội foursquare 80
Hình 5.2 Sơ đồ dữ liệu Web Services 96
Hình 5.3 Kiến trúc của hệ chuyên gia cần xây dựng 100
Hình 5 4 Sơ đồ dữ liệu hệ chuyên gia 102
Hình 5.5 Prototype tin nhắn hiển thị kết quả chẩn đoán 104
Hình 5 6 Sơ đồ Use-case ứng dụng tìm kiếm và chia sẻ địa điểm trên Android 107
Hình 5 7 Sơ đồ Use-case chia sẻ địa điểm với thành viên trong nhóm online 107
Hình 5 8 Sơ đồ Use-case quản lý tài khoản 108
Hình 5 9 Sơ đồ Use-case Quản lý thông báo 108
Hình 5 10 Sơ đồ Use-case ứng dụng tìm kiếm địa điểm 109
Hình 5 11 Sơ đồ Use-case hỏi ý kiến hệ chuyên gia 110
Hình 5 12 Sơ đồ lớp phần liên lạc với Server 119
Hình 5 13 Sơ đồ lớp các danh sách 120
Hình 5 14 Sơ đồ lớp phần truy xuất Database 121
Hình 5 15 Thiết kế dữ liệu - Sơ đồ Logic 122
Hình 5 16 Giao diện chính 123
Hình 5 17 Giao diện tìm kiếm địa điểm 125
Hình 5 18 Giao diện quản lý từ khóa tìm kiếm 126
Hình 5 19 Giao diện tìm và thay đổi vị trí hiện tại 127
Hình 5 20 Giao diện kết quả tìm kiếm 128
Hình 5 21 Chi tiết địa điểm 129
Hình 5 22 Giao diện bản đồ kết quả tìm kiếm 130
Hình 5 23 Giao diện dẫn đường 132
Trang 10MỤC LỤC HÌNH ẢNH x
Hình 5 24 Giao diện tùy chỉnh tìm kiếm 133
Hình 5 25 Giao diện đăng ký 134
Hình 5 26 Giao diện đăng nhập 135
Hình 5 27 Thông tin cá nhân 136
Hình 5 28 Chỉnh sửa thông tin cá nhân 137
Hình 5 29 Chia sẻ địa điểm 139
Hình 5 30 Danh sách các địa điểm được chia sẻ 140
Hình 5 31 Giao diện bình luận 141
Hình 5 32 Những người thích một địa điểm 142
Hình 5 33 Bản đồ các địa điểm được chia sẻ 143
Hình 5 34 Danh sách bạn bè 144
Hình 5.35 Màn hình chọn triệu chứng lâm sàng 145
Hình 5.36 Màn hình kết luận thông qua triệu chứng lâm sang và liên lạc với chuyên gia 146
Hình 5.37 Màn hình hướng dẫn sơ cứu tạm thời 147
Trang 11DANH MỤC BẢNG BIỂU
Bảng 1 1 Các thuộc tính của đối tượng Intent 20
Bảng 2 1 Các kiểu dữ liệu trong JSON 46
Bảng 2 2 Response của Place Search 52
Bảng 2 3 Response của Place Details 54
Bảng 2 4 Các tham số trong Google Directions API request 56
Bảng 2 5 Các thuộc tính trong root của Directions Response 60
Bảng 2 6 Các thuộc tính trong routes của Directions Response 60
Bảng 2 7 Các thuộc tính trong legs của Directions Response 61
Bảng 2 8 Các thuộc tính trong steps của Directions Response 62
Bảng 3 1 Các hành động CRUD và phương thức HTTP tương ứng 67
Bảng 5 1 Các tham số trong request của dịch vụ Đăng ký 84
Bảng 5 2 Các tham số trong request của dịch vụ Đăng nhập 85
Bảng 5 3 Các tham số trong request của dịch vụ Đăng xuất 85
Bảng 5 4 Các tham số trong request của dịch vụ Lấy thông tin cá nhân 86
Bảng 5 5 Các tham số trong request của dịch vụ cập nhật thông tin cá nhân 86
Bảng 5 6 Các tham số trong request của dịch vụ Like 87
Bảng 5 7 Các tham số trong request của dịch vụ Unlike 87
Bảng 5 8 Các tham số trong request của dịch vụ lấy danh sách bạn bè 88
Bảng 5 9 Các tham số trong request của dịch vụ Feeds 88
Bảng 5 10 Các tham số trong request của dịch vụ Thông tin địa điểm 89
Bảng 5 11 Các tham số trong request của dịch vụ chia sẻ địa điểm 89
Bảng 5 12 Các tham số trong request của dịch vụ xóa địa điểm 90
Bảng 5 13 Các tham số trong request của dịch vụ Danh sách người thích 90
Bảng 5 14 Các tham số trong request của dịch vụ lấy danh sách bình luận 91
Bảng 5 15 Các tham số trong request của dịch vụ Bình luận 91
Bảng 5 16 Các tham số trong request của dịch vụ xóa bình luận 92
Bảng 5 17 Các tham số trong request của dịch vụ nhận thông báo 92
Bảng 5 18 Các tham số trong request của dịch vụ cập nhật thông báo 93
Bảng 5 19 Các tham số trong request của dịch vụ kết bạn 93
Bảng 5 20 Các tham số trong request của dịch vụ trả lời yêu cầu kết bạn 94
Trang 12MỤC LỤC BẢNG xii
Bảng 5 21 Các tham số trong request của dịch vụ Unfriend 94
Bảng 5.22 Các tham số trong request của dịch vụ lấy thông tin chuyên gia 95
Bảng 5.23 Các tham số trong request của dịch vụ gửi bài cho chuyên gia 95
Bảng 5 24 Bảng User 96
Bảng 5 25 Bảng Place 97
Bảng 5 26 Bảng Comment 98
Bảng 5 27 Bảng Likes 98
Bảng 5 28 Bảng Notification 98
Bảng 5 29 Bảng Friends 99
Bảng 5 30 Bảng Photo 99
Bảng 5.31 Các tri thức về bệnh học 100
Bảng 5 32 Bảng Cases 102
Bảng 5 33 Bảng Rules 102
Bảng 5 34 Bảng Diseases 103
Bảng 5 35 Bảng Conclutions 103
Bảng 5 36 Danh sách các chức năng của ứng dụng MyShare 110
Bảng 5 37 Bảng Catalog 122
Bảng 5 38 Các thành phần trên giao diện chính 123
Bảng 5 39 Các thành phần trên giao diện tìm kiếm địa điểm 125
Bảng 5 40 Các thành phần trên giao diện quản lý từ khóa tìm kiếm 126
Bảng 5 41 Các thành phần trên giao diện thay đổi vị trí hiện tại 127
Bảng 5 42 Các thành phần trên giao diện kết quả tìm kiếm 128
Bảng 5 43 Các thành phần trên giao diện chi tiết địa điểm 129
Bảng 5 44 Các thành phần trên giao diện trên bản đồ 129
Bảng 5 45 Các thành phần của giao diện dẫn đường 133
Bảng 5 46 Các thành phần của giao diện tùy chỉnh tìm kiếm 133
Bảng 5 47 Các thành phần của giao diện đăng ký 134
Bảng 5 48 Các thành phần của giao diện đăng nhập 135
Bảng 5.49 Các thành phần của giao diện Thông tin cá nhân 136
Bảng 5 50 Các thành phần của giao diện chỉnh sửa thông tin cá nhân 138
Bảng 5.51 Các thành phần của giao diện chia sẻ địa điểm 139
Bảng 5.52 Các thành phần của giao diện Feeds 140
Trang 13Bảng 5.53 Các thành phần của giao diện bình luận 141
Bảng 5.54 Các thành phần của giao diện những người đã thích 142
Bảng 5.55 Các thành phần của giao diện bản đồ địa điểm chia sẻ 143
Bảng 5.56 Các thành phần của giao diện chọn triệu chứng lâm sàng 145
Bảng 5.57 Các thành phần của giao diện chọn triệu chứng lâm sàng 146
Bảng 5.58 Các thành phần của giao diện hướng dẫn sơ cứu tạm thời 147
Trang 14CÁC KÝ HIỆU VÀ VIẾT TẮT xiv
CÁC KÝ HIỆU VÀ VIẾT TẮT
Ký hiệu, viết tắt và
Soft-keyboard Bàn phím ảo trong điện thoại
SD Card Bộ nhớ ngoài hay thẻ nhớ của điện thoại
Android Emulator Thiết bị giả lập điện thoại Android để chạy các ứng dụng
URI
Uniform Resource Identifier Trong Android là đường dẫn chỉ đến các dữ liệu trong hệ thống Android
API Application Programming Interface
KML
Một định dạng file dùng để biểu diễn dữ liệu dạng địa lý cho một trình hiển thị bản đồ trái đất (như Google Earth, Google Maps, Google Maps cho mobile)
LatLng
Lat (latitude) và Lng (longitude) - vĩ độ và kinh độ của một điểm trên bản đồ, được định nghĩa thành một kiểu dữ liệu trong phần cài đặt của nhóm nghiên cứu
Request Yêu cầu được gửi đến máy chủ (dịch vụ web)
Response Kết quả trả về của máy chủ
Parameter Tham số, cụ thể trong tài liệu là các tham số trong Request
Trang 15GIỚI THIỆU ĐỀ TÀI
Khoa học công nghệ hiện nay ngày càng phát triển không ngừng, máy móc ngày càng thông minh và trở nên thân thiết hơn với con người Tiêu biểu nhất là chiếc điện thoại
di động, không dừng lại ở chức năng chủ yếu của nó là nghe và gọi điện, chiếc điện thoại di động hiện nay ngày càng hiện đại và thông minh hơn, giúp ích nhiều hơn cho cuộc sống, cho công việc của con người Để làm được những điều này, ngoài việc được trang bị những phần cứng tinh vi nhất, những chiếc điện thoại di động cần phải được cài đặt những phần mềm, ứng dụng thông minh và hiệu quả nhất mới có thể phục vụ tốt nhất cho nhu cầu của con người Vì vậy, một chiếc điện thoại di động tốt không chỉ là một chiếc điện thoại có cấu hình tốt, mà còn phải được chạy trên một hệ điều hành tốt, hệ điều hành ấy ngoài việc hoạt động ổn định trên cấu hình phần cứng còn phải cung cấp cho các nhà phát triển một giao diện lập trình hiệu quả và thuận lợi nhất, nhằm giúp phát triển những ứng dụng ngày càng thiết thực và gần gũi hơn với con người
Một số hệ điều hành hiện nay như: Windows Phone, iOS… Windows Phone của Microsoft mới phát triển chưa có được cộng đồng đồng đảo, iOS của Apple thì hoàn toàn đóng với người dùng và việc có được môi trường lập trình và phân phối ứng dụng lại mất nhiều chi phí, và lại chỉ có thể chạy trên phần cứng của Apple Chính vì thế, hệ điều hành mobile Android do hãng Google phát triển là một hề điều hành mã nguồn mở trên nền tản Linux, lấy Java làm ngôn ngữ lập trình ứng dụng chủ yếu, tuy
là hệ điều hành còn non trẻ nhưng đã thể hiện một lợi thế mà các hệ điều hành khác không thể nào sánh được Một hệ điều hành có thể tùy biến dễ dàng, chạy được trên rất nhiều nền tản phần cứng, đặc biệt lại cung cấp một bộ công cụ lập trình hoàn toàn miễn phí là Android SDK thì việc phát triển và chiếm lĩnh thị trường là điều hoàn toàn dễ dàng và hiện nay cũng đã trở thành hiện thực
Đối với xã hội như ở nước Việt Nam ta, cuộc sống cũng ngày càng phát triển kéo theo nhu cầu giao thông, đi lại, du lịch của người dân ngày càng cao, đòi hỏi phải xác định rõ ràng thông tin những điểm đến, đường đi sao cho thật hợp lý nhằm tiết kiệm
Trang 16GIỚI THIỆU ĐỀ TÀI xvi
thời gian và giảm chi phí di chuyển Thêm vào đó tính chia sẻ cộng đồng thông qua môi trường internet hiện nay đang dần trở nên phổ biến, vì thế nếu được chia sẻ cho bạn bè những nơi hấp dẫn mình đã đến là một điều đang được nhiều người mong chờ Chiếc điện thoại di động 10 năm trước đối với người dân Việt Nam có thể là một điều
xa xỉ, nhưng hiện nay nó đã trở nên quá gần gũi với hầu hết mọi người, và còn hơn thế đó còn là những chiếc điện thoại hiện đại và thông minh nhất Vì vậy, chiếc điện thoại di động hoàn toàn có thể giải quyết được những vấn đề xã hội nêu trên, điều còn lại là cần có một ứng dụng thông minh để làm được điều đó
Hiểu được các vấn đề cấp thiết đó, nhóm nghiên cứu quyết định chọn đề tài “Tìm hiểu hệ điều hành android, web services và viết ứng dụng” Với ứng dụng minh họa nhóm em thực hiện là “Xây dựng mạng xã hội chia sẻ địa điểm cho android”,
đề tài được giải quyết chủ yếu dựa vào dịch vụ Google Maps, Google Places API, công nghệ RESTful Web Services và các thiết bị sử dụng hệ điều hành Android Kết hợp vào đó là Hệ chuyên gia, giúp mô phỏng, chuẩn đoán đưa ra gợi ý giúp cho người
sử dụng Google Maps là dịch vụ đã phổ biến trên thế giới cũng như ở Việt Nam RESTful Web Services là một công nghệ cung cấp những dịch vụ web nhanh chóng
và hiệu quả nhất Android cũng là hệ điều hành mã nguồn mở của Google và đang chiếm lĩnh thị trường di động, có thể cài đặt trên nhiều thiết bị, có các giao diện lập trình tích hợp với dịch vụ Google Maps Việc kết hợp Google Maps, RESTful Web Services, hệ chuyên gia và hệ điều hành Android hứa hẹn sẽ đem lại một sản phẩm hoàn hảo nhất cho người dùng trong việc tìm kiếm và chia sẻ địa điểm
Nội dung đề tài gồm có 5 chương:
Chương 1: Tổng quan về hệ điều hành mobile Android
Chương 2: Google APIs
Chương 3: RESTful Web Services
Chương 4: Hệ chuyên gia
Chương 5: Chương trình minh họa
Trang 17PHẦN A MỞ ĐẦU
Trang 18Phần Mở Đầu 1
LỜI GIỚI THIỆU
1 Tính cấp thiết của đề tài
Ngày nay, khi khoa học công nghệ ngày càng phát triển, máy móc cũng ngày càng trở nên gần gũi với con người hơn Đặc biệt là chiếc điện thoại di động dường như là vật dụng không thể thiếu đối với mỗi người Không ngừng ở chức năng đơn giản là làm phương tiện liên lạc, chiếc điện thoại di động hiện nay còn là những chiếc điện thoại thông minh, hiện đại và tinh vi, làm được rất nhiều việc khác phục vụ cho nhu cầu công việc cũng như giải trí của con người Để cho một chiếc điện thoại di động
càng thông minh hơn, thì cái quyết định sự thông minh đó chính là hệ điều hành Hệ
điều hành quyết định toàn bộ thành phần giao diện và quản lý tất cả các hoạt động, các ứng dụng chạy trên điện thoại Và đến nay, các hệ điều hành di động ra đời như: Windows Phone, iOS, … đã làm nên rất nhiều điều kỳ diệu trên một chiếc điện thoại
di động Tuy nhiên, trên thị trường hiện nay, hệ điều hành được cài đặt trên số điện thoại di động nhiều nhất không phải là một trong những hệ điều hành trên, mà đó là một cái tên khác – hệ điều hành Android
Tại sao hệ điều hành này lại chiếm được thị phần cao đến như vậy – hơn 80% ? Nó
có những điểm gì hay và đặc biệt hơn? Nó hỗ trợ các nhà phát triển phần mềm đến mức nào?
Bên cạnh đó, mạng xã hội hiện nay đang là một hình thức được rất nhiều người sử dụng trên Internet Tuy nhiên, một mạng xã hội địa điểm chuyên biệt về vấn đề tìm kiếm và chia sẻ các địa điểm giữa những người sử dụng Internet, xét riêng ở Việt Nam tuy đã có nhưng chưa thực sự hiệu quả, thu hút nhiều người sử dụng
Không những thế, thế giới ngày càng phát triển mạnh mẽ với các hoạt động vô cùng
đa dạng và phức tạp đòi hỏi khả năng giải quyết vấn đề ở mức trí tuệ nhân tạo ngày càng cao
Trang 19Lĩnh vực trí tuệ nhân tạo nói chung và hệ chuyên gia nói riêng góp phần tạo ra các hệ thống có khả năng trí tuệ của con người, có được tri thức tiên tiến của hệ chuyên gia
để giải quyết các vấn đề phức tạp trong đời sống
2 Ý nghĩa khoa học thực tiễn
Khóa luận nghiên cứu và thực hiện các vấn đề sau:
Xây dựng cái nhìn tổng quan về hệ điều hành mobile Android, về lịch sử hình thành và phát triển, ưu thế so với các hệ điều hành khác cũng như thị trường hiện nay của Android
Tìm hiểu kiến trúc của hệ điều hành Android, các thành phần của một ứng dụng Android và cách xây dựng một ứng dụng trên Android
Xây dựng cái nhìn tổng quan về RESTful Web Services, cách xây dựng một RESTful Web Services để cung cấp các dịch vụ dựa theo kiểu dữ liệu trao đổi là JSON
Tìm hiểu các dịch vụ về địa điểm và bản đồ do Google cung cấp, cách thức sử dụng các dịch vụ đó
Xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android theo mô hình mạng xã hội địa điểm
Tìm hiểu các phương pháp biểu diễn tri thức, các kĩ thuật suy diễn thường dùng trong hệ chuyên gia Cuối cùng xây dựng một chương trình hệ chuyên gia chuẩn đoán bệnh
3 Mục đích nghiên cứu
Mục đích nghiên cứu khóa luận là:
Tạo một tài liệu tham khảo về android và đồng thởi viết một ứng dụng trên hệ điều hành này
Trang 20Phần Mở Đầu 3
4 Đối tượng và phạm vi nghiên cứu
Do thời gian hạn hẹp và khả năng của nhóm nghiên cứu còn có hạn, cho nên khóa luận chỉ tập trung nghiên cứu sâu một số lĩnh vực sau:
Hệ điều hành Android dành cho mobile, không nghiên cứu Android trên tablet
và các thiết bị khác
Các dịch vụ của Google: Google Maps API, Google Places API, Google Directions API
RESTful Web Services với kiểu dữ liệu trao đổi là JSON
Hệ chuyên gia với các phương pháp suy diễn
Trang 21PHẦN B NỘI DUNG
Trang 22Tổng quan về hệ điều hành mobile Android 5
Chương 1 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH
MOBILE ANDROID
1.1 Lịch sử hệ điều hành mobile Android
Android là một hệ điều hành dành cho thiết bị di động như smartphone, tablet hay netbook được phát triển từ nhân Linux, mang nhiều đặc tính đặc trưng của một hệ điều hành di động nhưng vẫn mang các tính chất chung của các hệ điều hành Là một
hệ điều hành hiện đại, tuy ra đời muộn nhưng lại được phát triển từ Linux và các phần mềm mã nguồn mở, rút kinh nghiệm từ những hệ điều hành đi trước, được tích hợp nhiều công nghệ tiên tiến và đặc biệt là được phát triển từ một “ông trùm công nghệ” tầm cỡ thế giới là Google nên android đã sớm tìm được chỗ đứng của mình Android
là hệ điều hành mã nguồn mở với 12 triệu dòng mã bao gồm 3 triệu dòng mã XML, 2.8 triệu dòng mã C, 2.1 triệu dòng Java và 1.75 triệu dòng C++
Hình 1 1 Giao diện màn hình khóa (android 4.4)
Trang 23Hình 1 2 Giao diện màn hình chính (Android 4.4)
Không giống như Windows Phone và IOS, tuy cả hai đều cung cấp một môi trường phát triển ứng dụng phong phú và dễ tiếp cận nhưng luôn có sự ưu tiên cho các ứng dụng mặc định có sẵn của hệ điều hành (native application) Với Android, mọi ứng dụng đều được viết trên cùng một tập API, thế nên không có sự phân biệt ứng dụng mặc dịnh và các ứng dụng bên thứ ba Người dùng hoàn toàn có thể thay thế mọi ứng dụng mặc định bằng ứng dụng yêu thích của mình, thậm chí cả màn hình cuộc gọi, hay màn hình home đều có thể sửa đổi
Ban đầu nền tảng này được phát triển bởi Android Inc (sau đó được Google mua lại)
và gần đây nó trở thành một trong những phần mềm đứng đầu của liên minh OHA (Open Handset Alliance – với khoảng 78 thành viên bao gồm cả nhà sản xuất, nhà phát triển ứng dụng… cho thiết bị di dộng mà dẫn đầu là Google)
Android được phát triển nhằm cạnh tranh với các hệ điều hành di động khác như iOS
Trang 24Tổng quan về hệ điều hành mobile Android 7
WebOS (Palm),… Tính đến thời điểm này, Android đã trở thành nền tảng di động tăng trưởng nhanh nhất thế giới
Các phiên bản hệ điều hành Android:
Từ lúc ra mắt phiên bản đầu tiên cho tới nay, Android đã có rất nhiều bản nâng cấp
Đa số đều tập trung vào việc vá lỗi và thêm những tính năng mới
Hình 1 3 Các phiên bản hệ điều hành Android
Android những thế hệ đầu tiên 1.0 (9/2008) và 1.1 (2/2009) chưa có tên gọi chính thức Từ thế hệ tiếp theo, mỗi bản nâng cấp đều được đặt với những mã tên riêng dựa
Trang 25theo các món ăn hấp dẫn theo thứ tự bảng chữ cái từ “C-D-E-F-G-H-I” Hiện tại các phiên bản chính của Android bao gồm:
1.5 (Cupcake): Ra mắt tháng 4/2009: Phiên bản này có một số tính năng đáng chú ý như: khả năng ghi lại và xem video thông qua chế độ máy ghi hình, tải video lên YouTube và ảnh lên Picasa trực tiếp từ điện thoại, tích hợp bàn phím
ảo với khả năng đoán trước văn bản, tự động kết nối với một thiết bị Bluetooth trong một khoảng cách nhất định, các widget và thư mục mới có thể cài đặt linh động trên màn hình chủ
1.6 (Donut): Ra mắt tháng 9/2009 Phiên bản này giúp Nâng cao trải nghiệm trên kho ứng dụng Android Market, tích hợp giao diện tùy biến cho phép người dùng xóa nhiều ảnh cùng lúc, nâng cấp Voice Search, nâng cấp khả năng tìm kiếm bookmarks, history, contacts và web trên màn hình chủ, bước đầu hỗ trợ màn hình độ phân giải WVGA
2.0/2.1 (Eclair): Ra mắt tháng 10/2009 Phiên bản này có sự cải thiện rõ rệt trong giao diện người dùng, tối ưu hóa tốc độ phần cứng, hỗ trợ nhiều kích cỡ và độ phân giải màn hình hơn, thay đổi giao diện duyệt web và hỗ trợ chuẩn HTML5, Exchange ActiveSync 2.5, nâng cấp Google Maps 3.1.2, camera zoom kĩ thuật
số tích hợp đèn flash, nâng cấp bàn phím ảo và kết nối Bluetooth 2.1
2.2 (Froyo): Ra mắt tháng 5/2010: Phiên bản này chú trọng nâng cấp tốc độ xử
lí, giới thiệu engine Chrome V8 JavaScript, hỗ trợ Adobe Flash10.1, thêm tính năng tạo điểm truy cập Wi-Fi Một tính năng đáng chú ý khác hỗ trợ chuyển đổi nhanh chóng giữa các ngôn ngữ và từ điển trên bàn phím đồng thời cho phép cài đặt và cập nhật ứng dụng ở các thiết bị mở rộng bộ nhớ Một trong những smartphone đầu tiên chạy phiên bản Android 2.2 Froyo là LG Optimus One
2.3 (Gingerbread): Ra mắt tháng 12/2010: Phiên bản này đã nâng cấp đáng kể giao diện người dùng, cải thiện bàn phím ảo, thêm tính năng copy/paste, hỗ trợ công nghệ giao tiếp tầm sóng ngắn NFC, hỗ trợ chuẩn video WebM và nâng cao tính năng copy–paste Cùng với phiên bản Gingerbread, Google cũng ra mắt điện thoại đầu tiên của hãng sử dụng nền tảng này là Google Nexus S
Trang 26Tổng quan về hệ điều hành mobile Android 9
3.0 (Honeycomb): Ra mắt tháng 2/2011: Đây là phiên bản hệ điều hành dành riêng cho máy tính bảng tablet với giao diện mới tối ưu hóa cho tablet, từ các thao tác đều phụ thuộc màn hình cảm ứng (như lướt web, duyệt mail ) Honeycomb hỗ trợ bộ xử lí đa nhân và xử lý đồ họa đồng thời hỗ trợ nhiều màn hình home khác nhau, cho phép người dùng dễ dàng tùy biến giao diện nếu muốn
4.0 (Ice-cream sandwich): Ra mắt tháng 10/2011, là sự kết hợp giữa Gingerbread và Honeycomb và sẽ chạy trên tất cả các thiết bị như điện thoại, máy tính bảng, máy tính xách tay,… [2]
4.1 (Jelly bean): Ra mắt tháng 6/2012 đây là bản phát hành Android mượt mà, nhanh và đáp ứng cao hơn Cung cấp thêm các chức năng như google now, tìm kiếm bằng giọng nói, thông báo mở rộng, gợi ý từ khi gõ phím, nhận dạng giọng nói ngoại tuyến, kiểm tra chuyển động khi mở khóa bằng khuôn mặt và cung cấp thêm một số tính năng cho nhà phát triển như cập nhật phần mềm thông minh, mã hóa bảo mật các ứng dụng trả tiền
4.4 (Kitkat) : Ra mắt tháng 11/2013, phiên bản này cung cấp thành phần có tên
"Project Svelte", với chức năng chính là tinh chỉnh để tối ưu việc sử dụng bộ nhớ RAM trên Android, các thiết bị Android tầm thấp sẽ được hưởng lợi từ sự tối ưu này Android 4.4 KitKat hỗ trợ các cảm biến chuyển động tốt hơn so với những phiên bản trước đó Ở phiên bản này google cung cấp ba chế độ định vị
để lựa chọn phù hợp với nhu cầu sử dụng, hiện lại thanh trạng thái ở chế độ Immersive, có thể Tắt hiệu ứng để tăng tốc độ, trình chọn tập tin mới, tích hợp gallery vào Google+, quay video màn hình và chức năng Process Stats dành cho lập trình viên
5.0 (Lollipop): Ra mắt tháng 11/2014 phiên bản này được đánh giá có những thay đổi rõ rệt và đáng kể trong lịch sử android Trước tiên là thiết kế “Material” mới giúp các phản hồi nhẹ nhàng nhưng vẫn rõ ràng Ở phiên bản này android được hỗ trợ trên mọi màn hình từ điện thoại, tablet, laptop đến TV, ô tô, đồng
hồ, đồ gia dụng Ngoài ra còn có các tính năng khác như thiết kế báo nhắc hoàn
Trang 27toàn mới, áp dụng điện toán 64 bit, cải thiện thời lượng pin, mở khóa dựa trên bối cảnh và cải thiện tìm kiếm dựa trên bối cảnh
1.2 Máy ảo Dalvik
Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động Android
Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik (dex) Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử lý Dalvik đã được thiết kế và viết bởi Dan Bornstein, người đã đặt tên cho nó sau khi đến thăm một ngôi làng đánh cá nhỏ có tên là Dalvík ở đảo Eyjafjörður, nơi mà một
số tổ tiên của ông sinh sống
Từ góc nhìn của một nhà phát triển, Dalvik trông giống như máy ảo Java (Java Virtual Machine) nhưng thực tế thì hoàn toàn khác Khi nhà phát triển viết một ứng dụng dành cho Android, đoạn mã sẽ được thực hiện trong môi trường Java Sau đó, nó sẽ được biên dịch sang các bytecode của Java, tuy nhiên để thực thi được ứng dụng này trên Android thì nhà phát triển phải thực thi một công cụ có tên là dx Đây là công cụ dùng để chuyển đổi bytecode sang một dạng gọi là dex bytecode "Dex" là từ viết tắt của "Dalvik executable" đóng vai trò như cơ chế ảo thực thi các ứng dụng Android [3]
1.3 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
Trang 28Tổng quan về hệ điều hành mobile Android 11
Hình 1 4 Kiến trúc hệ điều hành Android
1.3.1 Tầng ứng dụng
Là các ứng dụng hoàn chỉnh được người sử dụng trực tiếp sử 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, browser, camera, phone,… Tất cả các ứng dụng chạy trên hệ điều hành Android đều được viết bằng Java
1.3.2 Tầng 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ụ
Trang 29chạ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ụng lại các thành phần; bất kỳ ứng dụng 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
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 strings, graphics, layout files
Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các thông báo (alert) trong thanh trạng thái (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
1.3.3 Library và Android Runtime
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 Android Một số các thư viện cơ bản được liệt kê dưới đây:
Trang 30Tổng quan về hệ điều hành mobile Android 13
System C library: hệ thống thư viện chuẩn C (libc), được điều chỉnh để nhúng vào các thiết bị dựa trên Linux
Media Libraries: các thư viện hỗ trợ phát âm và ghi âm của nhiều định dạng audio và video thông dụng, cũng như các tập tin ảnh tĩnh, bao gồm MPEG4, H.264, MP3, AAC, AMR, JPG và PNG…
Surface Manager – quản lý việc truy xuất vào hệ thống hiển thị
LibWebCore – trình duyệt web của Android
SGL – công cụ đồ họa 2D
3D libraries – thư viện dùng để tạo ra các đồ họa 3D dựa vào chuẩn OpenGLES 1.0 API
FreeType - hỗ trợ xử lý bitmap và font vector
SQLite – mô hình cơ sở dữ liệu gọn nhẹ, dùng để lưu trữ dữ liệu của ứng dụng
Android Runtime:
Phần này chứa các thư viện mà một chương trình viết bằng ngôn ngữ Java có thể hoạt động Phần này có 2 bộ phận tương tự như mô hình chạy Java trên máy tính thường Thứ nhất là các thư viện lõi (Core Library), chứa các lớp như Java IO, Collections, File Access Thứ hai là một máy ảo Java (Dalvik Virtual Machine) Mặc dù cũng được viết từ ngôn ngữ Java nhưng một ứng dụng Java của hệ điều hành Android không được chạy bằng JRE của Sun (JVM) mà là chạy bằng máy ảo Dalvik do Google phát triển
1.3.4 Linnux Kernel
Android dựa trên Linux phiên bản 2.6 cung cấp cho hệ thống các dịch vụ cốt lõi như bảo mật (security), quản lý bộ nhớ (memory management), quản lý tiến trình (process management), giao tiếp với phần cứng (driver model), Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng và phần còn lại của phần mềm
Trang 312) Services
Thành phần chạy ẩn trong Android Service sử dụng để thực hiện những công việc
mà không cần hiển thị xuyên suốt cho người dùng thấy như hẹn giờ, theo dõi các cập nhật của ứng dụng, đưa ra các cảnh báo (Notification)
đó
5) Broadcast Receiver
Thành phần thu nhận các Intent bên ngoài gửi tới Ví dụ: bạn viết 1 chương trình thay thế cho phần gọi điện mặc định của Android, khi đó bạn cần 1 Broadcast Receiver để nhận biết các Intent là các cuộc gọi tới
6) Notification
Đưa ra các cảnh báo mà không làm cho các Activity phải ngừng hoạt động Đây là một kỹ thuật được ưa chuộng để tạo một chú ý người dùng từ bên trong một Service
Trang 32Tổng quan về hệ điều hành mobile Android 15
đang nhận cuộc gọi, chúng sẽ gửi đến họ một tín hiệu bằng đèn, tạo một âm thanh
hoặc hiển thị một biểu tượng nào đó
1.4.2 Vòng đời của ứng dụng Android
Một sự khác thường và là đặc tính cơ bản của Android là thời gian sống của tiến trình ứng dụng không được điều khiển trực tiếp bởi chính nó Thay vào đó, nó được xác định bởi hệ thống qua sự kết hợp của việc theo dõi:
Những phần của ứng dụng mà hệ thống biết là đang chạy
Độ ưu tiên của các thành phần ứng dụng
Ứng dụng chiếm lĩnh bao nhiêu vùng nhớ của hệ thống
Một tiến trình của một ứng dụng Android được tao ra và còn chạy cho đến khi người
sử dụng hủy hoàn toàn hay khi hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ để cung cấp cho các ứng dụng khác có độ ưu tiên cao hơn
Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu khởi tạo và đến thời điểm kết thúc Giữa đó, đôi lúc chúng có thể là active hoặc inactive, hoặc là trong trường hợp activie nó có thể visible hoặc invisible
Hình 1 5 Chu kỳ sống của ứng dụng Android
1.4.3 Chu kỳ của một Activity
Bên trong hệ thống các activity được quản lý như một stack Khi một Activity mới được khởi động, nó được đặt ở đỉnh của stack và trở thành activity đang chạy Activity
Trang 33trước sẽ ở bên dưới activity mới và sẽ không được thấy trong suốt quá trình activity 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 Activity
Hình 1 6 Activity stack
Các trạng thái trong chu kỳ sống của một Activity:
Trang 34Tổng quan về hệ điều hành mobile Android 17
Hình 1 7 Chu kỳ sống của Activity
Một Activity có 3 chu kỳ chính sau:
Active hoặc running: khi Activity đang được chạy và hiển thị 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 đang được tạm dừng, tuy bị khi mất focus do có một Activity
khác với màn hình không che hết Activity bị tạm dừng nằm ở trên, vì thế người dùng vẫn có thể trông thấy nó 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ớ
Trang 35 Stopped: nếu nó hoàn toàn bao phủ bởi Activity khác Nó vẫn còn các 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 [5]
Các phương thức trong chu kỳ sống của một Activity:
Phương thức: onCreate()
- Được gọi khi activity lần đầu tiên được tạo
- Ở đây bạn làm tất cả các cài đặt tĩnh tạo các view, kết nối dữ liệu đến list và v.v…
- Phương thức này gửi qua một đối tượng Bundle chứa đựng từ trạng thái trược
- Được gọi trước khi một activity visible với người dùng
- Theo sau bởi onResume() nếu activity đến trạng thái foreground hoặc onStop()
nế nó trở nên ẩn
Phương thức: onResume()
- Được gọi trước khi activity bắt đầu tương tác với người dùng
- Tại thời điểm này activity ở trên dỉnh của stack activity
- Luôn theo sau bởi onPause()
Phương thức: onPause()
Trang 36Tổng quan về hệ điều hành mobile Android 19
- Được gọi khi hệ thống đang resuming activity khác
- Phương thức này là điển hình việc giữ lại không đổi dữ liệu
- Nó nên được diễn ra một cách nhanh chóng bởi vì activity kế tiếp sẽ không được resumed ngay cho đến khi nó trở lại
- Theo sau bởi onResume nếu activity trở về từ ở trước, hoặc bởi onStop nếu nó
trở nên visible với người dùng
- Trạng thái của activity có thể bị giết bởi hệ thống
Phương thức: onStop()
- Được gọi khi activity không thuộc tầm nhìn của người dùng
- Nó có thể diễn ra bởi vì nó đang bị hủy, hoặc bởi vì activity khác vữa được resumed và bao phủ nó
- Được theo sau bởi onRestart() nếu activity đang đở lại để tương tác với người dùng, hoặc onDestroy() nếu activity đang bỏ
- Trạng thái của activity có thể bị giết bởi hệ thống
Phương thức: onDestroy()
- Được gọi trước khi activity bị hủy
- Đó là lần gọi cuối cùng mà activity này được nhận
- Nó được gọi khác bởi vì activity đang hoàn thành, hoặc bởi vì hệ thống tạm thởi
bị hủy diệt để tiết kiệm vùng nhớ
- Bạn có thể phân biệt giữa 2 kịch bản với phương isFinshing()
1.4.4 Intent
Khái niện Intent:
Intent là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của một Activity
Nó là cầu nối giữa các Activity: ứng dụng Android thường bao gồm nhiều Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc khác nhau
Trang 37Intent chính là người đưa thư, giúp các Activity có thể triệu gọi cũng như truyền các
dữ liệu cần thiết tới một Activity khác Điều này cũng giống như việc di chuyển qua lại giữa các Forms trong lập trình Windows Form
Hình 1 8 Intent
Intent về cơ bản là một cấu trúc dữ liệu, được mô tả trong lớp android.content.Intent
Các thuộc tính của một đối tượng Intent:
Bảng 1 1 Các thuộc tính của đối tượng Intent
Tên thuộc tính Chức năng
action
Tên (string) của action mà Intent sẽ yêu cầu thực hiện
Action có thể do Android định nghĩa sẵn (built-in standard action) hoặc do người lập trình tự định nghĩa
data Dữ liệu mà Activity được gọi sẽ xử lý
catelogy Thông tin về nhóm của action
type Định dạng kiểu dữ liệu (chuẩn MIME), thường được tự
động xác định
component
Chỉ định cụ thể lớp sẽ thực thi Activity Khi được xác định, các thuộc tính khác trở thành không bắt buộc (optional)
extras
Chứa tất cả các cặp (key, value) do ứng dụng thêm vào để truyền qua Intent (theo cấu trúc Bundle)
Trang 38Tổng quan về hệ điều hành mobile Android 21
Các Action được định nghĩa sẵn:
Dưới đây là những hằng String đã được định nghĩa sẵn trong lớp Intent Đi kèm với
nó là các Activity hay Application được xây dựng sẵn sẽ được triệu gọi mỗi khi Intent tương ứng được gửi (tất nhiên khi được cung cấp đúng data)
Ví dụ: Gọi tới một số điện thoại:
Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:123456")); startActivity(dialIntent);
Hình 1 9 Các Action được dựng sẵn
1.4.5 Content Provider và Uri
Trong hệ thống Android tất cả các tài nguyên như Contact, SMS,… đều được lưu trữ vào CSDL SQLite của hệ thống Cũng như các CSDL khác, CSDL mà hệ thống Android sử dụng để lưu trữ thông tin cũng cho phép chúng ta truy vấn dữ liệu như một CSDL thông thường Tuy nhiên, trong hệ thống đó chúng ta không cần phải thao
Trang 39tác bằng lệnh SQL nhiều để truy xuất dữ liệu mà thay vào đó Android đã được trang
bị một API cho phép người lập trình có thể dễ dàng truy xuất dữ liệu Đó gọi là ContentProvider ContentProvider 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 bất cứ dữ liệu lưu trữ nào chỉ cần cung cấp một đường dẫn đúng đến dữ liệu đó Đường dẫn này còn được gọi là Uri
Tạo một Uri:
Uri uri = Uri.parse(“content://com.android.contacts/contacts”);
Cấu trúc gồm có 4 phần chính như sau:
Phần A: Đây là tiền tố chỉ ra dữ liệu được điều khiển bởi Content Provider và
nó không bao giờ thay đổi
Phần B: Phần này chỉ đến nơi lưu trữ dữ liệu Cũng giống như cấu trúc của một số điện thoại thì cái này có thể hình dung nó như là mã quốc gia hoặc cũng
có thể coi nó như là tên của CSDL
Phần C: phần này chỉ ra loại dữ liệu Chẳng hạn như, dữ liệu contact, dữ liệu SMS, … Phần này có thể coi nó như là tên của một table
Phần D: phần này chỉ đến đúng vị trí của dữ liệu, có thể coi phần này như là
ID của row trong table hoặc một dữ liệu nào đó dùng để truy vấn
Ví dụ: Uri chỉ đến contact thứ 0 trong CSDL là: content://contacts/people/0
Để có thể thực hiện truy vấn đến vùng dữ liệu được chỉ ra bởi một Uri ta cần có 2 đối tượng con trỏ được cung cấp bởi Activity đó là: Cursor và ContentResolver
Trang 40Tổng quan về hệ điều hành mobile Android 23
Để lấy được 2 đối tượng này thì trong Activity sử dụng hàm
getContentResolver(); - trả về đối tượng ContentResolver
getContentResolver().query(Uri uri); - trả về đối tượng Cursor
Một Service có thể được sử dụng theo 2 cách:
Nó có thể được bắt đầu và được cho phép hoạt động cho đến khi một người nào đó dừng nó lại hoặc nó tự ngắt Ở chế độ này, nó được bắt đầu bằng cách gọi Context.startService() và dừng bằng lệnh Context.stopService() Nó có thể
tự ngắt bằng lệnh Service.stopSelf() hoặc Service.stopSelfResult() Chỉ cần một lệnh stopService() để ngừng Service lại cho dù lệnh startService() được gọi ra bao nhiêu lần
Service có thể được vận hành bằng việc sử dụng một Interface mà nó định nghĩa Người dùng thiết lập một đường truyền tới đối tượng Service và sử dụng đường kết nối đó để thâm nhập vào Service Kết nối này được thiết lập bằng cách gọi lệnh Context.bindService() và được đóng lại bằng cách gọi lệnh Context.unbindService() Nhiều người dùng có thể kết nối tới cùng một Service Nếu Service vẫn chưa được khởi chạy, lệnh bindService() có thể tùy
ý khởi chạy nó
Hai chế độ này không tách biệt hoàn toàn, có thể kết nối với một Service mà nó đã được bắt đầu với lệnh startService() Ví dụ, một Service nghe nhạc ở chế độ nền có thể được bắt đầu bằng cách gọi lệnh startService() cùng với một đối tượng Intent mà