Upload
dao-nguyen
View
390
Download
7
Embed Size (px)
Citation preview
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN i
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
NHẬ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)
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ii
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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)
LỜI CẢM ƠN iii
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
LỜ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 tiểu 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, tháng 01 năm 2012
Nhóm sinh viên thực hiện
Huỳnh Công Danh
Phạm Quốc Hùng
MỤC LỤC iv
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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
MỤC LỤC HÌNH ẢNH ......................................................................................... vii
MỤC LỤC BẢNG ..................................................................................................... x
CÁC KÝ HIỆU VÀ VIẾT TẮT ............................................................................ xii
GIỚI THIỆU ĐỀ TÀI ........................................................................................... xiii
Phần A MỞ ĐẦU ...................................................................................................... 1
1. THÁCH THỨC NGHIÊN CỨU ....................................................................... 2
2. MỤC ĐÍCH NGHIÊN CỨU .............................................................................. 4
3. ĐỐI TƯỢNG NGHIÊN CỨU ........................................................................... 5
4. PHẠM VI NGHIÊN CỨU ................................................................................. 5
Phần B NỘI DUNG ................................................................................................... 6
Chương 1. TỔNG QUAN VỀ HỆ ĐIỀU HÀNH MOBILE ANDROID .............. 7
1.1. Lịch sử hệ điều hành mobile Android ......................................................... 7
1.2. Máy ảo Dalvik ............................................................................................. 9
1.3. Kiến trúc của Android ............................................................................... 10
1.3.1. Tầng ứng dụng ...................................................................................... 10
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 .................................................................................... 13
1.4.1. Các thành phần của ứng dụng Android ................................................ 13
1.4.2. Vòng đời của ứng dụng Android .......................................................... 14
1.4.3. Chu kỳ của một Activity ....................................................................... 15
1.4.4. Intent ..................................................................................................... 17
1.4.5. Content Provider và Uri ........................................................................ 19
MỤC LỤC v
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1.4.6. Background Service .............................................................................. 21
1.5. Android Emulator ...................................................................................... 23
1.6. Các thành phần giao diện trong Android .................................................. 24
1.6.1. View ...................................................................................................... 24
1.6.2. ViewGroup ............................................................................................ 24
1.7. SQLITE ..................................................................................................... 28
Chương 2. GOOGLE APIs ..................................................................................... 29
2.1. Google Maps API ...................................................................................... 29
2.1.1. Giới thiệu .............................................................................................. 29
2.1.2. Sử dụng Google Maps API trên Android ............................................. 30
2.2. JavaScript Object Notation (JSON) .......................................................... 35
2.2.1. JSON là gì? ........................................................................................... 35
2.2.2. Cấu trúc của JSON ................................................................................ 35
2.3. Google Places Autocomplete API ............................................................. 39
2.3.1. Giới thiệu .............................................................................................. 39
2.3.2. Sử dụng ................................................................................................. 40
2.3.3. Request .................................................................................................. 40
2.3.4. Response ............................................................................................... 41
2.4. Google Places API .................................................................................... 42
2.4.1. Giới thiệu .............................................................................................. 42
2.4.2. Sử dụng ................................................................................................. 42
2.4.3. Place Searches ....................................................................................... 43
2.4.4. Place Details ......................................................................................... 46
2.5. Google Directions API .............................................................................. 48
2.5.1. Giới thiệu .............................................................................................. 48
2.5.2. Direction Request ................................................................................. 48
2.5.3. Direction Response ............................................................................... 49
Chương 3. RESTFUL WEB SERVICES .............................................................. 55
3.1. Định nghĩa REST ...................................................................................... 55
3.2. Kiến trúc dịch vụ web RESTful ................................................................ 56
MỤC LỤC vi
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
3.2.1. Tài nguyên ............................................................................................ 56
3.2.2. Bộ định danh tài nguyên đồng bộ - URI ............................................... 57
3.2.3. Đồng bộ giao diện thông qua yêu cầu HTTP ....................................... 58
Chương 4. CHƯƠNG TRÌNH MINH HỌA ......................................................... 64
4.1. QuickPlaces RESTful Web Services ........................................................ 64
4.1.1. Giới thiệu .............................................................................................. 64
4.1.2. Tài nguyên ............................................................................................ 64
4.1.3. Dịch vụ .................................................................................................. 65
4.1.4. Thiết kế dữ liệu ..................................................................................... 78
4.2. Ứng dụng tìm kiếm và chia sẻ địa điểm trên Android – Place360 ........... 81
4.2.1. Giới thiệu .............................................................................................. 81
4.2.2. Chức năng ............................................................................................. 83
4.2.3. Sơ đồ lớp ............................................................................................... 92
4.2.4. Thiết kế dữ liệu ..................................................................................... 95
4.2.5. Thiết kế giao diện ................................................................................. 96
4.2.6. Cấu hình cài đặt .................................................................................. 117
Phần C KẾT LUẬN .............................................................................................. 118
1. Kết quả đạt được ............................................................................................ 119
2. Hướng phát triển ............................................................................................ 121
Phần D PHỤ LỤC ................................................................................................. 123
1. TÀI LIỆU THAM KHẢO ............................................................................. 124
2. HƯỚNG DẪN CÀI ĐẶT ............................................................................... 125
MỤC LỤC HÌNH ẢNH vii
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
MỤC LỤC HÌNH ẢNH
Chương 1
Hình 1. 1 Các phiên bản hệ điều hành Android .................................................................... 8
Hình 1. 2 Kiếm trúc hệ điều hành Android .......................................................................... 10
Hình 1. 3 Chu kỳ sống của ứng dụng Android ..................................................................... 14
Hình 1. 4 Activity stack ........................................................................................................ 15
Hình 1. 5 Chu kỳ sống của Activity ...................................................................................... 15
Hình 1. 6 Intent .................................................................................................................... 18
Hình 1. 7 Các Action được dựng sẵn ................................................................................... 19
Hình 1. 8 Chu trình sống của một Service ........................................................................... 22
Hình 1. 9 Emulator .............................................................................................................. 23
Hình 1. 10 Các thành phần giao diện .................................................................................. 24
Hình 1. 11 Bố trí các widget sử dụng LinearLayout ........................................................... 25
Hình 1. 12 FrameLayout ...................................................................................................... 25
Hình 1. 13 RelativeLayout ................................................................................................... 26
Hình 1. 14 TableLayout ....................................................................................................... 27
Hình 1. 15 ListView ............................................................................................................. 28
Chương 2
Hình 2. 1 Cài đặt Google APIs trên Eclipse ........................................................................ 31
Hình 2. 2 Tạo project cho ứng dụng Google APIs .............................................................. 31
Hình 2. 3 Đường dẫn đến file debug.keystore ..................................................................... 32
Hình 2. 4 Đăng ký Google Maps APIs ................................................................................. 33
Hình 2. 5 Object trong JSON ............................................................................................... 36
Hình 2. 6 Array trong JSON ................................................................................................ 36
Hình 2. 7 Value trong JSON ................................................................................................ 37
Hình 2. 8 String trong JSON ................................................................................................ 38
Hình 2. 9 Number trong JSON ............................................................................................. 38
Hình 2. 10 Bản đồ minh họa Google Direction ................................................................... 50
Hình 2. 11 Hiển thị dữ liệu JSON dạng cây của Google Direction API ............................. 51
MỤC LỤC HÌNH ẢNH viii
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Chương 3
Hình 3. 1 Lược đồ tuần tự của một yêu cầu GET ................................................................ 60
Hình 3. 2 Lược đồ tuần tự của một yêu cầu POST .............................................................. 61
Hình 3. 3 Lược đồ tuần tự của một yêu cầu PUT ................................................................ 62
Hình 3. 4 Lược đồ tuần tự của một yêu cầu DELETE ......................................................... 63
Chương 4
Hình 4. 1 Sơ đồ Use-case Dịch vụ người dùng .................................................................... 65
Hình 4. 2Sơ đồ Use-case Dịch vụ địa điểm ......................................................................... 70
Hình 4. 3 Sơ đồ Use-case Dịch vụ bình luận ....................................................................... 73
Hình 4. 4 Sơ đồ Use-case Dịch vụ thông báo ...................................................................... 75
Hình 4. 5 Sơ đồ Use-case Dịch vụ bạn bè ........................................................................... 76
Hình 4. 6 Sơ đồ dữ liệu Web Services .................................................................................. 78
Hình 4. 7 Sơ đồ Use-case ứng dụng tìm kiếm và chia sẻ địa điểm trên Android ................ 83
Hình 4. 8 Sơ đồ lớp phần liên lạc với Server ....................................................................... 92
Hình 4. 9 Sơ đồ lớp các danh sách ...................................................................................... 93
Hình 4. 10 Sơ độc lớp phần truy xuất Database .................................................................. 94
Hình 4. 11 Thiết kế dữ liệu - Sơ đồ Logic ............................................................................ 95
Hình 4. 12 Giao diện chính .................................................................................................. 96
Hình 4. 13 Giao diện tìm kiếm địa điểm .............................................................................. 97
Hình 4. 14 Giao diện quản lý từ khóa tìm kiếm ................................................................... 98
Hình 4. 15 Giao diện tìm và thay đổi vị trí hiện tại ............................................................. 99
Hình 4. 16 Nhập từ khóa tìm kiếm ..................................................................................... 100
Hình 4. 17 Giao diện kết quả tìm kiếm .............................................................................. 101
Hình 4. 18 Chi tiết địa điểm ............................................................................................... 102
Hình 4. 19 Giao diện bản đồ kết quả tìm kiếm .................................................................. 103
Hình 4. 20 Giao diện dẫn đường ....................................................................................... 104
Hình 4. 21 Giao diện Favourite ......................................................................................... 105
Hình 4. 22 Giao diện tùy chỉnh tìm kiếm ........................................................................... 106
Hình 4. 23 Giao diện đăng ký ............................................................................................ 107
Hình 4. 24 Giao diện đăng nhập ........................................................................................ 108
MỤC LỤC HÌNH ẢNH ix
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Hình 4. 25 Thông tin cá nhân ............................................................................................ 109
Hình 4. 26 Chỉnh sửa thông tin cá nhân ............................................................................ 110
Hình 4. 27 Chia sẻ địa điểm .............................................................................................. 111
Hình 4. 28 Danh sách các địa điểm được chia sẻ ............................................................. 112
Hình 4. 29 Giao diện bình luận ......................................................................................... 113
Hình 4. 30 Những người thích một địa điểm ..................................................................... 114
Hình 4. 31 Bản đồ các địa điểm được chia sẻ ................................................................... 115
Hình 4. 32 Danh sách bạn bè ............................................................................................ 116
MỤC LỤC BẢNG x
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
MỤC LỤC BẢNG
Bảng 1. 1 Các thuộc tính của đối tượng Intent .................................................................... 18
Bảng 2. 1 Đường dẫn file debug.keystore trên các hệ điều hành ........................................ 32
Bảng 2. 2 Các kiểu dữ liệu trong JSON ............................................................................... 39
Bảng 2. 3 Response của Place Search ................................................................................. 45
Bảng 2. 4 Response của Place Details ................................................................................ 47
Bảng 2. 5 Các tham số trong Google Directions API request ............................................. 48
Bảng 2. 6 Các thuộc tính trong root của Directions Response ........................................... 51
Bảng 2. 7 Các thuộc tính trong routes của Directions Response ........................................ 52
Bảng 2. 8 Các thuộc tính trong legs của Directions Response ............................................ 53
Bảng 2. 9 Các thuộc tính trong steps của Directions Response .......................................... 53
Bảng 3. 1 Các hành động CRUD và phương thức HTTP tương ứng .................................. 59
Bảng 4. 1 Các tham số trong request của dịch vụ Đăng ký ................................................. 66
Bảng 4. 2 Các tham số trong request của dịch vụ Đăng nhập ............................................ 66
Bảng 4. 3 Các tham số trong request của dịch vụ Đăng xuất ............................................. 67
Bảng 4. 4 Các tham số trong request của dịch vụ Lấy thông tin cá nhân ........................... 67
Bảng 4. 5 Các tham số trong request của dịch vụ cập nhật thông tin cá nhân ................... 68
Bảng 4. 6 Các tham số trong request của dịch vụ Like ....................................................... 68
Bảng 4. 7 Các tham số trong request của dịch vụ Unlike ................................................... 69
Bảng 4. 8 Các tham số trong request của dịch vụ lấy danh sách bạn bè ............................ 69
Bảng 4. 9 Các tham số trong request của dịch vụ Feeds ..................................................... 70
Bảng 4. 10 Các tham số trong request của dịch vụ Thông tin địa điểm .............................. 71
Bảng 4. 11 Các tham số trong request của dịch vụ chia sẻ địa điểm .................................. 71
Bảng 4. 12 Các tham số trong request của dịch vụ Xóa địa điểm ...................................... 72
Bảng 4. 13 Các tham số trong request của dịch vụ Danh sách người thích ....................... 72
Bảng 4. 14 Các tham số trong request của dịch vụ Lấy danh sách bình luận .................... 73
Bảng 4. 15 Các tham số trong request của dịch vụ Bình luận ............................................ 74
Bảng 4. 16 Các tham số trong request của dịch vụ Xóa bình luận ..................................... 74
Bảng 4. 17 Các tham số trong request của dịch vụ nhận thông báo ................................... 75
Bảng 4. 18 Các tham số trong request của dịch vụ cập nhật thông báo ............................ 76
Bảng 4. 19 Các tham số trong request của dịch vụ kết bạn ............................................... 77
MỤC LỤC BẢNG xi
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 20 Các tham số trong request của dịch vụ trả lời yêu cầu kết bạn ....................... 77
Bảng 4. 21 Các tham số trong request của dịch vụ Unfriend ............................................. 78
Bảng 4. 22 Bảng User ......................................................................................................... 79
Bảng 4. 23 Bảng Place ........................................................................................................ 79
Bảng 4. 24 Bảng Comment .................................................................................................. 80
Bảng 4. 25 Bảng Likes ........................................................................................................ 80
Bảng 4. 26 Bảng Notification .............................................................................................. 80
Bảng 4. 27 Bảng Friends .................................................................................................... 81
Bảng 4. 28 Bảng Photo ....................................................................................................... 81
Bảng 4. 29 Danh sách các chức năng của ứng dụng Place360 .......................................... 84
Bảng 4. 30 Bảng Catalog ..................................................................................................... 95
Bảng 4. 31 Bảng Favourite .................................................................................................. 95
Bảng 4. 32 Các thành phần trên giao diện chính ................................................................ 96
Bảng 4. 33 Các thành phần trên giao diện tìm kiếm địa điểm ............................................ 97
Bảng 4. 34 Các thành phần trên giao diện quản lý từ khóa tìm kiếm ................................. 99
Bảng 4. 35 Các thành phần trên giao diện thay đổi vị trí hiện tại .................................... 100
Bảng 4. 36 Các thành phần trên giao diện tìm kiếm nhanh .............................................. 100
Bảng 4. 37 Các thành phần trên giao diện kết quả tìm kiếm ............................................. 101
Bảng 4. 38 Các thành phần trên giao diện chi tiết địa điểm ............................................. 102
Bảng 4. 39 Các thành phần trên giao diện chi tiết địa điểm ............................................. 103
Bảng 4. 40 Các thành phần của giao diện dẫn đường ...................................................... 105
Bảng 4. 41 Các thành phần của giao diện favourite ......................................................... 106
Bảng 4. 42 Các thành phần của giao diện tùy chỉnh tìm kiếm .......................................... 106
Bảng 4. 43 Các thành phần của giao diện đăng ký ........................................................... 107
Bảng 4. 44 Các thành phần của giao diện đăng nhập ....................................................... 108
Bảng 4. 45 Các thành phần của giao diện Thông tin cá nhân ......................................... 109
Bảng 4. 46 Các thành phần của giao diện chỉnh sửa thông tin cá nhân .......................... 110
Bảng 4. 47 Các thành phần của giao diện chia sẻ địa điểm ............................................. 111
Bảng 4. 48 Các thành phần của giao diện Feeds ............................................................ 112
Bảng 4. 49 Các thành phần của giao diện bình luận ....................................................... 114
Bảng 4. 50 Các thành phần của giao diện những người đã thích .................................... 115
Bảng 4. 51 Các thành phần của giao diện bản đồ địa điểm chia sẻ ................................. 116
CÁC KÝ HIỆU VÀ VIẾT TẮT xii
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
CÁC KÝ HIỆU VÀ VIẾT TẮT
Ký hiệu, viết tắt và
thuật ngữ Giải nghĩa
SDK Software Development Kit
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
VM Visual Machine (Máy ảo)
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
API Key
Mã khóa mà Google cung cấp cho người dùng muốn sử
dụng các dịch vụ web của họ, để có được mã khóa này phải
đăng ký trên trang Google APIs Console.
GIỚI THIỆU ĐỀ TÀI xiii
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
GIỚ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ư: Symbian, Windows Mobile, iOS… tuy đã có
lịch sử ra đời lâu nhưng vẫn chưa là những hệ điều hành hỗ trợ tốt nhất cho các nhà
phát triển. Symbian với việc cấu hình để lập trình khó khăn và phải dùng ngôn ngữ
C/C++ rất không thuận tiện, Windows Mobile của Microsoft hoàn toàn đóng với
người dùng, iOS của Apple thì 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 trướ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.
GIỚI THIỆU ĐỀ TÀI xiv
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Đố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 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 và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android”. Đề tài
được giải quyết chủ yếu dựa vào dịch vụ Google Maps, công nghệ RESTful Web
Services và các thiết bị sử dụng hệ điều hành Android. 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 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ó 4 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: Chương trình minh họa
Phần Mở Đầu 2
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1. THÁCH THỨC NGHIÊN CỨU
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 sớm như: Symbian, 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 lâu đời trên, mà đó là một cái tên khác, một người em sinh sau
đẻ muộn – hệ điều hành Android.
Tại sao một hệ điều hành non trẻ lại chiếm được thi phần cao đến như vậy? 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ảo sát hiện trạng về mạng xã hội địa điểm:
Hiện nay trên thế giới, mô hình mạng xã hội dựa trên địa điểm (location based
social networking) không mới. Foursquare có thể xem là hình mẫu thành công đầu
tiên của hình thức mạng xã hội này. Foursquare do Dennis Crowley và Naveen
Selvadurai phát triển từ năm 2009, đến năm 2010, sản phẩm này đã có sự phát triển
Phần Mở Đầu 3
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
ngoạn mục và cũng được cộng đồng mạng Việt Nam đón nhận. Tuy nhiên, mạng xã
hội này thiên về tính location-based (định vị trên điện thoại di động) và mang tính
chất giải trí hơn là tính kết nối. Mạng xã hội này giống như một trò chơi khi mà
người chơi mải mê “check in” càng nhiều địa điểm ở nhiều nơi để giành về những
danh hiệu, huân chương ảo để thể hiện “thương hiệu cá nhân”. Trong khi đó, sự kết
nối có giá trị thật của những người dùng, những chia sẻ mà họ muốn dành cho nhau
lại không được thể hiện rõ ràng. Thêm vào đó, việc phải cung cấp quá nhiều thông
tin cá nhân khi gia nhập mạng xã hội này khiến cho nhiều người dùng lo ngại những
thông tin của họ sẽ khai thác cho các hoạt động tiếp thị. [1]
Ở Việt Nam, mạng xã hội bản đồ được nhắc đến lần đầu tiên khoảng đầu năm 2009,
khi ứng dụng KunKun của hai sinh viên khoa Công nghệ thông tin, đại học Bách
Khoa TP.HCM giành giải nhất cuộc thi Mùa hè sáng tạo (tháng 3/2009) và được
Viettel đầu tư phát triển. Tuy nhiên cho đến nay, sau gần 3 năm triển khai và hoạt
động, mạng xã hội Kunkun vẫn chưa có sự nổi trội, số lượng người dùng ít ỏi và bị
giới hạn chỉ những thuê bao của Viettel mới có thể sử dụng. Hiện tại mạng xã hội
này cũng đã có trên Android, tuy nhiên với giao diện chưa được bắt mắt và các chức
năng chưa thật sự tiện lợi cho người sử dụng như: bản đồ chỉ giới hạn ở lãnh thổ
Việt Nam, không hiển thị được nhiều địa điểm được chia sẻ một lúc trên bản đồ.. Vì
vậy, hiện nay KunKun vẫn chưa gây được sự chú ý trên thị trường mạng xã hội địa
điểm ở Việt Nam.
Ngoài ra, hai mạng xã hội dựa trên địa điểm khác có xuất xứ “nội địa” là
goLocation của mạng xã hội Goolnline.vn và Yoo! (yoo.vn) do Công ty Cổ phần
Công nghệ trẻ (NES) phát triển. Tuy nhiên, goLocation chỉ có phiên bản trên Web,
khiến cho việc chia sẻ và cập nhật địa điểm ngay lập tức khi người dùng đang ở
ngoài trời khó thực hiện được, vấn đề xác định chính xác vị trí cũng khó khăn khi
không thể sử dụng GPS. Còn đối với Yoo!, sau một thời gian ngắn triển khai thì nay
trang web Yoo.vn cũng không còn tồn tại.
Phần Mở Đầu 4
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Các mạng xã hội truyền thống cũng đã và đang dần tích hợp tính năng địa điểm
trong mạng xã hội sẵn có của họ. Đó chính là hai mạng xã hội lớn nhất hiện nay:
Facebook và Google+. Facebook đã phát triển Facebook Places cho phép người
dùng đính kèm thông tin về địa điểm khi họ cập nhật trạng thái của mình và “Check
in” những địa điểm mà họ lui tới. Google+ cũng phát triển tính năng tương tự. Tuy
nhiên, đây cũng chỉ là những sự tích hợp (plugin) vào một mạng xã hội truyền
thống chứ không phải là một mạng xã hội địa điểm chuyên biệt, nơi mà những
người tham gia không phải lạc vào mê cung của vô số những chức năng: trạng thái,
mối quan hệ, game,.. mà là tìm thấy sự đơn giản, nhanh chóng và thuận tiện khi
muốn tìm kiếm một địa điểm hoặc chia sẻ một địa điểm với bạn bè của họ.
Chính vì vậy, đây là những tiền đề thôi thúc nhóm nghiên cứu đặt ra nhiệm vụ là
phải tìm hiểu hệ điều hành mobile Android và xây dựng một ứng dụng mạng xã hội
địa điểm trên Android một cách có hiệu quả nhất.
2. MỤC ĐÍCH NGHIÊN CỨU
Luận vă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.
Phần Mở Đầu 5
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
3. ĐỐI TƯỢNG NGHIÊN CỨU
Đối tượng nghiên cứu của luận văn là:
Nghiên cứu hệ điều hành Android dành cho mobile và ứng dụng chạy trên hệ
điều hành Android.
Các dịch vụ của Google: Google Maps API, Google Places API, Google
Directions API.
Web Services được sử dụng phổ biến nhất hiện nay: RESTful.
4. PHẠM VI NGHIÊN CỨU
Do thời gian hạn hep và khả năng của nhóm nghiên cứu còn có hạn, cho nên luận
vă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 (phiên bản từ 2.3 trở xuống), 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.
Phần Nội Dung 6
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Phần B
NỘI DUNG
Tổng quan về hệ điều hành mobile Android 7
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Chương 1. TỔNG QUAN VỀ HỆ ĐIỀU HÀNH MOBILE ANDROID
Chương này giới thiệu tổng quan về hệ điều hành Android, về lịch sử, kiến trúc và
các thành phần cốt lõi của Android, chu kỳ sống của ứng dụng Android, cơ chế
truyền thông điệp giữa các thành phần của một ứng dụng và giữa các ứng dụng với
nhau (Intent), Background service, các thành phần của giao diện và quản lý cơ sở
dữ liệu (SQLite).
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. Android do Google phát triển dựa trên nền tảng Linux kernel và các phần
mềm mã nguồn mở.
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++.
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 (Apple), BlackBerry OS (RIM), Windows Mobile (Microsoft), Symbian
(Nokia), Samsung (Bada), 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.
Tổng quan về hệ điều hành mobile Android 8
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Hình 1. 1 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 theo 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.
Tổng quan về hệ điều hành mobile Android 9
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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.
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]
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ổng quan về hệ điều hành mobile Android 10
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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.
Hình 1. 2 Kiếm 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,
Tổng quan về hệ điều hành mobile Android 11
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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ụ
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ụ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.
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 dùng để thiết
kế phần 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 là 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 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.
Tổng quan về hệ điều hành mobile Android 12
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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:
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.
Tổng quan về hệ điều hành mobile Android 13
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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.
1.4. Ứng dụng Android
1.4.1. Các thành phần của ứng dụng Android
Các thành phần chính của một ứng dụng Android gồm:
1) Activity
Hiểu một cách đơn giản thì Activity là một màn hình của 1 ứng dụng. Mỗi một
màn hình là một lớp mở rộng của lớp Activity. Khi khởi động 1 ứng dụng
Android nào đó thì bao giờ cũng có một main Activity được gọi, hiển thị màn
hình giao diện chính của ứng dụng cho phép người dùng tương tác và từ đó mở
ra các màn hình khác.
2) 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).
3) Content Provider
Kho dữ liệu chia sẻ. Content Provider được sử dụng để quản lý và chia sẻ dữ liệu
giữa các ứng dụng.
4) Intent
Nền tảng để truyền tải các thông báo. Intent được sử dụng để gửi các thông báo
đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc bạn mong muốn.
Ví dụ: khi mở 1 trang web, bạn gửi 1 intent đi để tạo 1 activity mới hiển thị trang
web đó.
5) Broadcast Receiver
Tổng quan về hệ điều hành mobile Android 14
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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 hoặc một Broadcast Receiver. Ví dụ khi người dùng đang nhận một tin
nhắn hoặc đ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. 3 Chu kỳ sống của ứng dụng Android
Tổng quan về hệ điều hành mobile Android 15
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên 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 trướ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. 4 Activity stack
Các trạng thái trong chu kỳ sống của một Activity:
Hình 1. 5 Chu kỳ sống của Activity
Tổng quan về hệ điều hành mobile Android 16
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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ớ.
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. [3]
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ượngBundle chứa đựng từ trạng thái trược
của Activity.
- Luôn theo sau bởi onStart() .
Phương thức: onRestart()
- Được gọi sau khi activity đã được dừng, chỉ một khoảng đang khởi động lần
nữa (stared again).
- Luôn theo sau bởi onStart().
Phương thức: onStart()
- Đượ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()
Tổng quan về hệ điều hành mobile Android 17
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
- Đượ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()
- Đượ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.
Tổng quan về hệ điều hành mobile Android 18
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Intent 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. 6 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).
Tổng quan về hệ điều hành mobile Android 19
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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. 7 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 tá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
Tổng quan về hệ điều hành mobile Android 20
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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.
Để 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.
Tổng quan về hệ điều hành mobile Android 21
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1.4.6. Background Service
Service là một trong 4 thành phần chính trong một ứng dụng Android (Activity,
Service, BroadcastReceiver, ContentProvider) thành phần này chạy trong hậu
trường và làm những công việc không cần tới giao diện như chơi nhạc, download,
xử lí tính toán,…
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à
định dạng được âm nhạc để chơi. Chỉ sau đó, có thể là khi người sử dụng muốn
kiểm soát trình chơi nhạc hoặc biết thêm thông tin về bài hát hiện tại đang chơi, thì
sẽ có một Activity tạo lập một đường truyền tới Service bằng cách gọi
bindService(). Trong trường hợp như thế này, stopService() sẽ không thực sự ngừng
Service cho đến khi liên kết cuối cùng được đóng lại.
Tổng quan về hệ điều hành mobile Android 22
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Giống như một Activity, một Service cũng có các phương thức chu kỳ sống mà ta
có thể cài đặt để kiểm soát những sự thay đổi trong trạng thái của nó. Service chỉ có
3 phương thức được gọi đến trong chu trình sống là:
void onCreate()
void onStart(Intent intent)
void onDestroy()
Các phương thức kết nối và hủy kết nối đến một Service:
IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)
Hình 1. 8 Chu trình sống của một Service
Tổng quan về hệ điều hành mobile Android 23
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1.5. Android Emulator
Android SDK và Plugin Eclipse được gọi là một Android Deverloper Tool (ADT).
Các lập trình viên Android 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 lập trình viên 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 (http://bellard.org/qemu/) được phát triển bởi
Fabrice Bellard.
Hình 1. 9 Emulator
Tổng quan về hệ điều hành mobile Android 24
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1.6. Các thành phần giao diện trong Android
1.6.1. View
View là lớp thành phần giao diện cơ bản nhất của Android. Nó định nghĩa những
thuộc tính và phương thức cơ bản nhất cần có cho một thành phần giao diện trên
Android. Các thành phần giao diện khác đều được mở rộng từ View, tạo nên nhiều
kiểu View và ViewGroup gọi chung là các Widget. Trong đó, hầu hết các
ViewGroup đều là các Layout dùng để chứa đựng, sắp xếp những thành phần giao
diện khác bên trong nó.
Hình 1. 10 Các thành phần giao diện
Một màn hình giao diện trên Android bắt buộc phải được thiết kế bao bọc bên ngoài
bằng một Layout, các thành phần khác đều được sắp xếp có thứ tự hoặc có vị trí phụ
thuộc nhau trong Layout này. Việc thiết kế giao diện có thể dược tiến hành bằng các
thẻ trên một tập tin XML hoặc có thể thiết kế bằng mã code Java.
1.6.2. ViewGroup
ViewGroup được mở rộng từ lớp View, ngoài ListView thì còn lại hầu hết các
ViewGroup đều là các Layout để chứa đựng các Layout hay các View khác. Một số
Layout được sử dụng phổ biến như: LinearLayout, FrameLayout, AbsoluteLayout,
RelativeLayout, TableLayout.
Tổng quan về hệ điều hành mobile Android 25
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1.6.2.1. LinearLayout
LinearLayout dùng để sắp xếp các thành phần con bên trong nó theo một thứ tự
chiều ngang hay chiều dọc nhất định. 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 mà chủ yếu phụ thuộc vào các
thành phần khác và Layout chứa nó.
Hình 1. 11 Bố trí các widget sử dụng LinearLayout
1.6.2.2. FrameLayout
FrameLayout bố trí các thành phần bên trong nó theo từng lớp xếp chồng lên nhau.
Đối tượng nằm bên trên sẽ che khuất đối tượng nằm bên dưới. Vì thế FrameLayout
hay được dùng để thiết kế các giao diện có phần nền và các đối tượng khác nhỏ hơn
nằm bên trên như bản đồ, khung hiển thị ảnh,…
Hình 1. 12 FrameLayout
Tổng quan về hệ điều hành mobile Android 26
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1.6.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 toạ độ x, y. Tuy nhiên Layout này ít được khuyến khích sử dụng
bởi vì có nhiều loại màn hình với kích thước, độ phân giải khác nhau nên nếu các
thành phần giao diện không có sự ràng buộc tương đối, tỉ lệ khoảng các với nhau sẽ
không được hiển thị như ý muốn trên các màn hình khác nhau.
1.6.2.4. RelativeLayout
RelativeLayout bố trí các Widget bên trong nó bằng cách định nghĩa sự ràng buộc
giữa các Widget và giữa các Widget với RelativeLayout chứa đựng chúng. Các vị
trí được bố trí theo một trục đối xứng ngang hoặc dọc dựa vào các tham số: Top,
Left, Right và Bottom. 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 màn hình. 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, đẩy nhanh
tốc độ của ứng dụng.
Hình 1. 13 RelativeLayout
Tổng quan về hệ điều hành mobile Android 27
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1.6.2.5. TableLayout
TableLayout thiết kế một bảng dạng lưới với số dòng, số cột nhất định được định
nghĩa bằng các TableRow và TableColunm. TableLayout thường được dùng để thiết
kế các giao diện bao gồm một danh sách các thành phần nhưng cố định, chẳng hạn
như, giao diện của một chiếc máy tính đơn giản hoặc một danh sách dữ liệu có
nhiều cột.
Hình 1. 14 TableLayout
1.6.2.6. ListView
ListView thể hiện một danh sách các thông tin theo từng dòng, mỗi dòng có thể
chứa một hay nhiều thông tin hiển thị trên các Widget tương ứng. Android dựng sẵn
một số kiểu ListView đơn giản dựa vào định nghĩa một dòng (item) của nó như:
simple_list_item_1, simple_list_item_2, simple_list_item_3,… Chúng ta hoàn toàn
có thể định nghĩa lại một “CustomItem” với các thành phần widget tùy ý để có thể
tạo ra những giao diện như ý muốn.
ListView chỉ là thành phần hiển thị thông tin, nó phụ thuộc vào nguồn dữ liệu gọi là
Data Source và cầu nối giữa nó với nguồn dữ liệu gọi là Adapter.
Tổng quan về hệ điều hành mobile Android 28
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
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 lớp trung gian giúp ánh xạ dữ liệu trong Data Source vào
đúng vị trí hiển thị trong ListView thông qua phương thức getView(). Khi một
Adapter được khởi tạo nó sẽ phải được chỉ định Data Source và ListItem mà nó hiển
thị. Sau đó adapter này sẽ được gán cho ListView thông qua phương thức
ListView.setAdapter(adaper). Mọi sự thay đổi dữ liệu trên Data Source sẽ được
adapter cập nhật lên ListView bằng phương thức notifyDataSetChanged().
Hình 1. 15 ListView
1.7. SQLITE
SQLite là một dạng CSDL tương tự như Mysql, PostgreSQL... Đặc điểm của
SQLite là gọn, nhẹ, đơn giản. Chương trình gồm 1 file duy nhất vỏn vẹn chưa đến
500kB, không cần cài đặt, không cần cấu hình hay khởi động mà có thể sử dụng
ngay. Dữ liệu database cũng được lưu ở một file duy nhất. Không có khái niệm
user, password hay quyền hạn trong SQLite database.
SQLite không thích hợp với những hệ thống lớn nhưng ở quy mô vừa tầm thì
SQLite phát huy uy lực và không hề yếu kém về mặt chức năng hay tốc độ. Với các
đặc điểm trên SQLite được sử dụng nhiều trong việc phát triển, thử nghiệm v..v.. và
là sự lưa chọn phù hợp cho những người bắt đầu học database. Hiện nay thì SQLite
đã được ứng dụng vào smartphone như iPhone và Android để lưu trữ dữ liệu.
Google APIs 29
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Chương 2. GOOGLE APIs
Chương này giới thiệu một số API có liên quan đến các dịch vụ về bản đồ của
Google, với trọng tâm nghiên cứu tập trung vào việc tìm hiểu cách sử dụng các dịch
vụ này trên hệ điều hành mobile Android là chính. Lồng vào đó là nội dung giới
thiệu về JavaScript Object Notation (JSON), kiểu dữ liệu gọn nhẹ được sử dụng hầu
hết trong các kết quả trả về của Google APIs.
Nội dụng bao gồm:
- Google Maps API: sử dụng bản đồ Google Maps trên Android.
- JavaScript Object Notation (JSON): giới thiệu JSON và cấu trúc của JSON.
- Google Places Autocomplete API: tìm kiếm nhanh tên địa điểm dựa vào từ khóa.
- Google Places API: tìm kiếm địa điểm có giới hạn phạm vi tìm kiếm.
- Google Directions API: tìm đường đi, khoảng cách, thời gian giữa hai địa điểm.
2.1. Google Maps API
2.1.1. Giới thiệu
Google Maps là một dịch vụ và công nghệ bản đồ trực tuyến miễn phí được cung
cấp bởi công ty Google, hỗ trợ nhiều dịch vụ dựa vào bản đồ như Google Maps trên
web, Google Ride Finder, Google Transit, Google Places,… và một số có thể dùng
để nhúng vào các trang web của bên thứ ba thông qua các hàm dịch vụ Google
Maps API.
Google Maps cho phép thấy bản đồ đường sá, bản đồ vệ tinh, hướng dẫn đường đi
cho người đi bộ, xe hơi hoặc các phương tiện công cộng, và những địa điểm kinh
doanh trong các thành phố của nhiều quốc gia cũng như khắp nơi trên thế giới.
Google Maps API cho phép các nhà phát triển có thể tích hợp Google Maps vào
trang web hoặc ứng dụng của họ. Đây là một dịch vụ miễn phí và hiện không bị
chèn quảng cáo.
Google APIs 30
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bằng cách sử dụng Google Maps API, bản đồ của Google có thể được nhúng vào
bất kỳ website nào mà vẫn đảm bảo dữ liệu của nó được che phủ. Mặc dù ban đầu
chỉ là một JavaScript API, nhưng các hàm dịch vụ Maps API đã ngày càng được mở
rộng bao gồm cả các API cho ứng dụng Adobe Flash, dịch vụ lấy ảnh bản đồ tĩnh,
dịch vụ web phục vụ cho địa lý, dịch vụ hướng dẫn đường đi, lái xe,…
Thành công của Google Maps API tạo nên những sự cạnh tranh trên cùng lĩnh vực
của các nhà cung cấp khác như: Yahoo! Maps API, Bing Maps Platform, MapQuest
Development Platform và OpenLayers.
Năm 2006, Google giới thiệu công nghệ mới được gọi là Google Maps cho Mobile,
với dự định có thể ứng dụng Google Map trên bất kỳ thiết bị di động có hỗ rợ nền
tảng Java nào. Nhiều tính năng trên web đã được cung cấp đầy đủ trên các ứng
dụng.
Android platform là một nền tảng hỗ trợ tối đa cho Google Maps, chúng ta có thể
nhúng nó vào ứng dụng của mình một cách dễ dàng và hiệu quả.
2.1.2. Sử dụng Google Maps API trên Android
a) Tạo ứng dụng sử dụng Google Maps API trên Android với Eclipse
Để tạo được ứng dụng sử dụng Google Maps API, bạn phải cài đặt gói GoogleAPIs
bằng cách sử dụng Android SDK and AVD Manager.
Google APIs 31
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Hình 2. 1 Cài đặt Google APIs trên Eclipse
Sau đó tạo project mới:
Hình 2. 2 Tạo project cho ứng dụng Google APIs
Google APIs 32
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
b) Đăng ký và lấy key Google Maps API
Để sử đụng dược Google Maps API trong ứng dụng của mình thì phải đăng ký một
key miễn phí từ Google Maps API.
Các bước để đăng ký key từ Google Maps API
B1. Lấy MD5 fingerprint code.
- Xác định được file debug.keystore, đường dẫn thông thường là:
Bảng 2. 1 Đường dẫn file debug.keystore trên các hệ điều hành
Hệ điều hành Đường dẫn
Windows Vista &
Window7 C:\Users\<user>\.android\debug.keystore
Windows XP C:\Documents and
Settings\<user>\.android\debug.keystore
OS X and Linux ~/.android/debug.keystore
- Nếu dùng Eclipse thì có thể vào Windows > Preferences > Android > Build
để lấy đường dẫn như bên dưới:
Hình 2. 3 Đường dẫn đến file debug.keystore
Google APIs 33
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
- Sau khi lấy được đường dẫn của debug.keystore. Mở cmd lên và chạy lệnh sau để
lấy MD5 fingerprint code:
keytool -list -alias androiddebugkey -keystore
<path_to_debug_keystore>.keystore -storepass android –
keypass android
Lưu ý: keytool nằm trong bin của java. Nếu chưa thêm đường dẫn của bin vào
path trong Environment varialbles của Windows thì phải chuyển thư mục hiện
hành trên cmd tại thư mục bin của java.
- Kết quả sẽ cho ra dãy MD5 Certificate fingerprint. Bạn lưu lại dãy MD5 này.
B2. Lấy key Google Maps API
Vào đường dẫn sau : http://code.google.com/android/maps-api-signup.html
Điền vào mã MD5 fingerprint code và chọn Generate API key , hệ thống sẽ tự
đông sinh ra một API key. Đây chính là Google Maps API key mà ta đã đăng ký
thành công.
Hình 2. 4 Đăng ký Google Maps APIs
Google APIs 34
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
c) Nhúng bản đồ Google vào ứng dụng Android
B1. Khai báo AndroidManifest
Để sử dụng Google Maps API, phải khai báo trong file AndroidManifest.xml bằng
cách thêm hai phần tử <uses-library> và <user-permission> như sau:
<uses-library android:name="com.google.android.maps"/>
<uses-permission android:name="android.permission.INTERNET"/>
B2. Tạo layout hiển thị Map
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.android.maps.MapView
android:id="@+id/mymap"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="031rbjQgtWLoC3N3Nv1bouVoK0HG5S-g3LuQ"
android:clickable="true"
/>
</RelativeLayout>
B3. Tạo class GoolgeMap extends MapActivity, overrides phương thức onCreate và
isRouteDisplayed
public class GoogleMap extends MapActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.maplayout);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
Google APIs 35
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
2.2. JavaScript Object Notation (JSON)
JSON là định dạng dữ liệu được sử dụng hầu hết trong các kết quả trả về của các
dịch vụ do Google cung cấp, vì vậy cần phải hiểu được cấu trúc của JSON để thuận
lợi cho việc tìm hiểu các API sau này.
2.2.1. JSON là gì?
JSON (JavaScript Object Notation) là một dạng dữ liệu mở và nhẹ nhàng, được
thiết kế theo định dạng kiểu text để dễ dàng trao đổi và con người có thể đọc được.
Nó có nguồn gốc từ ngôn ngữ kịch bản JavaScript, thể hiện các cấu trúc dữ liệu đơn
giản và các mảng kết hợp, gọi chung là các đối tượng. Mặc dù có quan hệ với
JavaScript, nhưng JSON là một ngôn ngữ độc lập, có thể phân tích và chuyển đổi
sang hầu hết các ngôn ngữ kịch bản khác.
Định dạng JSON đầu tiên do Douglas Crockford định nghĩa và được miêu tả trong
RFC 4627. Tên của một file dữ liệu json có đuôi mở rộng là .json.
JSON thường được sử dụng cho các cấu trúc dữ liệu truyền qua mạng có thứ tự và
có cấu trúc, chủ yếu là truyền dữ liệu giữa máy chủ và các ứng dụng web, thay thế
cho XML. [4]
2.2.2. Cấu trúc của JSON
JSON được xây dựng trên 2 cấu trúc:
Là tập hợp của các cặp tên và giá trị name-value, thay thế cho hầu hết các cấu
trúc ở các ngôn ngữ khác như: đối tượng (object), bảng ghi (record), cấu trúc
(struct), từ điển (dictionary), bảng băm (hash table), danh sách có khoá (keyed
list), hay mảng liên hợp (associative array).
Là 1 mảng các giá trị đã được sắp xếp. Trong hầu hết các ngôn ngữ khác thì đây
chính là: 1 mảng (array), vector, danh sách (list) hay là 1 chuỗi (sequence).
Google APIs 36
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Đó là 2 cấu trúc dữ liệu rất phổ biến, hầu như tất cả các ngôn ngữ lập trình hiện đại
đều hổ trợ chúng theo một hình thức nào đó. Nhờ cấu trúc này mà đã tạo nên một
định dạng dữ liệu có thể dễ dàng và nhanh chóng được chuyển đổi bằng các ngôn
ngữ lập trình.
JSON có những dạng sau:
Đối tượng: một đối tượng là một tập không có thứ tự của các cặp tên và giá trị
(name:value). Một đối tượng bắt đầu bởi dấu mở ngoặc đơn “{“ và kết thúc với dấu
đóng ngoặc đơn “}”. Theo sau tên là dấu hai chấm “:” và các cặp “tên:giá trị” được
tách ra bởi dấu phẩy “,”.
Hình 2. 5 Object trong JSON
Ví dụ:
{
“ten”: “Nguyen Van A”,
“tuoi”: 21,
“gioitinh”: “Nam”
}
Mảng: một mảng là một tập hợp các giá trị đã được sắp xếp. Một mảng bắt đầu bởi
dấu mở ngoặc vuông “[“ và kết thúc với dấu đóng ngoặc vuông “]”. Các giá trị được
cách nhau bởi dấu phẩy “,”.
Hình 2. 6 Array trong JSON
Google APIs 37
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Ví dụ: Mảng các “sinhVien”
“sinhVien”:
[
{
“ten”: “Nguyen Van A”,
“tuoi”: 21,
“gioitinh”: “Nam”
},
{
“ten”: “Nguyen Thi B”,
“tuoi”: 20,
“gioitinh”: “Nu”
}
]
Giá trị: một giá trị có thể là một chuỗi (string) trong cặp dấu nháy kép “” hoặc một
số, hoặc một giá trị true hoặc false, hoặc giá trị null, hoặc một đối tượng (object),
hoặc một mảng (array). Những cấu trúc này có thể được lồng vào nhau.
Hình 2. 7 Value trong JSON
Chuỗi: một chuỗi (string) là một tập hợp của 0 hay nhiều ký tự Unicode, được bao
trong các dấu nháy kép ("), giống như là string trong C hay là Java. Chuỗi không
chứa các ký tự “\“ và " đứng đơn độc, ta dùng dấu “\” cùng với “b”, “f”, “n”, “r”,
Google APIs 38
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
“t”, “u” để biểu diễn các ý nghĩa đặc biệt, và muốn thể hiện các ký tự “\” và " trong
chuỗi, ta thêm vào trước nó ký tự “\”.
Hình 2. 8 String trong JSON
Số (number): một số giống một số trong C và Java, trừ định dạng bát phân và hexa
là không thể dùng.
Hình 2. 9 Number trong JSON
Google APIs 39
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng tóm tắt các kiểu dữ liệu trong JSON:
Bảng 2. 2 Các kiểu dữ liệu trong JSON
2.3. Google Places Autocomplete API
2.3.1. Giới thiệu
Google Places Autocomplete API là một dịch vụ web cung cấp bởi Google, giúp tự
động hoàn chỉnh từ khóa tìm kiếm bằng cách trả về danh sách các địa điểm kinh
doanh, địa chỉ,.. gần với từ khóa nhận được nhất.
Ví dụ: từ khóa gửi đến là: “New Y”, thì kết quả trả về sẽ là: “New York, NY,
USA”, “New York, NY, United States”, “The New Yorker, 8th Avenue, New York,
NY, United States”,… [5]
Google APIs 40
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
2.3.2. Sử dụng
- API Key:
Google Places Autocomplete API là một phần của Google Places API nên
sử dụng chung key và các điều khoản dịch vụ khác như Google Places API.
API key được quản lý và cung cấp bởi Google APIs console:
http://code.google.com/apis/console
- Yêu cầu về Logo:
Nếu ứng dụng hiển thị dữ liệu lấy được từ Places API mà không sử dụng
Google Map thì phải chèn vào logo “Powered by Goolge” kèm theo.
Logo được cung cấp tại:
http://code.google.com/apis/maps/documentation/places/images/powered-by-
google.zip
2.3.3. Request
Một yêu cầu của Places Autocomplete là một đường dẫn HTTP URL có dạng:
https://maps.googleapis.com/maps/api/place/autocomplete/output?parameters
Trong đó, output có thể có các giá trị:
json cho biết kết quả trả về dạng JavaScript Object Notation (JSON).
xml cho biết kết quả trả về dạng XML.
Parameters là các tham số được phân biệt nhau bởi dấu &. Bao gồm các tham số bắt
buộc và các tham số không bắt buộc:
Tham số bắt buộc:
input – từ khóa tìm kiếm. Server sẽ trả về kết quả phù hợp nhất với từ khóa
này.
sensor – cho biết yêu cầu được gửi có sử dụng thiết bị định vị để xác định ví
trí gửi yêu cầu không. Tham số này có thể có giá trị true hoặc false.
key – API key của ứng dụng, đăng ký từ Google APIs Console.
Tham số không bắc buộc:
Google APIs 41
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
offset – vị trí của ký tự trong chuỗi input mà dịch vụ dùng để phỏng đoán ra
kết quả. Ví dụ input là “Googl” và offset là 3, thì dịch vụ sẽ tìm kiếm kết quả
trùng với “Goo” nhất. Nếu tham số này không được cung cấp, mặc định là sẽ
lấy toàn bộ chuỗi input.
location – tọa độ vị trí (latitude và longtitude) mà người sử dụng mong muốn
kết quả nhận được có thể gần vị trí này nhất.
radius – khoảng cách (tính bằng mét) làm bán kính của phạm vi mà kết quả sẽ
nằm trong đó.
language – ngôn ngữ của văn bản kết quả trả về. Mặc định là tiếng Anh (en).
type – loại kết quả trả về, bao gồm:
o geocode – chỉ định kết quả trả về chỉ ở là các kết quả dạng địa chỉ.
o establishment – chỉ định kết quả trả về chỉ là các kết quả dạng địa điểm
kinh doanh.
Ví dụ một request với input: Ameoba, tìm trong giới hạn vùng San Francisco
(radius = 500 mét):
https://maps.googleapis.com/maps/api/place/autocomplete/xml?input=A
moeba&types=establishment&location=37.76999,-
122.44696&radius=500&sensor=true&key=AIzaSyAiFpFd85eMtfbvmVNE
YuNds5TEF9FjIPI
2.3.4. Response
Kết quả trả về dạng JSON hoặc XML là tùy thuộc vào tham số ouput trong request.
Kết quả trả về dạng JSON gồm hai phần tử gốc sau:
status – chứa siêu dữ liệu thể hiện trạng thái của request, có thể chứa đựng
thông tin debug để giúp người sử dụng biết được lý do vì sao yêu cầu thất bại.
status có thể có các giá trị sau:
o OK – cho biết không có lỗi nào xảy ra và có ít nhất một kết quả được trả
về.
o ZERO_RESULTS – cho biết không tìm thấy kết quả nào phù hợp.
Google APIs 42
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
o OVER_QUERY_LIMIT – cho biết đã quá giới hạn gửi yêu cầu trong một
ngày.
o REQUEST_DENIED – yêu cầu bị từ chối, có thể do thiếu tham số bắt
buộc như sensor.
o INVALID_REQUEST – yêu cầu không hợp lệ do thiếu tham số input.
predictions – chứa một danh sách các địa điểm tìm được kèm theo thông tin
từng địa điểm. Mỗi kết quả trong mảng predictions gồm các phần tử sau:
o description – chứa văn bản có thể đọc được, là tên của kết quả như địa chỉ
(geocode), tên các địa điểm kinh doan (establishment).
o reference – chứa mã duy nhất dùng để lấy thêm thông tin về địa điểm
thông qua một API khác đó là Place Detail API.
o id – chứa mã duy nhất để xác định địa điểm này, phân biệt với các kết quả
khác. Mã này không dùng trong việc lấy thông tin thềm về địa điểm.
o terms – là một mảng chứa từng phần (section) của kết quả tìm được trong
chuỗi description, mỗi phần tử của mảng bao gồm 2 phần tử: value và
offset, offset là vị trí của section trong chuỗi description.
o matched_substring – chứa hai phần tử offset và lengh, dùng để xác định vị
trí và độ dài của đoạn văn bản (input) trong kết quả tìm được, dựa vào đây
có thể highlight đoạn này nếu cần trong ứng dụng.
2.4. Google Places API
2.4.1. Giới thiệu
Google Places API là một dịch vụ cung cấp thông tin về các địa điểm trên toàn thế
giới như các địa điểm kinh doanh, vị trí địa lý, hoặc các địa danh nổi tiếng… bằng
cách sử dụng yêu cầu thông qua HTTP. [6]
2.4.2. Sử dụng
- API Key:
Google APIs 43
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Google Places API sử dụng API key để xác định ứng dụng đang sử dụng
dịch vụ. API key được quản lý và cung cấp bởi Google APIs console:
http://code.google.com/apis/console
- Giới hạn:
Người dùng sử dụng API key bình thường được phép gửi yêu cầu tối đa
1000 yêu cầu trong 24 giờ.
Người dùng sử dụng API key đã được xác thực thông tin cá nhân thông qua
APIs Console được phép gửi tối đa 100 000 yêu cầu trong 24 giờ. Để xác
thực tài khoản, người dùng phải cung cấp mã thẻ tín dụng và thẻ này sẽ
không bị trừ phí khi sử dụng các dịch vụ của Places API.
- Yêu cầu về Logo:
Nếu ứng dụng hiển thị dữ liệu lấy được từ Places API mà không sử dụng
Google Map thì phải chèn vào logo “Powered by Goolge” kèm theo.
Logo được cung cấp tại:
http://code.google.com/apis/maps/documentation/places/images/powered-by-
google.zip
- Yêu cầu khác:
Nếu ứng dụng của bạn hiển thị dữ liệu của Places API lên bản đồ thì bản đồ
đó phải được cung cấp bởi Google (Google Map).
Kết quả trả về của Google Places API có thể bao gồm các thông tin về nhà cung cấp
ở dạng HTML, thì các đường dẫn trong các nội dung HTML này phải được giữ
nguyên vẹn và hiển thị trên ứng dụng của bạn. Tốt nhất là nên hiển thị những thông
tin đó ngay bên dưới các kết quả tìm kiếm (từ Place Search) hoặc các thông tin chi
tiết địa điểm (từ Place Details).
2.4.3. Place Searches
a) Request
Một yêu cầu của Place Searches là một đường dẫn HTTP URL có dạng:
https://maps.googleapis.com/maps/api/place/search/output?parameters
Google APIs 44
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Trong đó, output có thể có các giá trị:
json cho biết kết quả trả về dạng JavaScript Object Notation (JSON).
xml cho biết kết quả trả về dạng XML.
Parameters là các tham số được phân biệt nhau bởi dấu &. Bao gồm các tham số bắt
buộc và các tham số không bắt buộc:
Tham số bắt buộc:
location – tâm của khu vực muốn tìm kiếm, bao gồm vĩ độ và kinh độ
(latitude, longitude).
radius – bán kính khu vực tìm kiếm, tính theo mét.
key – API key của ứng dụng, đăng ký từ Google APIs Console.
sensor – cho biết yêu cầu được gửi đến từ thiết bị có sử dụng thiết bị định vị
hay không, có giá trị true hoặc false.
Tham số không bắc buộc:
types – hạn chế kết quả theo kiểu địa điểm được chỉ định, ví dụ: coffee,
accounting, airport,…
language – ngôn ngữ của văn bản kết quả trả về. Mặc định là tiếng Anh (en).
name – cụm từ tìm kiếm để trùng với tên các địa điểm. Các kết quả tìm được
sẽ có tên chứa cụm từ tìm kiếm hoặc gần với cụm từ nhất. Để đảm bảo kết
quả tìm kiếm phù hợp nhất thì nên mở rộng khu vực tìm kiếm.
Ví dụ một request với các tham số: type=food, bán kính khu vực tìm kiếm = 500m,
địa điểm ở Sydney, Australia, name = harbour:
https://maps.googleapis.com/maps/api/place/search/json?location=-
33.8670522,151.1957362&radius=500&types=food&name=harbour&senso
r=false&key=AIzaSyAiFpFd85eMtfbvmVNEYuNds5TEF9FjIPI
b) Response
Kết quả trả về dạng JSON hoặc XML là tùy thuộc vào tham số ouput trong request.
Kết quả trả về dạng JSON gồm các phần tử gốc status, html_attributions, results.
Google APIs 45
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 2. 3 Response của Place Search
Phẩn tử Mô tả
status
Chứa siêu dữ liệu thể hiện trạng thái của request, có thể chứa đựng
thông tin debug để giúp người sử dụng biết được lý do vì sao yêu
cầu thất bại. status có thể có các giá trị sau:
o OK – cho biết không có lỗi nào xảy ra và có ít nhất một kết
quả được trả về.
o ZERO_RESULTS – cho biết không tìm thấy kết quả nào phù
hợp.
o OVER_QUERY_LIMIT – cho biết đã quá giới hạn gửi yêu
cầu trong một ngày.
o REQUEST_DENIED – yêu cầu bị từ chối, có thể do thiếu
tham số bắt buộc như sensor.
o INVALID_REQUEST – yêu cầu không hợp lệ do thiếu tham
số input.
html_attributions Chứa các thông tin về nhà cung cấp phải được hiển thị cho người
dùng.
results
Là một mảng các kết quả (các địa điểm), sắp xếp theo tiêu chí địa
điểm được chú ý nhiều nhất, mỗi địa điểm chứa các tham số sau:
o name – tên của địa điểm.
o viciniy – các địa điểm lân cận, thường thì các đường phố hoặc
vùng lân cận nằm trong phạm vi các kết quả.
o types[] – chứa một mảng các loại địa điểm mô tả cho các địa
điểm.
o geometry – chứa thông tin về vị trí địa lý của địa điểm.,
thường thì chứa một kiểu location (gồm latitude và longitude)
o icon – chứa URL của icon cho địa điểm.
o reference – chứa mã duy nhất dùng để lấy thêm thông tin về
địa điểm thông qua một API khác đó là Place Detail API.
o id - chứa mã duy nhất để xác định địa điểm này. id này không
được dùng để lấy thêm thông tin về địa điểm, nhưng được
đảm bảo để có giá trị xuyên suốt các phiên làm việc. Nó có
thể được sử dụng để hợp nhất dữ liệu của một địa điểm, và để
xác minh danh tính của một địa điểm thông qua các tìm kiếm
riêng biệt.
Google APIs 46
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
2.4.4. Place Details
Khi đã có reference từ Place Search, ta có thể yêu cầu thêm thông tin về một địa
điểm cụ thể bằng cách sử dụng dịch vụ Place Detail. Place Detail sẽ trả về các thông
tin tổng quát về địa điểm như: địa chỉ, số điện thoại, đánh giá của người dùng,…
a) Request
Request URL:
https://maps.googleapis.com/maps/api/place/details/output?parameters
output – json hoặc xml
Các tham số:
o reference – mã được lấy từ Place Search.
o language – ngôn ngữ của kết quả trả về.
o sensor - cho biết yêu cầu được gửi đến từ thiết bị có sử dụng thiết bị định
vị hay không, có giá trị true hoặc false.
o key - API key của ứng dụng, đăng ký từ Google APIs Console.
Ví dụ một request:
https://maps.googleapis.com/maps/api/place/details/json?reference=CmR
YAAAAciqGsTRX1mXRvuXSH2ErwW-
jCINE1aLiwP64MCWDN5vkXvXoQGPKldMfmdGyqWSpm7BEYCgD
m-
iv7Kc2PF7QA7brMAwBbAcqMr5i1f4PwTpaovIZjysCEZTry8Ez30wpE
hCNCXpynextCld2EBsDkRKsGhSLayuRyFsex6JA6NPh9dyupoTH3g&
sensor=true&key=AIzaSyAiFpFd85eMtfbvmVNEYuNds5TEF9FjIPI
b) Response
Google APIs 47
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Kết quả trả về dạng JSON gồm các phần tử gốc status, html_attributions, results.
Trong đó, result – là một kết quả đơn bao gồm các thông tin cụ thể về địa điểm:
Bảng 2. 4 Response của Place Details
Tham số Mô tả
name Tên của địa điểm.
viciniy Các địa điểm lân cận, thường thì các đường phố hoặc vùng
lân cận nằm trong phạm vi các kết quả.
types[] Chứa một mảng các loại địa điểm mô tả cho các địa điểm.
formated_phone_number Số điện thoại của địa điểm.
formated_address Địa chỉ của địa điểm.
address_components[]
Là một mảng các thành phần địa chỉ, ví dụ: “111 8th
Avenue, New York, NY" bao gồm 3 thành phần "111" (số
nhà), "8th Avenue" (đường), "New York" (thành phố) and
"NY" (tiểu bang). Mỗi address_component bao gồm:
type[] – mảng các loại địa điểm.
long_name – tên đầy đủ của add_component.
short_name – tên viết tắt, ví dụ “Alaska” thành “AK”.
geometry Chứa location (lat, long) của địa điểm.
url Địa chỉ trang thông tin chi tiết của địa điểm (Google Place
Page).
rating Điểm đánh giá của người dùng cho địa điểm (từ 0 đến 5).
reference
Mã dùng để truy vấn đên Details service trong tương lai. Mã
này có thể khác mã reference được sử dụng để yêu cầu đến
Detail service trước đó. Mã này là để cập nhật thêm thông
tin.
id
Chứa mã duy nhất để xác định địa điểm này. id này không
được dùng để lấy thông tin về địa điểm, nhưng có thể được
sử dụng để hợp nhất dữ liệu của một địa điểm. id này thỉnh
thoảng có thể bị thay đổi.
Google APIs 48
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
2.5. Google Directions API
2.5.1. Giới thiệu
Để tính toán đường đi giữa hai địa điểm, bao gồm cả cách đi (lộ trình), thời gian và
khoảng cách ngắn nhất, ta có thể dùng Google Maps API Direction Service.
Google Maps API Direction Service nhận một request gởi tới bao gồm điểm nguồn,
điểm đích và những tham số khác, và trả về kết quả là các lộ trình để đi từ nguồn
đến đích bao gồm nhiều điểm trung gian, thời gian và khoảng cách từng đoạn và cả
hướng dẫn cụ thể bằng lời cho người sử dụng. [7]
2.5.2. Direction Request
Direction request có dạng sau:
http://maps.googleapis.com/maps/api/directions/output?parameters
Trong đó, output có thể là:
json (khuyên dùng) xác định kiểu kết quả trả về dạng JSON (JavaScript
Object Notation)
xml xác định kết quả trả về dạng XML
Sử dụng Direction API qua HTTPS:
https://maps.googleapis.com/maps/api/directions/output?parameters
Request parameters
Bảng 2. 5 Các tham số trong Google Directions API request
Tham số Bắt
buộc
Giá trị
mặc định Ý nghĩa
origin * Địa chỉ hoặc tọa độ địa lý (latitude/longitude)
từ nơi cần tính đường đi (nguồn).
destination * Địa chỉ hoặc tọa độ địa lý (latitude/longitude)
nơi cần đến (đích).
Google APIs 49
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
mode driving
Xác định cách thức di chuyển (driving,
walking, bicycling) để tính đường đi cho phù
hợp
waypoints
Xác định mảng các vị trí dùng để thay đổi lịch
trình mặc định tìm được. Waypoint có thể là
địa chỉ hoặc tọa độ địa lý (lat/lng).
alternatives false
Nếu được set bằng true thì sẽ xác định được
nhiều hơn 1 kết quả lộ trình đường đi. Nhưng
nó sẽ mất nhiều thời gian tính toán hơn.
avoid
Lộ trình kết quả tính được phải tránh những
địa điểm đặc biệt theo thuộc tính, có 2 giá trị:
- tolls: tránh đường, cầu nguy hiểm
- hightways: tránh đường cao tốc
unit Tùy theo
quốc gia
Xác định đơn vị khoảng cách hiển thị trong lộ
trình kết quả, gồm 2 loại: metric (đơn vị mét)
và imperial (hệ thống đơn vị của Anh: miles
và feet)
region
Hạn chế lộ trình kết quả nằm trong một vùng
nào đó, hệ thống phân vùng này được quy
định trong “ISO 3166-1 codes”
language en
Ngôn ngữ thể hiện trong kết quả. Mã ngôn
ngữ được quy đinh trong Supported
Languages Spreadsheet.
Nếu ngôn ngữ không được hỗ trợ thì kết quả
trả về theo ngôn ngữ của trình duyệt.
sensor *
Xác định có sử dụng thiết bị cảm biến để xác
định vị trí hiện tại của thiết bị hay không. Giá
trị có thể là: true hoặc flase.
2.5.3. Direction Response
Trước hết ta xem bản đồ sau để hiểu về các thuật ngữ: route, leg, step.
Google APIs 50
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Hình 2. 10 Bản đồ minh họa Google Direction
Một route bao gồm cả lộ trình đường đi màu xanh ở trên.
Từ A đến B là một leg, và từ B đến C là một leg.
Một step là một đoạn đường, trên hình là từ A đến 2.Vo Van Ngan là
một step.
Kết quả trả về của Google Maps API Direction Service dạng JSON hoặc XML là
tùy thuộc vào thuộc tính output trong request gửi đến.
Ví dụ về Reqest và Response của Google Directions API
Với request như sau:
http://maps.googleapis.com/maps/api/directions/json?origin=10.8476
26,106.767132&destination=10.846536,106.771325&sensor=true&languag
e=vi
Google APIs 51
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Kết quả hiển thị dạng cây:
Hình 2. 11 Hiển thị dữ liệu JSON dạng cây của Google Direction API
Các phần tử trong kết quả
- Các thuộc tính trong root
Bảng 2. 6 Các thuộc tính trong root của Directions Response
Tên thuộc tính Giá trị và ý nghĩa
status
OK Kết quả trả về hợp lệ
NOT_FOUND Nguồn, đích hoặc một trong các điểm
trung gian không xác định được
Google APIs 52
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
ZERO_RESULT Không tìm được đường đi nào
MAX_WAYPOINTS
_EXCEEDED
Có quá nhiều waypoint được cung
cấp trong request. Số waypoint tối đa
là 8.
INVALID_REQUEST Request không hợp lệ
OVER_QUERY_LIMIT Quá số request bị giới hạn trong một
khoảng thời gian
REQUEST_DENIED Bị từ chối yêu cầu bởi nhà cung cấp
UNKNOWN_ERROR Request không được xử lý bởi lỗi
server, có thể thử lại sẽ thành công.
routes Là một mảng các “lộ trình” mà server tìm được để đi từ điểm gốc
tới đích.
- Các thuộc tính trong routes
Bảng 2. 7 Các thuộc tính trong routes của Directions Response
Tên thuộc tính Giá trị và ý nghĩa
summary Một chuỗi mô tả ngắn gọn về lộ trình. Có thể dùng để đặt tên
cho lộ trình.
legs[]
Một mảng chứa những thông tin về một nhánh đi giữa hai địa
điểm trong lộ trình. Một lộ trình nếu không được cung cấp các
waypoint thì chỉ có 1 leg.
waypoint_order Chứa một mảng các waypoint theo thứ tự trong các waypoint
được tính toán trong route.
overview_polyline Chứa đối tượng giữ một mảng những points được mã hóa và
levels thể hiện đường đi gần đúng của kết quả.
bounds Đường bao chứa lộ trình (route) trên bản đồ.
copyrights Chuỗi thể hiện bản quyền của lộ trình.
warnings[] Mảng các cảnh báo có thể xảy ra trong lộ trình.
Google APIs 53
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
- Các thuộc tính trong legs
Bảng 2. 8 Các thuộc tính trong legs của Directions Response
Tên thuộc tính Ý nghĩa
steps[] Mảng các step. Mỗi step là một tập các thông tin trên một
đoạn đường trong lộ trình.
distance
Tổng khoảng cách trong một leg. Có 2 thuộc tính con:
value khoảng cách bằng đơn vị mét.
text khoảng cách thể hiện bằng chữ, đơn vị tùy thuộc
vào tham số trong request (units).
duration
Tổng thời gian trong một leg. Thời gian này được tính toán
dựa theo travel_mode cung cấp trong request. Có 2 thuộc tính
con:
value thời gian tính bằng giây.
text thời gian thể hiện bằng chữ theo giờ và phút.
start_location
Tọa độ điểm bắt đầu trên leg. Có thể khác với điểm gốc trong
request vì Direction API lấy điềm trên các tuyền đường gần
với điểm nguồn nhất để làm điểm bắt đầu.
end_location
Tọa độ điểm đích trên leg. Có thể khác với điểm đích trong
request vì Direction API lấy điềm trên các tuyền đường gần
với điểm nguồn nhất để làm điểm đích.
start_address Địa chỉ điểm bắt đầu bằng chữ dựa vào start_location
end_address Địa chỉ điểm đích bằng chữ dựa vào end_location
- Các thuộc tính trong steps
Bảng 2. 9 Các thuộc tính trong steps của Directions Response
Tên thuộc tính Ý nghĩa
html_instruction Hướng dẫn đi bằng lời trên đoạn này, đã được định dạng theo
html.
distance Tổng khoảng cách trên một step (đoạn đường). Cũng có 2
thuộc tính con giống distance trong leg.
Google APIs 54
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
duration Tổng thời gian trong một step. Cũng có 2 thuộc tính con giống
duration trong leg.
start_location Điểm bắt đầu của một step
end_location Điểm kết thúc của một step
RESTful Web Services 55
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Chương 3. RESTFUL WEB SERVICES
Chương này giới thiệu tổng quan về dịch vụ web Restful, tìm hiểu kiến trúc và giải
thích một vài khái niệm thường dùng, các nguyên tắc và thành phần chính để xây
dựng một hệ thống RESTful. Tìm hiểu chi tiết về các yêu cầu của máy khách và sự
trả lời của máy chủ.
Nội dung bao gồm:
- Định nghĩa về REST (Representational State Tranfer)
- Kiến trúc của dịch vụ web RESTful gồm: tài nguyên (resources), bộ định
danh đồng bộ (URI)
Đồng bộ giao diện thông qua yêu cầu HTTP bao gồm các hành động: Create,
Retreive, Update, Delete và các phương thức tương ứng: Post, Get, Put, Delete.
3.1. Định nghĩa REST
REST (REpresentational State Transfer) là một tập hợp các nguyên tắc kiến trúc và
một kiểu kiến trúc phần mềm để xây dựng các hệ thống dùng mạng (network-
enabled system) dựa trên các cơ cấu mà định nghĩa và truy cập các tài nguyên,
chẳng hạn như WWW (World Wide Web). Thuật ngữ REST, được Roy Fielding
định nghĩa trong luận án tiến sĩ của ông vào năm 2000, thường được dùng một cách
khá lỏng lẻo để mô tả một khung làm việc để chuyển tải dữ liệu qua một giao thức
chẳng hạn như HTTP mà không phải bổ sung các lớp ngữ nghĩa hoặc quản lý phiên
làm việc.
REST định nghĩa một sự phân cách nghiêm ngặt của các mối liên hệ giữa các thành
phần có tham gia vào một hệ thống khách-chủ mà đơn giản hoá việc thực hiện các
vai yêu cầu. REST cũng phấn đấu để đơn giản hoá ngữ nghĩa truyền thông trong
một hệ thống được nối mạng để làm tăng khả năng mở rộng và cải thiện hiệu năng.
REST liên quan đến yêu cầu tự quản, giữa các thành phần tham gia trong một trao
RESTful Web Services 56
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
đổi thông điệp mà ngụ ý các yêu cầu đó phải gồm toàn bộ các thông tin mà một máy
khách hoặc máy chủ yêu cầu để hiểu được ngữ cảnh của yêu cầu. Trong một hệ
thống dựa trên REST, bạn sử dụng các tập hợp tối thiểu các yêu cầu khả dĩ để trao
đổi các kiểu phương tiện truyền thông chuẩn.
Nguyên tắc REST sử dụng các bộ định danh tài nguyên đồng bộ (URIs) để định vị
và truy cập một đại diện đã cho của tài nguyên. Đại diện nguồn, gọi là trạng thái đại
diện, có thể được tạo, lấy ra, sửa đổi, và xoá bỏ. Ví dụ, bạn có thể áp dụng REST
cho tài liệu xuất bản để làm cho các tài liệu này sẵn có cho các độc giả. Tại bất kỳ
thời điểm nào cho trước, nhà xuất bản có thể trình bày các URL Web để các độc giả
có thể truy cập thông tin (trạng thái đại diện) về các tài liệu của nhà xuất bản. Các
độc giả của tài liệu chỉ cần biết các URL để đọc thông tin tài liệu, và nếu được ủy
quyền thì sửa đổi thông tin.
Như Roy Fielding đã mô tả, một trong các nguyên tắc hạn chế nội dung của REST
là ở chỗ nó có thể khai thác các công nghệ, chuẩn, giao thức hiện hành liên quan
đến Web, chẳng hạn như HTTP. Sự trông mong này về các công nghệ và giao thức
hiện hành làm cho REST dễ học hơn và sử dụng đơn giản hơn phần lớn các chuẩn
thông báo dựa trên Web khác, vì các chi phí phụ bổ sung đòi hỏi ít hơn, cho phép
việc trao đổi thông tin hiệu quả.
Một hội thoại dựa trên REST, theo Fielding, hoạt động trong các hội thoại phi trạng
thái, bằng cách ấy tạo cho nó một bộ xúc tiến chủ yếu cho các công nghệ dựa trên
thuê bao, chẳng hạn như RSS, RDF, OWL, và Atom, trong đó nội dung được đưa
vào cho các khách hàng thuê bao trước. [8]
3.2. Kiến trúc dịch vụ web RESTful
3.2.1. Tài nguyên
Một tài nguyên RESTful là bất cứ thứ gì có địa chỉ trên web. Bằng địa chỉ, chúng ta
hiểu là tài nguyên có thể được truy cập và chuyển đổi giữa máy khách và máy chủ.
RESTful Web Services 57
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Rồi sau đó, một tài nguyên là một phép ánh xạ có logic, có thứ tự, tới một khái niệm
trong phạm vi vấn đề mà chúng ta đang thực hiện giải pháp.
Một vài ví dụ cho tài nguyên REST:
Một câu chuyện tin tức.
Nhiệt độ tại New York lúc 4 giờ chiều.
Một danh sách lịch sử chỉnh sửa mã nguồn trong kho chứa như SVN hoặc
CVS.
Một sinh viên trong một vài lớp học ở một vài trường.
Một kết quả tìm kiếm cho một mục cụ thể trong một chỉ số web, chẳng hạn
như Google.
Mỗi tài nguyên của kiến trúc RESTful có thể được truy cập một cách trực tiếp và
độc lập, nhưng các yêu cầu khác nhau có thể được trỏ đến cùng một dữ liệu.
Bởi vì chúng ta sử dụng HTTP để giao tiếp, ta có thể chuyển đổi bất kỳ kiểu thông
tin nào được thông qua giữa máy khách và máy chủ. Ví dụ, nếu yêu cầu một tệp văn
bản từ CNN, trình duyệt của chúng ta sẽ nhận được một tập tin văn bản, nếu yêu
cầu một Flash phim từ YouTube, trình duyệt sẽ nhận một Flash phim.
Dữ liệu được xem trực tiếp trong cả hai trường hợp trên TCP/IP và trình duyệt biết
cách để giải thích các dòng nhị phân bởi vì giao thức HTTP trả về kiểu nội dung ở
đầu trang. Do vậy, trong một hệ thống RESTful đại diện của một tài nguyên phụ
thuộc vào kiểu yêu cầu của lời gọi (MIME type), được chỉ rõ trong yêu cầu của giao
thức truyền thông.
3.2.2. Bộ định danh tài nguyên đồng bộ - URI
Một bộ định danh tài nguyên đồng bộ (URI) trong dịch vụ web RESTful là một siêu
liên kết tới một tài nguyên, và nó chỉ có ý nghĩa duy nhất cho máy khách và máy
chủ để trao đổi các đại diện. Tập hợp các ràng buộc RESTful không bắt buộc URIs
RESTful Web Services 58
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
phải là các siêu liên kết. Chúng ta chỉ nói URIs của RESTful đang là các siêu liên
kết, bởi vì chúng ta dùng Web để tạo ra dịch vụ web.
Trong một hệ thống RESTful, URI không có nghĩa là thay đổi theo thời gian, việc
thực thi của kiến trúc này là quản lý các dịch vụ, định vị các tài nguyên, sắp xếp các
đại diện và sau đó gửi lại tài nguyên được yêu cầu. Quan trọng hơn, nếu thay đổi
cấu trúc của thiết bị lưu trữ ở cấp độ máy chủ (ví dụ: hoán đổi các máy chủ cơ sở dữ
liệu) các URIs sẽ vẫn tương tự và hợp lệ miễn là dịch vụ web vẫn trực tuyến hoặc
ngữ cảnh của tài nguyên không bị thay đổi.
3.2.3. Đồng bộ giao diện thông qua yêu cầu HTTP
Phát triển các dịch vụ web RESTful cũng tương tự như việc thực hiện các ứng dụng
web thông thường. Tuy nhiên, khác biệt cơ bản giữa ứng dụng web hiện đại và
truyền thống là cách nghĩ đối với việc trừu tượng hóa dữ liệu. Cụ thể, phát triển
theo hướng hiện đại bắt nguồn từ khái niệm các danh từ (trao đổi tài nguyên); phát
triển theo hướng truyền thống được bắt nguồn từ khái niệm các động từ (hành động
từ xa được thực hiện trên dữ liệu). Trước đây, chúng ta thực hiện một dịch vụ web
RESTful, còn sau này, chúng ta thực hiện một lời gọi hàm từ xa (Remote Procedure
Call - RPC). Hơn nữa, một dịch vụ RESTful thay đổi trạng thái của dữ liệu thông
qua đại diện của tài nguyên; một dịch vụ RPC về mặt khác, sẽ ẩn những đại diện dữ
liệu và thay vào đó nó gửi các lệnh để thay đổitrạng thái của dữ liệu ở cấp độ máy
chủ (chúng ta không bao giờ biết được dữ liệu như thế nào). Cuối cùng, trong phát
triển ứng dụng web hiện đại, chúng ta giới hạn việc thiết kế và thực thi nhập nhằng,
bởi vì chúng ta có bốn hành động cụ thể mà ta có thể thao tác trên tài nguyên. Đó là
Create, Retrive, Update và Delete (CRUD). Mặt khác, trong phát triển ứng dụng
web truyền thống, chúng ta có thể có vô số hành động không tên hoặc các tiêu
chuẩn thực thi. Do đó, với vai trò mô tả cho tài nguyên và các đại diện, bây giờ
chúng ta có thể sắp đặt các hành động CRUD cho các phương thức HTTP: POST,
GET, PUT và DELETE như sau:
RESTful Web Services 59
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 3. 1 Các hành động CRUD và phương thức HTTP tương ứng
Hành động Phương thức HTTP tương ứng
CREATE POST
RETRIEVE GET
UPDATE PUT
DELETE DELETE
3.2.3.1. Phương thức GET
Sử dụng phương thức này để chuyển giao trạng thái đại diện hiện tại của một tài
nguyên từ máy chủ đến máy khách.
Ví dụ, tại địa chỉ gốc http://restfuljava.com/ của một dịch vụ web, chúng ta có thông
tin về một sinh viên được định nghĩa dưới dạng XML như sau:
Và danh sách sinh viên:
<student>
<name>Jane</name>
<age>10</age>
<link>/students/Jane</link>
</student>
<students>
<student>
<name>Jane</name>
<age>10</age>
<link>/students/Jane</link>
</student>
<student>
<name>John</name>
<age>11</age>
<link>/students/John</link>
</student>
<link>/students</link>
</students>
RESTful Web Services 60
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Để truy cập tới danh sách sinh viên, ta dùng URI http://restfuljava.com/students và
http://restfuljava.com/students/{name} để truy cập tới một sinh viên cụ thể, có định
danh duy nhất là giá trị “name”.
Hình 3. 1 Lược đồ tuần tự của một yêu cầu GET
Lưu ý:
Phương thức HTTP GET chỉ nên dùng để lấy các đại diện. Như đã biết, ta có thể
dùng yêu cầu GET để cập nhật trạng thái của dữ liệu trên máy chủ nhưng điều này
không được khuyến cáo. Một yêu cầu GET phải an toàn và không thay đổi giá trị.
Yêu cầu an toàn nghĩa là nhiều yêu cầu tới cùng một tài nguyên không làm thay đổi
trạng thái dữ liệu trên máy chủ.
Yêu cầu không thay đổi giá trị nghĩa là nhiều lời gọi có cùng một hành động không
làm thay đổi trạng thái của tài nguyên.
RESTful Web Services 61
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
3.2.3.2. Phương thức POST
Sử dụng phương thức này để chuyển giao trạng thái đại diện mới của một tài
nguyên từ máy khách đến máy chủ (hay nói đơn giản là dùng để tạo tài nguyên).
Phương thức HTTP POST bao gồm cả đại diện của tài nguyên kèm theo trong phần
thân câu lệnh. Đối với phía đầu tiếp nhận, câu lệnh có thể được xử lý bằng cách
thêm tài nguyên vào hệ thống như một phần phụ tài nguyên được định dạng trong
lệnh URI.
Hình 3. 2 Lược đồ tuần tự của một yêu cầu POST
3.2.3.3. Phương thức PUT
Sử dụng phương thức này để chuyển giao trạng thái đại diện được sửa đổi của một
tài nguyên từ máy khách đến máy chủ (hay nói đơn giản là dùng để cập nhật tài
nguyên).
RESTful Web Services 62
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Để cập nhật một tài nguyên, đầu tiên cần phải có đại diện của nó ở máy khách, tiếp
đó, tại cấp độ máy khách chúng ta cập nhật tài nguyên với những giá trị mới mà
chúng ta muốn, cuối cùng cập nhật tài nguyên sử dụng một yêu cầu PUT kèm theo
đại diện mà nó kèm theo.
Hình 3. 3 Lược đồ tuần tự của một yêu cầu PUT
3.2.3.4. Phương thức DELETE
Sử dụng phương thức này để chuyển giao thông tin cần có để thay đổi trạng thái đại
diện của một tài nguyên sang xóa (hay nói đơn giản là dùng để xóa tài nguyên).
RESTful Web Services 63
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Hình 3. 4 Lược đồ tuần tự của một yêu cầu DELETE
Chương trình minh họa 64
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Chương 4. CHƯƠNG TRÌNH MINH HỌA
Chương này trình bày các thiết kế, xây dựng của hệ thống chương trình bao gồm
hai phần:
- Phần web services là ứng dụng có tên QuickPlaces dựa trên công nghệ
RESTful Web Services.
- Phần chương trình trên Android là ứng dụng có tên Place360 sử dụng các
dịch vụ được cung cấp bởi QuickPlaces web serivces.
4.1. QuickPlaces RESTful Web Services
4.1.1. Giới thiệu
Quickplaces là dịch vụ web được xây dựng theo kiến trúc Restful, sử dụng các công
nghệ của Java cung cấp các dịch vụ chia sẻ thông tin, hình ảnh chi tiết về một địa
điểm nào đó, người dùng có thể kết bạn, nhắn tin với nhau và bình luận, đánh giá
địa điểm mà bạn bè đã chia sẻ. Tất cả dữ liệu trao đổi qua lại giữa máy chủ và ứng
dụng máy khách đều có cấu trúc JSON (JavaScript Object Notation).
4.1.2. Tài nguyên
Quickplaces sử dụng cơ sở dữ liệu MySQL, gồm các tài nguyên:
Người dùng: gồm các thông tin của người dùng: tên đăng nhập, mật khẩu,
họ tên, giới tính, ngày sinh, địa chỉ, ảnh đại diện, email, số điện thoại…
Địa điểm: gồm các thông tin về địa điểm được chia sẻ bởi người dùng: tên
địa điểm, người chia sẻ, kinh-vĩ độ, địa chỉ, mô tả và thời gian cập nhật mới
nhất.
Bình luận: chi tiết bình luận của người dùng về một địa điểm được chia sẻ,
gồm có: địa điểm, người bình luận và nội dung bình luận…
Hình ảnh: gồm tất cả hình ảnh về địa điểm, được người dùng upload, gồm:
tên hình ảnh và địa điểm đó.
Chương trình minh họa 65
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Đánh giá: là đánh giá của người dùng về địa điểm được chia sẻ, thích hoặc
không thích.
Thông báo: là những thông báo mà máy chủ gửi đến người dùng khi có bạn
bè đánh giá, bình luận về địa điểm mà người đó đã chia sẻ, hoặc khi có
người gửi tin nhắn đến.
Thông tin kết bạn: liệt kê danh sách bạn bè của một người dùng.
4.1.3. Dịch vụ
4.1.3.1. Dịch vụ người dùng
Sơ đồ Use-case:
Hình 4. 1 Sơ đồ Use-case Dịch vụ người dùng
Đăng ký
- Phương thức: POST
- URI: http://hostname/QuickplacesWS/resources/user/add
- Các tham số truyền lên theo kiểu JSON, gồm:
uc UserServ i...
User
Sign up
Get profile
Get friend list
Like a place
Unlike a place
Update profile
Sign in
Sign out
Chương trình minh họa 66
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 1 Các tham số trong request của dịch vụ Đăng ký
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 username Bắt buộc Tên đăng nhập
2 password Bắt buộc Mật khẩu người dùng
3 fullname Tùy chọn Họ tên
4 address Tùy chọn Địa chỉ
5 avatar Tùy chọn Hình đại diện
6 sex Tùy chọn Giới tính
7 phone Tùy chọn Số điện thoại
8 email Tùy chọn Email
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Đăng nhập
- Phương thức: POST
- URI: http://hostname/QuickplacesWS/resources/user/signin
- Các tham số truyền lên theo kiểu JSON, gồm:
Bảng 4. 2 Các tham số trong request của dịch vụ Đăng nhập
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 username Bắt buộc Tên đăng nhập
2 password Bắt buộc Mật khẩu người dùng
- Kết quả: Nếu thành công, trả về thông tin chi tiết người dùng dạng JSON +
sessionid, ngược lại trả về "UNSUCCESSFUL".
Đăng xuất
- Phương thức: POST
- URI: http://hostname/QuickplacesWS/resources/user/signout
- Các tham số truyền lên theo kiểu JSON, gồm:
Chương trình minh họa 67
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 3 Các tham số trong request của dịch vụ Đăng xuất
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 username Bắt buộc Tên đăng nhập
2 password Bắt buộc Mật khẩu người dùng
3 sessionid Bắt buộc Sessionid của người dùng được
cấp khi đăng nhập
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Lấy thông tin người dùng
- Phương thức: GET
- URI: http://hostname/QuickplacesWS/resources/user/profile
- Các tham số truyền lên theo kiểu Query String, gồm:
Bảng 4. 4 Các tham số trong request của dịch vụ Lấy thông tin cá nhân
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 my_username Bắt buộc Tên đăng nhập
2 fr_username Bắt buộc Mật khẩu người dùng
3 sessionid Bắt buộc Sessionid của người dùng được
cấp khi đăng nhập
- Kết quả: Nếu thành công, trả về thông tin chi tiết người dùng dạng JSON,
ngược lại trả về "UNSUCCESSFUL".
Cập nhật thông tin người dùng
- Phương thức: PUT
- URI: http://hostname/QuickplacesWS/resources/user/update
- Các tham số truyền lên theo kiểu JSON, gồm:
Chương trình minh họa 68
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 5 Các tham số trong request của dịch vụ cập nhật thông tin cá nhân
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 username Bắt buộc Tên đăng nhập
2 password Bắt buộc Mật khẩu người dùng
3 fullname Tùy chọn Họ tên
4 address Tùy chọn Địa chỉ
5 avatar Tùy chọn Hình đại diện
6 sex Tùy chọn Giới tính
7 phone Tùy chọn Số điện thoại
8 email Tùy chọn Email
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Thích một địa điểm (Like)
- Phương thức: POST
- URI: http://hostname/QuickplacesWS/resources/user/like
- Các tham số truyền lên theo kiểu JSON, gồm:
Bảng 4. 6 Các tham số trong request của dịch vụ Like
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 username Bắt buộc Tên đăng nhập của người thích
2 placeid Bắt buộc Mã địa điểm được thích
3 sessionid Bắt buộc Sessionid của người dùng được
cấp khi đăng nhập
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Chương trình minh họa 69
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Hủy thích một địa điểm (Unlike)
- Phương thức: POST
- URI: http://hostname/QuickplacesWS/resources/user/unlike
Bảng 4. 7 Các tham số trong request của dịch vụ Unlike
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 username Bắt buộc Tên đăng nhập của người hủy
thích
2 placeid Bắt buộc Mã địa điểm bị hủy thích
3 sessionid Bắt buộc Sessionid của người dùng được
cấp khi đăng nhập
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Lấy danh sách bạn bè
- Phương thức: GET
- URI: http:// hostname /QuickplacesWS/resources/user/friends
- Tham số truyền lên theo kiểu Query String:
Bảng 4. 8 Các tham số trong request của dịch vụ lấy danh sách bạn bè
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 username Bắt buộc Tên đăng nhập
- Kết quả: Nếu thành công, trả về danh sách bạn bè (kiểu JSON), ngược lại
trả về "UNSUCCESSFUL".
4.1.3.2. Dịch vụ địa điểm
Sơ đồ Use-case:
Chương trình minh họa 70
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Hình 4. 2Sơ đồ Use-case Dịch vụ địa điểm
Lấy các bài viết mới nhất của bạn bè
- Phương thức GET
- URI: http://hostname/QuickplacesWS/resources/places/newest
- Các tham số truyền lên theo kiểu Query String, gồm:
Bảng 4. 9 Các tham số trong request của dịch vụ Feeds
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 username Bắt buộc Tên đăng nhập
2 sobaitren1trang Bắt buộc Số bài viết hiển thị trên một
trang màn hình
3 trang Bắt buộc Trang thứ n
4 sessionid Bắt buộc Sessionid của người dùng
được cấp khi đăng nhập
uc PlaceServ i...
User
Get a place detail
Posst a new place
Update place inforDelete a place
Get people who like
place
Get newesst posts of
friend
Chương trình minh họa 71
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
- Kết quả: Nếu thành công, trả về danh sách bài viết chia sẻ mới nhất của bạn
bè (có thể yêu cầu số lượng bài viết), ngược lại trả về "UNSUCCESSFUL".
Lấy thông tin chi tiết một địa điểm
- Phương thức GET
- URI: http://hostname/QuickplacesWS/resources/place/get
- Các tham số truyền lên theo kiểu Query String, gồm:
Bảng 4. 10 Các tham số trong request của dịch vụ Thông tin địa điểm
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 placeID Bắt buộc Mã địa điểm cần lấy thông tin
2 sessionID Bắt buộc Session Id của người gửi yêu
cầu
- Kết quả: Nếu thành công, trả về chi tiết địa điểm (kiểu JSON), ngược lại trả
về "UNSUCCESSFUL".
Chia sẻ một địa điểm mới
- Phương thức POST
- URI: http://hostname/QuickplacesWS/resources/place/add
- Các tham số truyền lên theo kiểu JSON, bao gồm:
Bảng 4. 11 Các tham số trong request của dịch vụ chia sẻ địa điểm
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 name Tùy chọn Tên địa điểm
2 user Bắt buộc Người chia sẻ
3 latitude Tùy chọn Tọa độ của địa điểm (vĩ độ)
4 longitude Tùy chọn Tọa độ của địa điểm (kinh độ)
5 updateTime Tùy chọn Thời gian cập nhật lần cuối
6 address Tùy chọn Địa chỉ
7 description Tùy chọn Mô tả về địa điểm
Chương trình minh họa 72
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Xóa một địa điểm
- Phương thức PUT
- URI: http://hostname/QuickplacesWS/resources/place/delete
- Các tham số truyền lên theo kiểu JSON, bao gồm:
Bảng 4. 12 Các tham số trong request của dịch vụ Xóa địa điểm
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 id Bắt buộc Mã địa điểm cần xóa
2 sessionid Bắt buộc Sessionid của người dùng
được cấp khi đăng nhập
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Lấy danh sách người dùng đã thích một địa điểm
- Phương thức GET
- URI: http://hostname/QuickplacesWS/resources/place/peoplelike
- Các tham số truyền lên theo kiểu Query String, gồm:
Bảng 4. 13 Các tham số trong request của dịch vụ Danh sách người thích
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 placeID Bắt buộc Địa điểm cần lấy thông tin
2 sessionID Bắt buộc Session ID của người gửi yêu
cầu
- Kết quả: Nếu thành công, trả về danh sách người dùng đã thích địa điểm
(kiểu JSON), ngược lại trả về "UNSUCCESSFUL".
Chương trình minh họa 73
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
4.1.3.3. Dịch vụ bình luận
Sơ đồ Use-case:
Hình 4. 3 Sơ đồ Use-case Dịch vụ bình luận
Lấy danh sách các bình luận của một địa điểm
- Phương thức GET
- URI: http://hostname/QuickplacesWS/resources/comment
- Tham số truyền theo kiểu Query String:
Bảng 4. 14 Các tham số trong request của dịch vụ Lấy danh sách bình luận
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 placeID Bắt buộc Địa điểm cần lấy thông tin
2 sessionID Bắt buộc Session ID của người gửi yêu
cầu
- Kết quả: Nếu thành công, trả về danh sách các bình luận của địa điểm (kiểu
JSON), ngược lại trả về "UNSUCCESSFUL".
Bình luận một địa điểm
- Phương thức POST
uc CommentServ i...
User
Get all comments of
place
Comment a place
Delete a comment
Chương trình minh họa 74
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
- URI: http://hostname/QuickplacesWS/resources/comment
- Các tham số truyền lên theo kiểu JSON, gồm:
Bảng 4. 15 Các tham số trong request của dịch vụ Bình luận
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 placeid Bắt buộc Địa điểm được bình luận
2 username Bắt buộc Người bình luận
3 content Tùy chọn Nội dung bình luận
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Xóa một bình luận
- Phương thức PUT
- URI: http://hostname/QuickplacesWS/resources/comment
- Các tham số truyền lên theo kiểu JSON, gồm:
Bảng 4. 16 Các tham số trong request của dịch vụ Xóa bình luận
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 id Bắt buộc Mã bình luận cần xóa
2 username Bắt buộc Người xóa
3 sessionid Bắt buộc Sessionid của người dùng được
cấp khi đăng nhập
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
4.1.3.4. Dịch vụ thông báo
Sơ đồ Use-case:
Chương trình minh họa 75
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Hình 4. 4 Sơ đồ Use-case Dịch vụ thông báo
Lấy những thông báo chưa đọc của người dùng
- Phương thức GET
- URI: http://hostname/QuickplacesWS/resources/notify
- Tham số truyền theo kiểu Query String:
Bảng 4. 17 Các tham số trong request của dịch vụ nhận thông báo
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 username Bắt buộc Người dùng cần lấy thông
báo
2 sessionid Bắt buộc SessionID của người gửi
request
- Kết quả: Nếu thành công, trả về danh sách các thông báo chưa đọc của
người dùng (kiểu JSON), ngược lại trả về "UNSUCCESSFUL".
Cập nhật thông báo (thiết lập thông báo đã được đọc)
- Phương thức PUT
- URI: http://hostname/QuickplacesWS/resources/notify
- Tham số truyền lên theo kiểu JSON:
uc Notification serv i...
User
Get unread
notifications of user
Set read status for a
notification
Send message to
friend
Chương trình minh họa 76
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 18 Các tham số trong request của dịch vụ cập nhật thông báo
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 id Bắt buộc Mã của thông báo cần thiết
lập
2 sessionid Bắt buộc SessionID của người gửi
request
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
4.1.3.5. Dịch vụ bạn bè
Sơ đồ Use-case:
Hình 4. 5 Sơ đồ Use-case Dịch vụ bạn bè
Yêu cầu kết bạn
- Phương thức POST
- URI: http://hostname/QuickplacesWS/resources/friends/request
- Các tham số truyền lên theo kiểu JSON:
uc Friend Serv i...
User
Request to make
friends
Confirm a friend
request
Unfriend
Chương trình minh họa 77
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 19 Các tham số trong request của dịch vụ kết bạn
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 user1 Bắt buộc Người yêu cầu kết bạn
2 user2 Bắt buộc Người được yêu cầu kết bạn
3 sessionid Bắt buộc sessionid của người yêu cầu kết
bạn
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Xác nhận yêu cầu kết bạn
- Phương thức PUT
- URI: http://hostname/QuickplacesWS/resources/friends/confirm
- Các tham số truyền lên theo kiểu JSON:
Bảng 4. 20 Các tham số trong request của dịch vụ trả lời yêu cầu kết bạn
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 user1 Bắt buộc Người yêu cầu kết bạn
2 user2 Bắt buộc Người xác nhận
3 sessionid Bắt buộc sessionid của người xác
nhận
4 confirm Bắt buộc Chấp nhận kết bạn (true)
hoặc không (false)
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
Hủy quan hệ bạn bè (unfriend)
- Phương thức PUT
- URI: http://hostname/QuickplacesWS/resources/friends/unfriend
- Các tham số truyền lên theo kiểu JSON:
Chương trình minh họa 78
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 21 Các tham số trong request của dịch vụ Unfriend
STT Tên tham số Yêu cầu Ý nghĩa/ghi chú
1 user1 Bắt buộc Người yêu cầu hủy
2 user2 Bắt buộc Người bị hủy
3 sessionid Bắt buộc sessionid của người yêu cầu
- Kết quả: Nếu thành công, trả về chuỗi "SUCCESSFUL", ngược lại trả về
"UNSUCCESSFUL".
4.1.4. Thiết kế dữ liệu
Sơ đồ dữ liệu:
Hình 4. 6 Sơ đồ dữ liệu Web Services
Chương trình minh họa 79
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
4.1.4.1. Bảng User
Bảng 4. 22 Bảng User
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/ghi chú
1 Username Varchar Not null Tên đăng nhập / Khóa
chính của bảng User
2 Password Varchar Not null Mật khẩu người dùng
3 Fullname Varchar Họ tên
4 Address Varchar Địa chỉ
5 Avatar Varchar Hình đại diện
6 Sex Varchar Giới tính
7 Phone Varchar Số điện thoại
8 Email Varchar Email
4.1.4.2. Bảng Place
Bảng 4. 23 Bảng Place
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/ghi chú
1 ID Varchar Not null Khóa chính của bảng
Place
2 Name Varchar Tên địa điểm
3 User Varchar Người chia sẻ
4 Latitude Varchar Tọa độ của địa điểm (vĩ
độ)
5 Longitude Varchar Tọa độ của địa điểm (kinh
độ)
6 UpdateTime DateTime Thời gian cập nhật lần
cuối
7 Address Varchar Địa chỉ
8 Description Varchar Mô tả về địa điểm
Chương trình minh họa 80
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
4.1.4.3. Bảng Comment
Bảng 4. 24 Bảng Comment
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/ghi chú
1 ID Varchar Not null Khóa chính của bảng
Comment
2 Place Varchar ID của địa điểm
3 User Varchar Người bình luận
4 Content Text Nội dung bình luận
5 TimePost DateTime Thời gian
6 UnRead Boolean Trạng thái (đã xem hay
chưa)
4.1.4.4. Bảng Likes
Bảng 4. 25 Bảng Likes
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/ghi chú
1 ID Integer Not null Khóa chính của bảng
Likes
2 Liker Varchar Not null Người like
3 Place Varchar Not null Địa điểm được like
4.1.4.5. Bảng Notification
Bảng 4. 26 Bảng Notification
STT Tên thuộc tính Kiểu Ràng
buộc Ý nghĩa/ghi chú
1 ID Varchar Not
null
Khóa chính của bảng
Notification
2 Sender Varchar Người gây ra thông báo
3 Receiver Varchar Người nhận thông báo
4 Type Varchar Kiểu thông báo (Comment,
Like, Message)
Chương trình minh họa 81
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
5 Content Text Nội dung
6 UnRead Boolean Trạng thái (đã xem hay chưa)
7 AtTime DateTime Thời gian gửi thông báo
4.1.4.6. Bảng Friends
Bảng 4. 27 Bảng Friends
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/ghi chú
1 User1 Varchar Not null Khóa chính / Người yêu
cầu kết bạn
2 User2 Varchar Not null Khóa chính / Người được
yêu cầu kết bạn
3 AreFriends Boolean Tình trạng (đã xác nhận
hay chưa)
4.1.4.7. Bảng Photo
Bảng 4. 28 Bảng Photo
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/ghi chú
1 ID Varchar Not null Khóa chính của bảng
Photo
2 Name Varchar Tên hình
3 Url Varchar Đường dẫn
4 Place Varchar Địa điểm của hình
4.2. Ứng dụng tìm kiếm và chia sẻ địa điểm trên Android – Place360
4.2.1. Giới thiệu
Trong thời đại hiện nay, cùng với sự phát triển vượt bật của khoa học công nghệ,
điện thoại di động đã trở nên hết sức phổ biến trong cộng đồng. Không chỉ là những
chiếc điện thoại dùng cho mục đích sơ khai của nó là liên lạc giữa những người ở
Chương trình minh họa 82
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
cách xa nhau, điện thoại này nay còn là những chiếc điện thoại thông minh, có thể
làm được nhiều việc khác phục vụ cho nhu cầu giải trí, công việc, hay mọi hoạt
động khác trong cuộc sống của chúng ta. Đặc điểm nổi bậc của các thiết bị di động
thông minh là chúng ta có thể sử dụng chúng một cách nhanh chóng và tiện lợi ở
mọi lúc, mọi nơi.
Vấn đề đặt ra là khi một người khách du lịch, hay một người nào đó đến với một
thành phố xa lạ với họ, nơi những đường đi, những địa điểm xung quanh họ đều là
những điều mới lạ. Làm cách nào để họ có thể dễ dàng tìm được những địa điểm
như: cây xăng, nhà hàng, khách sạn, các địa điểm du lịch,…; làm sao để họ biết địa
điểm đó xa hay gần, đi đến đó bằng phương tiện nào là nhanh chóng và tiện lợi
nhất; cách đi như thế nào? Họ có thể tìm mua một bản đồ để tìm đường, có thể hỏi
những người dân địa phương để biết địa điểm cần đến nằm ở đâu. Tuy nhiên, bản
đồ và con người thì không thể biết được tất cả các địa danh, biết được số điện thoại,
thông tin chi tiết của tất cả các địa danh trong thành phố.
Bên cạnh đó, những địa điểm xung quanh ta là vô số, từ những nhà hàng, quán cà
phê, những địa danh nổi tiếng cho đến những quán cóc, vỉa hè, những địa điểm bình
dân thôn quê khác cũng là những địa điểm hấp dẫn của văn hóa Việt Nam ta. Chắc
chắn rằng trong chúng ta không ai có thể biết được hết những địa điểm hấp dẫn đó
của một đất nước, hay đơn giản hơn là của một thành phố. Ta chỉ có thể mỗi người
từng đến một vài địa điểm nào đó và chỉ biết những địa điểm đó. Vậy nếu chúng ta
muốn bạn bè mình cũng biết về địa điểm đó, biết nó ở đâu, đến đó như thế nào,
thông tin chi tiết về nơi đó… thì ai hay cái gì sẽ giúp ta thực hiện điều đó?
Giải pháp đặt ra là một ứng dụng trên một chiếc điện thoại thông minh, có thể giúp
người sử dụng tìm được thông tin về những địa điểm xung quanh họ như: địa chỉ, số
điện thoại, cách nơi họ đang đứng bao xa, và sẽ trở thành người chỉ đường từng bức
để đi đến chính xác địa điểm đó. Có thể giúp người sử dụng chia sẻ những địa điểm
mà mình đã đến, lấy những thông tin đóng góp, bình luận của bạn bè về nơi đó.
Việc này sẽ được thực hiện một cách nhanh chóng, dễ dàng nếu người khách du lịch
Chương trình minh họa 83
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
đó cầm trên tay một chiếc điện thoại sử dụng hệ điều hành Android và có cài đặt
ứng dụng Place360, ứng dụng tìm kiếm và chia sẻ địa điểm hiệu quả nhất cho người
sử dụng điện thoại Android hiện nay.
4.2.2. Chức năng
Sơ đồ Use-case:
Hình 4. 7 Sơ đồ Use-case ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
uc Use Case Vi...
ảQu n lý Thông báo
ẻ ớ ạChia s v i b n bè
ả ảQu n lý tài kho n ế ị ểTìm ki m đ a đi m
User
Quản lý từ khóa tìm
kiếm
Tìm địa điểm
Sắp xếp địa điểm
theo khoảng cách
Hiển thị chi tiết địa
điểm
Hiển thị địa điểm trên
bản đồ
Dẫn đường bằng lời
Dẫn đường bằng hình
v ẽ
Gọi điện đến địa
điểm
Lưu địa điểm yêu
thích
Xem danh sách địa
điểm yêu thích
Tùy chỉnh tìm kiếm
Đăng ký
Đăng xuất
Chỉnh sửa thông tin cá
nhân
Kết bạn
Chia sẻ địa điểm
Xem danh sách địa
điểm của bạn bè đã
chia sẻ
Bình luận
Thích
Nhận các thông báo Trả lời các thông báo
Đăng nhập
Quản lý tài khoản
Chia sẻ bạn bè
Quản lý thông báo
«include»
«include»
«include»
«include»
Chương trình minh họa 84
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Danh sách các chức năng của ứng dụng:
Bảng 4. 29 Danh sách các chức năng của ứng dụng Place360
ID Tên chức năng
UC01 Xác định vị trí hiện tại của người sử dụng
Tìm kiếm địa điểm
UC02 Quản lý các từ khóa tìm kiếm
UC03 Tìm các địa điểm theo từ khóa
UC04 Sắp xếp các địa điểm theo khoảng cách
UC05 Hiển thị thông tin chi tiết về một địa điểm
UC06 Hiển thị các địa điểm trên bản đồ
UC07 Dẫn đường bằng lời
UC08 Dẫn đường bằng hình vẽ trên bản đồ
UC09 Gọi điện đến một địa điểm
UC10 Lưu danh sách các địa điểm yêu thích
UC11 Xem danh sách các địa điểm yêu thích
UC12 Tùy chỉnh tìm kiếm
Quản lý tài khoản
UC13 Đăng ký
UC14 Đăng nhập
UC15 Đăng xuất
UC16 Chỉnh sửa thông tin cá nhân
UC17 Kết bạn
Chia sẻ địa điểm
UC18 Chia sẻ một địa điểm
UC19 Xem danh sách các địa điểm bạn bè đã chia sẻ
Chương trình minh họa 85
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
UC20 Xem các địa điểm bạn bè đã chia sẻ trên bản đồ
UC21 Bình luận cho một địa điểm
UC22 Thích một địa điểm
Quản lý các thông báo
UC23 Thông báo bình luận, like mới
UC24 Thông báo yêu cầu kết bạn
4.2.2.1. Xác định vị trí hiện tại của người dùng (UC01)
- Chức năng này được thực hiện ngay khi người sử dụng khởi động ứng dụng.
- Với những điện thoại có hộ trợ tính năng định vị toàn cầu (dựa vào GPS hoặc
Network), ứng dụng sẽ tiếp nhận tọa độ từ hệ thống và sử dụng Google
Geocoding để xác định địa chỉ cụ thể của người sử dụng.
- Với những điện thoại không hỗ trợ hệ thống định vị, người dùng có thể nhập
vào địa chỉ, ứng dụng sẽ căn cứ vào đó tìm tọa độ của người sử dụng.
4.2.2.2. Tìm kiếm địa điểm
1) Quản lý các từ khóa tìm kiếm (UC02)
- Chức năng này được thực hiện khi người sử dụng chọn chức năng “Places” trên
màn hình chính.
- Nếu là lần đầu tiên ứng dụng được cài đặt và sử dụng trên điện thoại, ứng dụng
sẽ tự động nạp các từ khóa tìm kiếm đầu tiên lên danh sách, bao gồm: Coffee,
Shopping, Restaurant, Park, Gas, Hospital, ATM, Cinema, University.
- Nếu không phải là lần đầu tiên chạy ứng dụng, ứng dụng sẽ nạp các từ khóa có
trong cơ sở dữ liệu lên danh sách.
- Người sử dụng có thể thêm từ khóa bằng cách sử dụng nút Add ở menu dưới, có
thể chỉnh sửa hoặc xóa bằng cách chạm và giữ ngón tay trên từ khóa tìm kiếm
Chương trình minh họa 86
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
trong danh sách. Trong đó, 6 từ khóa đầu tiên trong danh sách thì không được
phép xóa hoặc sửa, để đảm bảo ứng dụng không bị mất các từ khóa mặc định.
2) Tìm các địa điểm theo từ khóa (UC03)
- Chức năng này được thực hiện khi người sử dụng nhấn chọn một từ khóa tìm
kiếm trên danh sách, hoặc nhấn chọn vào nút tìm kiếm trên menu và nhấn OK
sau khi đã nhập từ khóa.
- Ứng dụng sẽ dựa vào từ khóa để gửi yêu cầu lên Google Places Search Server,
nhận kết quả trả về và hiển thị thành danh sách các địa điểm cùng với thông tin
về: tên, địa chỉ, khoảng cách.
- Số địa điểm tối đa là 20. Số địa điểm hiển thị trong danh sách kết quả người
dùng có thể tùy chỉnh, các giá trị có thể là: 5, 10, 15, 20.
3) Sắp xếp các địa điểm theo khoảng cách (UC04)
- Chức năng này được thực hiện khi người dùng đang ở màn hình hiển thị danh
sách các kết quả tìm kiếm và chọn vào nút “Sort”.
- Ứng dụng sẽ sắp xếp các địa điểm trong danh sách theo thứ tự từ gần đến xa.
4) Hiển thị thông tin chi tiết về một địa điểm (UC05)
- Chức năng này được thực hiện khi người sử dụng chọn vào một địa điểm trong
danh sách các địa điểm kết quả tìm được.
- Ứng dụng sẽ hiển thị màn hình thông tin chi tiết về địa điểm bao gồm các thông
tin: tên địa điểm, địa chỉ, khoảng cách (km), khoảng thời gian đi từ vị trí của
người sử dụng đến địa điểm (phút), địa chỉ, số điện thoại; các nút chức năng:
xem trên bản đồ, xem dẫn đường, gọi điện và thêm vào danh sách yêu thích.
5) Hiển thị các địa điểm trên bản đồ (UC06)
- Chức năng này được thực hiện khi người sử dụng chọn vào nút “Map” trên màn
hình thông tin chi tiết về địa điểm.
- Ứng dụng sẽ hiển thị một bản đồ do Google Maps API cung cấp, các địa điểm
trong danh sách kết quả tìm được cũng được hiển thị trên bản đồ dưới dạng biểu
tượng “pin”.
- Trên bản đồ:
Chương trình minh họa 87
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Người sử dụng có thể chọn từng biểu tượng “pin” để xem được popup có tên
của địa điểm, có thể phóng to, thu nhỏ, di chuyển bản đồ.
Option menu có các chức năng: hiển thị vị trí của người sử dụng, thay đổi map
mode và hiển thị hình vẽ dẫn đường, trở về màn hình chính.
6) Dẫn đường bằng lời (UC07)
- Chức năng này được thực hiện khi người sử dụng chọn vào nút “Directions”
trên màn hình thông tin chi tiết về địa điểm.
- Ứng dụng sẽ hiển thị một danh sách tuần tự các lời dẫn đường từ vị trí của
người sử dụng đến địa điểm cần đến, bao gồm cả khoảng cách (km) và thời gian
(phút) trên từng đoạn đường.
7) Dẫn đường bằng hình vẽ trên bản đồ (UC08)
- Chức năng này được thực hiện khi người sử dụng chọn vào biểu tượng “Show
route” trên bản đồ tại màn hình dẫn đường bằng lời, hoặc chọn “Show route”
trong Option menu trên màn hình hiển thị bản đồ.
- Ứng dụng sẽ vẽ trên bản đồ đường đi từ vị trí người sử dụng đến địa điểm được
chọn theo từng đoạn, sao cho toàn bộ đường vẽ hiển thị trọn vẹn trên màn hình
và không bị che khuất.
8) Gọi điện đến một địa điểm (UC09)
- Chức năng này được thực hiển khi người sử dụng chọn vào nút “Call” trên màn
hình thông tin chi tiết của địa điểm.
- Điều kiện để thực hiện được chức năng này là thông tin về số điện thoại của địa
điểm đó phải tồn tại.
9) Lưu danh sách các địa điểm yêu thích (UC10)
- Chức năng này được thực hiện khi người sử dụng chọn vào nút “Add to
favourite” trên màn hình thông tin chi tiết của địa điểm.
- Nếu địa điểm đã được thêm vào cơ sở dữ liệu trước đó rồi, ứng dụng báo cho
người sử dụng biết địa điểm đã tồn tại trong danh sách yêu thích.
- Nếu chưa tồn tại, ứng dụng sẽ lưu thông tin của địa điểm vào danh sách các địa
điểm yêu thích.
10) Xem danh sách các địa điểm yêu thích (UC11)
Chương trình minh họa 88
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
- Chức năng này được thực hiện khi người sử dụng chọn vào nút “Favourite” trên
menu dưới của màn hình Places.
- Ứng dụng sẽ hiển thị màn hình hiển thị danh sách các địa điểm yêu thích đã
được lưu.
- Người sử dụng có thể chọn xem theo danh mục các loại địa điểm.
11) Tùy chỉnh tìm kiếm (UC12)
- Chức năng này được thực hiện khi người sử dụng chọn vào nút “Settings”
trên menu trên màn hình Places.
- Ứng dụng sẽ hiển thị màn hình các tùy chỉnh tìm kiếm, ví dụ như chọn số
kết quả mỗi lần tải khi tìm các địa điểm, bán kính tìm kiếm.
4.2.2.3. Quản lý tài khoản
1) Đăng ký (UC13)
- Chức năng này được thực hiện khi người sử dụng chọn vào “Create an account”
trên màn hình đăng nhập.
- Để đăng ký một tài khoản mới, người sử dụng phải điền đầy đủ các thông tin
bao gồm: user name (tên đăng nhập), password (mật khẩu), repeat password
(nhập lại mật khẩu), full name (tên đầy đủ), sex (giới tính). Sau đó nhấn vào
“Sign up”.
2) Đăng nhập (UC14)
- Chức năng này được thực hiện khi người sử dụng chọn chức năng đăng nhập
trong Option menu của màn hình chính.
- Ứng dụng sẽ hiển thị màn hình yêu cầu người dùng nhập tên đăng nhập, mật
khẩu để đăng nhập. Nếu đăng nhập thành công thì sẽ quay trở về màn hình
chính.
3) Đăng xuất (UC15)
- Chức năng này được thực hiện khi người sử dụng chọn chức năng đăng xuất
trong Option menu của màn hình chính.
Chương trình minh họa 89
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
- Sau khi đăng xuất, toàn bộ các thao tác liên quan đến tài khoản như: chia sẻ địa
điểm, xem danh sách địa điểm, danh sách bạn bè, thông tin cá nhân sẽ bị ngăn
chặn thực hiện.
4) Chỉnh sửa thông tin cá nhân (UC16)
- Chức năng này được thực hiện khi người sử dụng chọn chức năng “Edit” trong
Option menu của màn hình “Profile”.
- Ứng dụng sẽ hiển thị màn hình chỉnh sửa thông tin cá nhân bao gồm:
Avatar: người sử dụng có thể đổi avatar bằng cách tự chụp hình (nút
Camera) hoặc lấy hình từ điện thoại (nút Gallery).
Các thông tin khác: tên (full name), mật khẩu (password), ngày tháng năm
sinh (birthday), giới tính (sex), địa chỉ nơi ở (address), email, số điện thoại
(phone number).
User name không thể thay đổi.
5) Kết bạn (UC17)
- Chức năng này được thực hiện khi người sử dụng bấm vào nút “Add Friend”
trên màn hình “Profile” của một người dùng khác (chưa có trong danh sách bạn
bè), hoặc khi người sử dụng bấm vào nút “Add Friend” trên màn hình
“Friends”.
- Nếu thực hiện trên màn hình “Proflie”, ứng dụng sẽ tự động gửi yêu cầu kết bạn
đến tài khoản kia. Nếu thực hiện trên màn hình “Friends”, ứng dụng sẽ yêu cầu
người sử dụng nhập vào “User name” của người nhận yêu cầu kết bạn, sau đó
sẽ gửi yêu cầu kết bạn.
- Tài khoản nhận được yêu cầu kết bạn trên bản thông báo ở màn hình chính.
Người nhận yêu cầu có quyền đồng ý (Accept) hoặc không đồng ý (Refuse) kết
bạn với người kia.
4.2.2.4. Chia sẻ địa điểm
- Chia sẻ một địa điểm (UC18)
Chương trình minh họa 90
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
- Chức năng này được thực hiện khi người sử dụng bấm vào biểu tượng “Post”
trên màn hình chính, hoặc bấm vào nút “Share” trên màn hình chi tiết của địa
điểm.
- Trên màn hình chia sẻ địa điểm, người sử dụng có thể viết miêu tả về địa điểm,
tên địa điểm, địa chỉ và thêm hình ảnh cho địa điểm bằng cách chụp hình ngay
(Camera) hoặc lấy hình từ điện thoại (Gallery).
- Nếu địa điểm này được chia sẻ từ địa điểm tìm được trong chức năng “Tìm
kiếm địa điểm” thì vị trí (kinh độ, vĩ độ) của địa điểm này sẽ được lấy tự động.
Nếu đây là địa điểm mới của người sử dụng muốn chia sẻ thì vị trí sẽ là vị trí
hiện tại của người sử dụng, hoặc có thể xác định lại vị trí bằng cách chỉ trên bản
đồ thông qua nút “Tap on map”
- Sau khi bấm nut “Post” để đăng địa điểm lên Server, các hình ảnh kèm them
cũng sẽ được Upload ngay sau đó thông qua một tiến trình chạy ngầm và hiển
thị trên thanh “Notifications” của điện thoại.
1) Xem danh sách các địa điểm bạn bè đã chia sẻ (UC19)
- Chức năng này được thực hiện khi người sử dụng bấm vào biểu tượng “Feeds”
trên màn hình chính.
- Ứng dụng sẽ tự động tải về một danh sách các địa điểm mới nhất được bạn bè
chia sẻ bao gồm toàn bộ thông tin về địa điểm và cả hình ảnh về địa điểm đó.
- Người sử dụng có thể sử dụng các chức năng bình luận (comment), thích (like),
xem ai thích (who like), hiển thị các địa điểm lên bản đồ (map) cho mỗi địa
điểm.
2) Xem các địa điểm bạn bè đã chia sẻ trên bản đồ (UC20)
- Chức năng này được thực hiện khi người sử dụng bấm vào “map” trong popup
tùy chọn trên màn hình “Feeds”.
- Các địa điểm trong danh sách các địa điểm trên màn hình “Feeds” sẽ được hiển
thị trên bản đồ. Hình ảnh của mỗi địa điểm là hình avatar của người đã chia sẻ
địa điểm đó, có kèm theo tên địa điểm.
- Trên bản đồ người dùng có thể sử dụng đầy đủ các chức năng như: vị trí hiện
tại, dẫn đường, hiển thị chi tiết…
Chương trình minh họa 91
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
3) Bình luận cho một địa điểm (UC21)
- Chức năng này được thực hiện khi người sử dụng bấm vào “Comment” trong
popup tùy chọn trên màn hình “Feeds”.
- Ứng dụng sẽ hiển thị màn hình “Comment” với thông tin về địa điểm đó, cùng
với danh sách các bình luận trước đó.
- Người sử dụng có thể viết bình luận cho địa điểm, xóa bình luận nếu đó là bình
luận của mình, nhưng không thể chỉnh sửa lại bình luận đã đăng.
4) Thích một địa điểm (UC22)
- Chức năng này được thực hiện khi người sử dụng bấm vào “Like” trong popup
tùy chọn trên màn hình “Feeds”.
- Sau khi bấm nút này, nếu đã “like” rồi thì ứng dụng sẽ thông báo người sử dụng
đã thích địa điểm này rồi, ngược lại thì số người thích sẽ tăng lên 1 và hiển thị
ngay sau đó.
4.2.2.5. Quản lý các thông báo
1) Thông báo bình luận, thích (UC23)
- Khi có một người dùng khác bình luận hoặc thích địa điểm người dùng đã chia
sẻ, số lượng thông báo sẽ được hiển thị trên một biểu tượng nhỏ (Notifications)
trên màn hình chính của ứng dụng.
- Khi bấm vào biểu tượng này, danh sách các thông báo sẽ được hiển thị, và khi
bấm vào một thông báo sẽ hiển thị màn hình “Comments” của địa điểm được
thông báo.
2) Thông báo yêu cầu kết bạn (UC24)
- Khi có người dùng khác gửi yêu cầu kết bạn đến người dùng hiện tại, thì cũng
sẽ hiển thị thông báo lên trên biểu tượng “Notifications”.
- Khi chọn một thông báo yêu cầu kết bạn trong danh sách các thông báo, người
dùng sẽ có hai lựa chọn: đồng ý kết bạn (Accept) hoặc từ chối (Refuse).
Chương trình minh họa 92
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
4.2.3. Sơ đồ lớp
4.2.3.1. Sơ đồ lớp phần liên lạc với server
Hình 4. 8 Sơ đồ lớp phần liên lạc với Server
- ServerConnection: bao gồm các phương thức để liên lạc với Web Services
- Asyntask: sử dụng một tiến trình riêng để thực hiện phương thức
doInBackGround, phương thức này sẽ thực hiện các phương thức của
ServerConnection và trả về kết quả thông qua phương thức onPostExecute.
- Handler: Asyntask sử dụng một handler để gửi thông báo khi hoàn thành
xong tiến trình, Activity cũng sử dụng handler đó để nhận thông báo của
Asyntask. Handler này do Activity khởi tạo và cũng bị hủy khi Acitivy bị
hủy.
- Activity: khởi tạo Handler, Asysntask, nhận thông báo của Handler và hiển
thị các kết quả cho người dùng.
class Logical Vi...
Activ ity
- handler: Handler
+ onCreate(Bundle) : void
+ displayResults() : void
+ onDestroy() : void
Serv erConnection
+ SendDELETE() : void
+ SendGET() : String
+ SendPOST() : String
+ SendPUT() : String
Handler
+ sendMessage(int) : void
+ handleMessage(Message) : void
Asyntask
- handler: Handler
+ doInBackGround(T) : T
+ onPostExecute(T) : T
+ onProgressUpdate() : T
Chương trình minh họa 93
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
4.2.3.2. Sơ đồ lớp các danh sách
Hình 4. 9 Sơ đồ lớp các danh sách
- LinearLayout: lớp layout cơ sở, dùng để chứa các View.
- CustomListItem: extends từ lớp LinearLayout, chứa các View khác nhau
dùng để hiển thị các nội dung khác nhau.
- BaseAdapter: lớp adapter cơ sở, dùng để làm cầu nối giữa dữ liệu và
ListView
- List: lớp cơ sở của Java dùng để chứa một danh sách các đối tượng.
- CustomListAdapter: extends từ lớp BaseAdapter, chứa một danh sách
(List). Dữ liệu từ danh sách này sẽ được hiển thị lên các view tương ứng
của CustomListView thông qua cài đặt trong phương thức getView.
- ListView: dùng để hiển thị danh sách lên màn hình.
class Logical Vi...
LinearLayout
CustomListItem
- view: View
+ CustomListItem() : void
BaseAdapter
+ GetView(int, View, ViewGroup) : View
CustomListAdapter
- l istItem: List<CustomListItem>
+ GetView(int, View, ViewGroup) : View
+ CustomListAdapter(T) : void
ListView
List
+ get(int) : Object
+ size() : int
+ add(Object) : void
+ remove(Object) : void
10..*
Chương trình minh họa 94
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
4.2.3.3. Sơ đồ lớp phần truy xuất Database
Hình 4. 10 Sơ độc lớp phần truy xuất Database
- DatabaseHelper: khởi tạo, upgrade cơ sở dữ liệu SQLite.
- DBAdapter: mở, đóng kết nối cơ sở dữ liệu SQLite.
- Catalog_DAO: các thao tác: thêm, cập nhật, xóa, lấy Catalog.
- Favourite_DAO: các thao tác: thêm, cập nhật, xóa, lấy Favourite.
class Database
DBAdapter
- mDbHelper: DatabaseHelper
- mDB: SQLiteDatabase
+ open() : DBAdapter
+ close() : void
Catalog_DAO
+ AddCatalog(Catalog, Context) : boolean
+ UpdateCatalog(Catalog, Context) : boolean
+ getAllCatalog(Context) : ArrayList<Catalog>
+ getCatalog(Context, int) : Catalog
+ DeleteCatalog(Context, int) : boolean
Fav ourite_DAO
+ AddFavourite(Favourite, Context) : boolean
+ getAllFavourite(Context) : ArrayList<Favourite>
+ getFavouriteByCatalog(Context, int) : ArrayList<Favourite>
+ getFavourite(Context, int) : Favourite
+ DeleteFavourite(Context, int) : boolean
Catalog
- id: int
- name: String
- search_key: String
- icon: int
- isChecked: boolean
- isEditable: boolean
+ Catalog()
Fav ourite
- id: int
- name: String
- lat: double
- long: double
- catalog: int
- address: String
- phone_number: String
+ Favourite()
DatabaseHelper
+ DatabaseHelper(Context) : void
+ onCreate(SQLiteDatabase) : void
+ onUpgrade(int, int, SQLiteDatabase) : void
SQLiteOpenHelper
Chương trình minh họa 95
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
4.2.4. Thiết kế dữ liệu
4.2.4.1. Sơ đồ logic
Hình 4. 11 Thiết kế dữ liệu - Sơ đồ Logic
4.2.4.2. Mô tả các bảng dữ liệu
1) Bảng Catalog
Bảng 4. 30 Bảng Catalog
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/ghi chú
1 ID Integer Not null Khóa chính của bảng
Catalog
2 Name Text Not null Tên của danh mục
3 Key word Text Not null Từ khóa tìm kiếm
4 Icon Integer Mã của icon đại diện cho
danh mục
2) Bảng Favourite
Bảng 4. 31 Bảng Favourite
STT Tên thuộc tính Kiểu Ràng buộc Ý nghĩa/ghi chú
1 ID Integer Not null Khóa chính của bảng
Favourite
2 Name Text Not null Tên của của địa điểm
3 Lat Double Not null Latitude – Vĩ độ của địa
điểm
4 Long Double Not null Longitude – Kinh độ của
địa điểm
5 Catalog Integer Là khóa ngoại tham chiếu
từ ID của bảng Catalog
6 Phone Text Số điện thoại của địa điểm
7 Address Text Địa chỉ của địa điểm
Chương trình minh họa 96
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
4.2.5. Thiết kế giao diện
1) Giao diện chính
Hình 4. 12 Giao diện chính
Bảng 4. 32 Các thành phần trên giao diện chính
Số thứ tự Chức năng
1 Notifications – số các thông báo chưa đọc
2 Feeds – chuyển qua màn hình hiển thị danh sách các địa
điểm mới nhất mà bạn bè đã chia sẻ
3 Post – chuyển qua màn hình chia sẻ một địa điểm mới
4 Friends – chuyển qua màn hình danh sách bạn bè
5 Places – chuyển qua màn hình tìm kiếm địa điểm
1
5
6
7
2
3
4
8
Chương trình minh họa 97
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
6 Profile – chuyển qua màn hình thông tin cá nhân
7 Settings – chuyển qua màn hình tùy chỉnh của ứng dụng
8 Hiển thị vị trí hiện tại của người dùng
2) Giao diện tìm kiếm địa điểm
Hình 4. 13 Giao diện tìm kiếm địa điểm
Bảng 4. 33 Các thành phần trên giao diện tìm kiếm địa điểm
Số thứ tự Chức năng
1 Vị trí hiện tại của người dùng
2 Danh sách các từ khóa tìm kiếm
1
2
3 4 5 6
Chương trình minh họa 98
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
3 Nhập từ khóa tìm kiếm
4 Hiển thị màn hình các địa điểm yêu thích
5 Hiển thị màn hình thêm từ khóa tìm kiếm
6 Hiểm thị màn hình tùy chỉnh tìm kiếm
3) Giao diện quản lý từ khóa tìm kiếm (thêm, xóa, sửa)
Hình 4. 14 Giao diện quản lý từ khóa tìm kiếm
1
2
3
4
5
6
7 8
Chương trình minh họa 99
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 34 Các thành phần trên giao diện quản lý từ khóa tìm kiếm
Số thứ tự Chức năng
1 Chỉnh sửa từ khóa tìm kiếm
2 Xóa từ khóa tìm kiếm
3 Tên hiển thị của từ khóa
4 Từ khóa tìm kiếm
5 Biểu tượng của từ khóa
6 Danh sách các biểu tượng
7 Thêm/cập nhật từ khóa tìm kiếm
8 Hủy thao tác - quay trở về màn hình tìm kiếm địa điểm
4) Giao diện tìm kiếm và thay đổi vị trí hiện tại
Hình 4. 15 Giao diện tìm và thay đổi vị trí hiện tại
1
2
3
Chương trình minh họa 100
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 35 Các thành phần trên giao diện thay đổi vị trí hiện tại
Số thứ tự Chức năng
1 Vị trí hiện tại
2 Từ khóa chỉ số nhà, tên đường, quận huyện… để tìm kiếm
3 Danh sách các kết quả tìm được
5) Giao diện nhập từ khóa tìm kiếm địa điểm nhanh
Hình 4. 16 Nhập từ khóa tìm kiếm
Bảng 4. 36 Các thành phần trên giao diện tìm kiếm nhanh
Số thứ tự Chức năng
1 Từ khóa tìm kiếm
2 Tìm kiếm các địa điểm theo từ khóa
6) Giao diện kết quả tìm kiếm
Chương trình minh họa 101
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Hình 4. 17 Giao diện kết quả tìm kiếm
Bảng 4. 37 Các thành phần trên giao diện kết quả tìm kiếm
Số thứ tự Chức năng
1 Sắp xếp các địa điểm theo khoảng cách từ gần đến
xa
2 Danh sách các địa điểm
3 Tên địa điểm
4 Địa chỉ của địa điểm
5 Khoảng cách từ vị trí người sử dụng đến địa điểm
2
1 3
4
5
Chương trình minh họa 102
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
7) Giao diện chi tiết địa điểm
Hình 4. 18 Chi tiết địa điểm
Bảng 4. 38 Các thành phần trên giao diện chi tiết địa điểm
Số thứ tự Chức năng
1 Tên địa điểm
2 Khoảng cách từ vị trí người sử dụng đến địa điểm
3 Số điện thoại
4 Địa chỉ của địa điểm
5 Điểm đánh giá của địa điểm
6 Hiển thị các địa điểm trên bản đồ
7 Dẫn đường đi từ vị trí người sử dụng đến địa điểm này
8 Gọi điện
9 Thêm địa điểm vào danh sách yêu thích
10 Chia sẻ địa điểm với bạn bè
6 7 8 9
1
2
3
4
5
10
11
Chương trình minh họa 103
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
8) Giao diện bản đồ
Hình 4. 19 Giao diện bản đồ kết quả tìm kiếm
Bảng 4. 39 Các thành phần trên giao diện chi tiết địa điểm
Số thứ tự Chức năng
1 Bản đồ
2 Biểu tượng địa điểm
3 Tên địa điểm, cũng là nút hiển thị thông tin chi tiết địa
điểm
4 Vị trí người sử dụng
Chương trình minh họa 104
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
5 Thu nhỏ bản đồ
6 Phóng to bản đồ
7 Option menu
8 Các kiểu hiển thị bản đồ: satellite, traffic, street view
9 Vẽ đường dẫn đường trên bản đồ
10 Phóng to (zoom) và hiển thị (focus) đến vị trí đang
đứng người sử dụng trên bản đồ
11 Trở về màn hình chính của ứng dụng
9) Giao diện dẫn đường
Hình 4. 20 Giao diện dẫn đường
1
2
3
4 5
6
7
Chương trình minh họa 105
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 40 Các thành phần của giao diện dẫn đường
Số thứ tự Chức năng
1 Điểm bắt đầu
2 Danh sách các đoạn đường
3 Lời dẫn đường trên một đoạn
4 Chiều dài một đoạn đường
5 Thời gian đi hết một đoạn đường
6 Điểm đích
7 Vẽ đường đi trên bản đồ
10) Giao diện Favourite
Hình 4. 21 Giao diện Favourite
1
2
Chương trình minh họa 106
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 41 Các thành phần của giao diện favourite
Số thứ tự Chức năng
1 Chọn danh mục để xem các địa điểm yêu thích
thuộc danh mục đó
2 Danh sách các địa điểm đã lưu
11) Giao diện tùy chỉnh tìm kiếm
Hình 4. 22 Giao diện tùy chỉnh tìm kiếm
Bảng 4. 42 Các thành phần của giao diện tùy chỉnh tìm kiếm
Số thứ tự Chức năng
1 Tùy chỉnh số kết quả (địa điểm) trả về mỗi lần tìm
kiếm
2 Tùy chỉnh bán kính tìm kiếm bằng kilometre
1
2
Chương trình minh họa 107
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
12) Giao diện đăng ký
Hình 4. 23 Giao diện đăng ký
Bảng 4. 43 Các thành phần của giao diện đăng ký
Số thứ tự Chức năng
1 Tên đăng nhập
2 Mật khẩu
3 Nhắc lại mật khẩu
4 Tên đầy đủ
5 Giới tính
6 Nút đăng ký
1
2
3
4
5
6
Chương trình minh họa 108
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
13) Giao diện đăng nhập
Hình 4. 24 Giao diện đăng nhập
Bảng 4. 44 Các thành phần của giao diện đăng nhập
Số thứ tự Chức năng
1 Tên đăng nhập
2 Mật khẩu
3 Nút đăng nhập
4 Chuyển sang màn hình đăng ký tài khoản mới
1
2
3
4
Chương trình minh họa 109
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
14) Giao diện thông tin người dùng (Profile)
Hình 4. 25 Thông tin cá nhân
Bảng 4. 45 Các thành phần của giao diện Thông tin cá nhân
Số thứ tự Chức năng
1 Hình đại diện
2 Tên người dùng
3 Giới tính
4 Số bạn của người dùng
5 Ngày sinh
6 Địa chỉ
7 Danh sách các địa điểm mới nhất mà người dùng đã đã
chỉ sẻ
8 Nút xóa một địa điểm trên danh sách
9 Nút chuyển sang giao diện chỉnh sửa thông tin cá nhân
1
2
3
4 5
6
7
8
9
Chương trình minh họa 110
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
15) Giao diện chỉnh sửa thông tin cá nhân
Hình 4. 26 Chỉnh sửa thông tin cá nhân
Bảng 4. 46 Các thành phần của giao diện chỉnh sửa thông tin cá nhân
Số thứ tự Chức năng
1 Ảnh đại diện, nếu nhấn vào có thể chuyển sang giao diện
hiển thị hình ảnh
2 Nút đổi ảnh đại diện bằng cách chụp trực tiếp từ camera
của điện thoại
3 Nút đổi ảnh đại diện bằng các chọn hình từ kho hình ảnh
của điện thoại
4 Tên đăng nhập, chỉ hiển thị, không thể chỉnh sửa
5 Danh sách các trường thông tin khác: mật khẩu, tên đầy đủ,
giới tính, địa chỉ, số điện thoại, ngày sinh, email.
6 Nút cập nhật thông tin cá nhân
1
2
3
4 5
6
Chương trình minh họa 111
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
16) Giao diện chia sẻ một địa điểm (Post)
Hình 4. 27 Chia sẻ địa điểm
Bảng 4. 47 Các thành phần của giao diện chia sẻ địa điểm
Số thứ tự Chức năng
1 Ảnh đại diện người dùng
2 Mô tả về địa điểm được chia sẻ
3 Tên địa điểm
4 Địa chỉ của địa điểm
5 Những hình ảnh về địa điểm
6 Chuyển sang giao diện bản đồ xác định địa điểm để xác
định lại vị trí của địa điểm theo ý người dùng
7 Mở chức năng chụp ảnh của điện thoại
8 Lựa chọn hình ảnh từ kho hình ảnh của điện thoại
9 Nut chia sẻ địa điểm
1 2
3
4
5
6 7 8 9
Chương trình minh họa 112
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
17) Giao diện danh sách các địa điểm chia sẻ (Feeds)
Hình 4. 28 Danh sách các địa điểm được chia sẻ
Bảng 4. 48 Các thành phần của giao diện Feeds
Số thứ tự Chức năng
1 Cập nhật lại danh sách địa điểm
2 Tên người đã chia sẻ địa điểm
3 Ảnh đại diện của người chia sẻ địa điểm
4 Tên địa điểm
5 Miêu tả về địa điểm
6 Địa chỉ của địa điểm
7 Ngày giờ chia sẻ địa điểm
8 Hình ảnh về địa điểm
9 Số lượng bình luận
1 2
3
4
5
6
7
8
9
10
12
11
14
15 13
Chương trình minh họa 113
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
10 Số lượng người thích
11 Hiển thị Menu dưới mỗi địa điểm trong danh sách
12 Hiển thị màn hình Comments
13 Thích địa điểm
14 Hiển thị danh sách địa điểm lên bản đồ
15 Hiển thị danh sách người đã thích địa điểm
18) Giao diện bình luận (Comments)
Hình 4. 29 Giao diện bình luận
1
4
3
5
6
2
8 9
7
Chương trình minh họa 114
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 49 Các thành phần của giao diện bình luận
Số thứ tự Chức năng
1 Chi tiết một địa điểm – giống như một địa điểm
trên màn hình danh sách các địa điểm được chia sẻ
2 Danh sách các bình luận
3 Tên người bình luận
4 Ảnh đại diện của người bình luận
5 Nội dung bình luận
6 Thời gian bình luận
7 Xóa bình luận
8 Nội dung bình luận mới
9 Gửi bình luận mới
19) Giao diện những người thích một địa điểm
Hình 4. 30 Những người thích một địa điểm
1
2
3
4
Chương trình minh họa 115
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 50 Các thành phần của giao diện những người đã thích
Số thứ tự Chức năng
1 Danh sách những người đã thích địa điểm
2 TextBox dùng để lọc danh sách theo tên
3 Ảnh đại điện của người đã thích địa điểm
4 Tên của người đã thích địa điểm
20) Giao diện bản đồ các địa điểm được chia sẻ
Hình 4. 31 Bản đồ các địa điểm được chia sẻ
1
2
3
Chương trình minh họa 116
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4. 51 Các thành phần của giao diện bản đồ địa điểm chia sẻ
Số thứ tự Chức năng
1 Vị trí hiện tại của người sử dụng
2
Các địa điểm được chia sẻ, biểu tượng của mỗi địa
điểm cũng chính là ảnh đại diện của người đã chia
sẻ địa điểm đó
3 Tên của địa điểm, cũng là nút bấm để hiển thị màn
hình chi tiết địa điểm đó
21) Giao diện danh sách bạn bè
Hình 4. 32 Danh sách bạn bè
3
4 5
2
1
Chương trình minh họa 117
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Bảng 4.52. Các thành phần của giao diện danh sách bạn bè
Số thứ tự Chức năng
1
Nút thêm bạn mới – dùng để mở một hộp thoại yêu
cầu nhập vào user name của người cần gửi yêu cầu
kết bạn
2 Lọc danh sách theo tên
3 Danh sách bạn bè
4 Ảnh đại diện
5 Tên người bạn
4.2.6. Cấu hình cài đặt
QuickPlaces web services chạy trên các máy web server hỗ trợ Java Web
Application với Apache Tomcat 7.0.14.0 server, hệ quản trị cơ sở dữ liệu MySQL.
Ứng dụng Place360 chạy được trên các điện thoại sử dụng hệ điều hành Android
với cấu hình tối thiểu như sau:
- Phiên bản Android từ 2.2 trở lên.
- Có hỗ trợ các chức năng định vị như GPS hoặc Network.
- Có hỗ thẻ nhớ SD Card.
- Có hỗ trợ kết nối internet.
Phần Kết Luận 118
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Phần C
KẾT LUẬN
Phần Kết Luận 119
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1. Kết quả đạt được
Sau thời gian nghiên cứu và thực hiện, đề tài nghiên cứu về hệ điều hành Android
và viết ứng dụng tìm kiếm và chia sẻ địa điểm trên nền tảng hệ điều hành này đã cơ
bản được hoàn thành tốt đẹp.
Mục tiêu đặt ra ban đầu là nghiên cứu hệ điều hành Android, đồng thời tìm hiểu
cách thức phát triển ứng dụng cho hệ điều hành này, dựa trên bộ công cụ hỗ trợ lập
trình Android SDK. Bên cạnh, đó nhóm cũng đã nghiên cứu và xây dựng thành
công một mô hình RESTful Web Services phục vụ một cách nhanh chóng và hiệu
quả các yêu cầu cho ứng dụng minh họa của đề tài. Cụ thể, nhóm đã tìm hiểu cơ bản
được các vấn đề sau:
Lịch sử ra đời và phát triển của hệ điều hành Android.
Cơ bản về sử dụng bộ công cụ Android SDK để tạo ứng dụng Android.
Thiết kế và lập trình giao diện cho ứng dụng Android.
Hệ cơ sở dữ liệu tích hợp trong Android (SQLite) và khả năng lưu trữ dữ
liệu trong Android.
Tùy chỉnh cấu hình ứng dụng trên Android bằng SharedPreference.
Tìm hiểu các mô hình dịch vụ web (Web Services), đặc biệt là cách xây
dựng một RESTful Web Services.
Nhóm nghiên cứu cũng đã tìm hiểu tương đối kỹ càng về các dịch vụ của Google
APIs bao gồm:
Google Maps API: đăng ký và nhúng một bản đồ Google Map vào ứng
dụng trên Android.
Google Geocoding API: tìm kiếm địa chỉ dựa vào tọa độ và ngược lại, xác
định tọa độ dựa vào thông tin địa chỉ được cung cấp.
Phần Kết Luận 120
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Google Local Search API: tìm kiếm các địa điểm gần một vị trí cho trước,
kết quả trả về là một danh sách tối đa 32 địa điểm với nhiều thông tin như:
tên địa điểm, địa chỉ, số điện thoại,…
Google Places API: tìm kiếm các địa điểm gần một vị trí nào đó, có giới
hạn bán kính tìm kiếm.
Google Places Autocomplete API: tìm tên các địa điểm theo từ khóa.
Google Direction API: xác định khoảng cách, thời gian, và hành trình đi cụ
thể đi từ một điểm nguồn đến một địa điểm đích.
Ưu điểm chương trình minh họa:
Chương trình đáp ứng nhiều chức năng về tìm kiếm địa điểm như: xác định
vị trí người dùng, tìm kiếm các địa điểm theo tiêu chí, xem thông tin chi tiết
các địa điểm, gọi điện, hiển thị trên bản đồ, chỉ đường, lưu địa điểm vào
danh sách yêu thích.
Chương trình client trên Android kết hợp với Web Services do nhóm xậy
dựng đã tạo nên một mô hình mạng xã hội kết nối người dùng với nhau trên
tiêu chí: cùng nhau chia sẻ những địa điểm mà mình biết. Ngoài những địa
điểm đẹp, hấp dẫn… còn có thể chia sẻ cho bạn bè biết những địa điểm nên
tránh. Vì thế chương trình cũng có thể góp phần giúp người dùng cảnh báo
về giao thông, thời tiết… ở một số nơi với bạn bè mình.
Những địa điểm đều có thể hiển thị trên bản đồ, hỗ trợ tìm đường đi, có thể
kèm theo hình ảnh, nhận xét, bình luận nên rất trực quan và dễ dàng hình
dung.
Giao diện đẹp, thân thiện.
Chương trình đơn giản dễ sử dụng.
Tính ứng dụng cao.
Phần Kết Luận 121
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Khuyết điểm
Dù đã hoàn thành đề tài, nhưng trong quá trình tìm hiểu cũng không tránh khỏi
những thiếu sót chưa thể hoàn thành, đó là:
Chưa tận dụng tối ưu nhiều dịch vụ khác của Google APIs tìm kiếm địa
điểm trực tiếp trên bản đồ.
Chưa hỗ trợ nhiều ngôn ngữ cho người dùng.
Chưa xây dựng được phần quản trị cho hệ thống để quản lý người dùng,
quản lý các địa điểm được chia sẻ.
2. Hướng phát triển
Hiện tại, hệ điều hành Android đang phát triển rực rỡ, vì tính năng mở của nó. Và
nó cũng đang được cộng đồng các lập trình viên trên khắp thế giới quan tâm và tìm
hiểu, đồng thời trợ giúp cho Google phát triển và hoàn thiện tính năng cho hệ điều
hành này.
Trong quá trình nghiên cứu, nhóm cũng nhận thấy đây là một hệ điều hành mang
tính đột phá, phát triển rất nhanh và dễ tiếp cận. Chính vì thế, trong thời gian tới,
nhóm sẽ dần dần từng bước hoàn thiện và phát triển đề tài.
Hướng phát triển của nhóm là sẽ hoàn thiện đề tải để có thể đem ra ứng dụng thực
tế, được sử dụng rộng rãi và trở thành một ứng dụng thiết thực cho mọi người, cụ
thể là:
- Xây dựng thêm nhiều dịch vụ cho web services để hỗ trợ tốt nhất cho ứng dụng
tìm kiếm và chia sẻ địa điểm trên Android như thông kê tìm kiếm để tìm ra
những địa điểm được nhiều người quan tâm theo tuần, tháng,… Dịch vụ tìm
kiếm các địa điểm do chính người dùng chia sẻ.
- Xây dựng phần quản trị cho hệ thống bao gồm:
Các dịch vụ của phần quản trị:
Quản lý người dùng như cảnh cáo người dùng vi phạm.
Phần Kết Luận 122
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Quản lý các địa điểm chia sẻ.
Sao lưu, phục hồi dữ liệu của Web Services.
Một trang web hoặc một phần mềm dành riêng cho quản trị viên.
- Hoàn chỉnh các chức năng gợi ý kết bạn cho người dùng mới; chức năng public
một địa điểm do người dùng chia sẻ để không chỉ bạn bè mà tất cả mọi người
đều có thể biết đến địa điểm đó qua hệ thống.
- Phát triển thêm ứng dụng trên Android để có thể sử dụng được trên các máy
tính bảng, netbook.
Phần Phụ Lục 123
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
Phần D
PHỤ LỤC
Phần Phụ Lục 124
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
1. TÀI LIỆU THAM KHẢO
[1]. Mạng xã hội địa điểm: “cuộc đua” mới, http://www.ictnews.vn, truy cập ngày
15/12/2011.
[2]. http://vi.wikipedia.org, truy cập ngày 10/10/2011.
[3]. Trần Hữu Phước, Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager
trên Android, 2010.
[4]. JavaScript Object Notation, http://www.json.org/, truy cập ngày 18/09/2011.
[5]. The Google Places Autocomplete API,
http://code.google.com/apis/maps/documentation/places/autocomplete.html,
truy cập ngày 21/09/2011.
[6]. The Google Places API,
http://code.google.com/apis/maps/documentation/places/,
truy cập ngày 20/10/2011.
[7]. The Google Directions API,
http://code.google.com/intl/vi/apis/maps/documentation/directions/,
truy cập ngày 30/10/2011.
[8]. Places Jose Sandoval, RESTful Java Web Services, Packt, 2009.
Phần Phụ Lục 125
Tìm hiểu và xây dựng ứng dụng tìm kiếm và chia sẻ địa điểm trên Android
2. HƯỚNG DẪN CÀI ĐẶT
1) Cài đặt Place360 trên Emulator
a. Khởi động emulator muốn install ứng dụng.
Vào Eclipse -> Window/Android SDK and AVD manager -> chọn
AVD rồi Start.
b. Đưa file Place360.apk vào trong folder tools của folder chứa sdk. Ví
dụ: C:\android-sdk-windows\tools.
c. Mở Command shell lên và di chuyển tới folder này.
Ví dụ: Trong Window vào Run gõ cmd, rồi dùng lệnh cd để tới được
folder tools.
d. Gõ vào command shell lệnh adb install <tên_file.apk>.
Ví dụ: adb install Place360.apk.
e. Vào emulator -> chọn ứng dụng và chạy.
2) Cài đặt Place360 trên điện thoại thật
a. Kết nối điện thoại với máy tính qua cổng usb.
b. Thay đổi cài đặt ứng dụng, vào MENU -> Settings -> Applications ->
Unknown Sources.
c. Copy file Place360.apk vào thẻ nhớ của điện thoại.
d. Ngắt kết nối USB của điện thoại với máy tính, vào thẻ nhớ và chạy file
Place360.apk lên, chọn Install Application.
e. Sau khi cài đặt xong, vào điện thoại kho ứng dụng -> chọn ứng dụng
và chạy.