139
NHN XÉT CA GIÁO VIÊN HƯỚNG DN i Tìm hiu và xây dng ng dng tìm kiếm và chia sđịa điểm trên Android NHN XÉT C A GIÁO VIÊN HƯỚ NG D N ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... ....................................................................................................................................... Ngày.........Tháng..........Năm............ Giáo Viên Hướng Dn (Ký, ghi rõ hvà tên)

Android Mang Dia Diem

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 1

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 A

MỞ ĐẦU

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.