Một service là một thành phần của ứng dụng, thể hiện mong muốn ứng dụng thực hiện các hành động trong khi không tương tác với người dùng hoặc cung cấp chức năng cho các ứng dụng khác sử
Trang 1Đà Nẵng – 2014
1 1.1.1
Trang 2LỜI CẢM ƠN
Tôi xin chân thành cảm ơn các Thầy Cô trong Khoa Tin, trường Đại học
Sư phạm Đại Học Đà Nẵng đã truyền đạt những kiến thức quý báu cho tôi trong những năm học vừa qua và nhất là đã tạo điều kiện thuận lợi cho chúng tôi học tập, thực hiện đề tài tốt nghiệp này
Đặc biệt,tôi xin chân thành cảm ơn thầy Lê Văn Sơn đã trực tiếp, tận tình giúp đỡ và hướng dẫn tôi trong suốt thời gian thực hiện đề tài
Để có được kết quả như ngày hôm nay,chúng tôi rất biết ơn gia đình Ông
Bà, Cha Mẹ và những người thân trong gia đình đã động viên, khích lệ, tạo mọi điều kiện thuận lợi nhất về vật chất lẫn tinh thần trong suốt quá trình học tập cũng như quá trình thực hiện đề tài tốt nghiệp này
Mặc dù đã cố gắng hoàn thành đồ án trong phạm vi và khả năng cho phép nhưng chắc chắn sẽ không tránh khỏi những thiếu sót Tôi rất mong nhận được sự thông cảm, góp ý và tận tình chỉ bảo của quý Thầy Cô và các bạn
Một lần nữa xin chân thành cám ơn!
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan :
1 Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của Lê Văn Sơn
2 Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi xin chịu hoàn toàn trách nhiệm
Sinh viên
Trần Thị Thu Thủy
Trang 4MỤC LỤC
DANH MỤC HÌNH ẢNH 6
DANH MỤC TỪ VIẾT TẮT 7
DANH MỤC BẢNG BIỂU 8
MỞ ĐẦU 9
1 Tính cấp thiết của đề tài 9
2 Mục đích của đề tài 9
3 Phương pháp nghiên cứu 10
CHƯƠNG 1 - TỔNG QUAN VỀ LẬP TRÌNH ANDROID 11
1.1 Tìm hiểu về hệ điều hành Android 11
1.2 Kiến trúc 12
1.2.1 Tầng ứng dụng 12
1.2.2 Tầng ứng dụng Framework 12
1.2.3 Tầng thư viện 13
1.2.4 Tầng Android Runtime 14
1.2.5 Tầng Linux Kernel 14
1.3 Kiến thức, công cụ cần thiết để phát triển ứng dụng android 15
1.3.1 Kiến thức cần có 15
1.3.2 Công cụ 15
1.4 Tìm hiểu các thành phần của một ứng dụng android 15
1.5 Tìm hiểu các thành phần của một project android 21
1.6 Tìm hiểu các dịch vụ hỗ trợ android 22
1.6.1 Google Map và Google Map API 22
1.6.2 Hệ quản trị CSDL SQLite 24
1.7 Restful web service 25
Trang 51.7.1 Web Service 25
1.7.2 Restful Web Service 26
CHƯƠNG 2 - PHÂN TÍCH THIẾT KẾ HỆ THỐNG 28
2.1 Mô tả bài toán 28
2.2 Phân tích hiện trạng du lịch Việt Nam 28
2.2.1 Tổng quan 28
2.2.2 Tiềm năng du lịch Việt Nam 29
2.2.3 Vấn đề nan giải 29
2.3 Phân tích yêu cầu bài toán 30
2.3.1 Người sử dụng 30
2.3.2 Kho dữ liệu 31
2.3.3 Công nghệ 32
2.4 Phân tích khả thi 32
2.4.1 Tính khả dụng 32
2.4.2 Chi phí phát triển 33
2.5 Yêu cầu chức năng 33
2.6 Biểu đồ sử dụng 34
2.6.1 Mức 0 34
2.6.2 Mức 1 34
CHƯƠNG 3 – PHÁT TRIỂN ỨNG DỤNG HỖ TRỢ DU LỊCH 42
3.1 Xây dựng cơ sở dữ liệu 42
3.1.1 Bảng dữ liệu 42
3.1.2 Mô hình quan hệ dữ liệu 50
3.2 Giao diện của ứng dụng 51
3.2.1 Giao diện chính 51
3.2.2 Giao diện giới thiệu về Việt Nam 52
3.2.3 Giao diện thành phô 54
Trang 63.2.4 Giao diện đánh dấu địa điểm 57
3.2.5 Giao diện địa danh 58
3.2.6 Giao diện khách sạn 60
3.2.7 Giao diện đăng nhập facebook 61
KẾT LUẬN 62
TÀI LIỆU THAM KHẢO 63
Trang 7DANH MỤC HÌNH ẢNH
Hình 1: Kiến trúc Android 12
Hình 2: Mô hình hợp tác giữa máy ảo Dalvik và Navite code 14
Hình 3: Lược đồ vòng đời của Activity 17
Hình 4: Sử dụng Intent để trao đổi thông tin giữa hai chương trình 17
Hình 5: Lược đồ vòng đời của Service 19
Hình 6: Ví dụ mô hình dữ liệu thông tin số điện thoại trong máy 20
Hình 7: Các thành phần của URI 20
Hình 8: Cấu trúc thư mục và tệp tin của dự án phần mềm Android trên Eclipse 21
Hình 9: Mô hình Web Service 25
Hình 10: Trao đổi client server 26
Hình 11: Restful web service 27
Hình 12: Use case tổng quát 34
Hình 13: Use case xem danh sách nội dung 35
Hình 14: Use case xem chi tiết nội dung 36
Hình 15: Use case tìm kiếm theo từ khóa 37
Hình 16: Use case tra cứu địa điểm gần 37
Hình 17: Use quản lý nội dung dữ liệu 38
Hình 18: Use case duyệt hình ảnh 39
Hình 19: Use case xem thư viện hình ảnh 39
Hình 20: Use case gửi bình luận 40
Hình 21: Use case chia sẻ hình ảnh 40
Hình 22: Use case xem thông tin liên lạc 41
Hình 23: Use case đánh dấu địa điểm 41
Hình 24: Mô hình quan hệ dữ liệu 50
Hình 25: Giao diện chính 51
Hình 26: Giao diện Việt Nam 52
Hình 27: Giao diện danh mục 53
Hình 28: Giao diện danh mục thành phố 54
Hình 29: Giao diện thành phố 55
Hình 30: Giao diện hình ảnh 56
Hình 31: Giao diện đánh dấu 57
Hình 32: Giao diện địa danh 58
Hình 33: Giao diện khách sạn 60
Hình 34: Giao diện đăng nhập facebook 61
Trang 8HTTP HyperText Transfer Protocol
IDE Integrated Drive Electronics
IOS Internet Operating System
JDK Java Development Kit
JNI Java Native Interface
JSON JavaScript Object Notation
PHP Hypertext Preprocessor
SMS Short Message Services
SQL Structure Query Language
UI International Unit
UNESCO United Nations Educational Scientific and Cultural Organization
URI Uniform Resource Identifier
URI Uniform Resource Identifier
USD United States Dollars
XML eXtensible Markup Language
Trang 9DANH MỤC BẢNG BIỂU
Bảng 1 : Bảng các chức năng 33
Bảng 2: Bảng User 42
Bảng 3 : Bảng City 43
Bảng 4 : Bảng Destination 44
Bảng 5 : Bảng Restaurant 45
Bảng 6 : Bảng Hotel 47
Bảng 7 : Bảng Review 47
Bảng 8 : Bảng Gallery 48
Bảng 9 : Bảng Image 49
Bảng 10 :Bảng ShareImage 49
Trang 10MỞ ĐẦU
1 Tính cấp thiết của đề tài
Ngày nay, khi cuộc sống vật chất đã được đảm bảo thì con người sẽ tìm tới các dịch
vụ nhằm nâng cao đời sống tinh thần và vật chất.Sự phát triển của các ngành công nghiệp dịch vụ không khỏi được đẩy mạnh, trong đó du lịch dịch vụ là một ngành mang lại nhiều tiềm năng trong công cuộc phát triển bền vững của một quốc gia
Nhu cầu du lịch của mọi người đã trở thành phổ biến Ngoài các tua du lịch do các công ty cung cấp thì ngày nay cũng đã xuất hiện nhiều các hình thái du lịch cá nhân, mang tích chất tự do Đối với nước ngoài thì loại hình này đã được phát triển rất lâu, người du lịch bỏ ra chi phí thấp cho một chuyến du lịch và họ sẽ được trải nghiệm hoàn toàn theo cách riêng của mình Đối với nước ta, thì loại hình này đang giai đoạn phát triển, việc nắm bắt loại hình này sẽ giúp cho các địa phương nâng cao phát triển các ngành dịch vụ du lịch và mang lại nguồn lợi to lớn cũng như quảng bá hình ảnh của đất nước
Đồng thời, sự phát triển của khoa học công nghệ ngày càng nhanh chóng Điện thoại di động không còn đơn thuần là thiết bị liên lạc, mà trở thành một công cụ giải trí
đa phương tiện và một vật không thể thiếu của mọi người Đối với người du lịch thì một chiếc điện thoại sẽ hỗ trợ họ rất nhiều trong chuyến du lịch, nhất là những người
du lịch tự do ( không theo các tua du lịch ) Điện thoại giúp họ tìm đường, xác định vị trí, ghi lại những hình ảnh đẹp, chia sẻ cho bạn bè, người thân và còn nhiều lợi ích khác mang lại cho người dùng
Nhằm phục vụ cho các đối tượng du lịch cá nhân, hành trình không theo các tour du lịch do các công ty lữ hành cung cấp và sự kết hợp công nghệ phát triển của điện thoại
thông minh thì , ý tưởng của tôi đưa ra là xây dựng phát triển ứng dụng “Hỗ trợ du
lịch Việt Nam” trên nền tảng Android
2 Mục đích của đề tài
Đề tài nhằm nghiên cứu những vấn đề sau:
- Tìm hiểu về lập trình trên điện thoại di động Android
- Vận dụng được kiến thức đã được học và tìm hiểu được vào việc phát triển một ứng dụng hoàn chỉnh chạy trên hệ điều hành Android
- Hoàn thiện hơn kĩ năng lập trình của bản thân
Trang 113 Phương pháp nghiên cứu
- Sử dụng các phương pháp phân tích, thống kê
- Sử dụng những kĩ thuật lập trình để xây dựng ứng dụng “Hỗ trợ du lịch Việt Nam” trên hệ điều hành android
Trang 12CHƯƠNG 1 - TỔNG QUAN VỀ LẬP TRÌNH ANDROID 1.1 Tìm hiểu về hệ điều hành Android
Hiện nay các nền tảng di động đang phát triển rất đa dạng trong đó có thể kể đến như: IOS, Android, WindowsPhone, Blackbery, Symbyan Trong đó, Android là một nền tảng khả thi và thú vị cho các nhà phát triển
Các thành phần chính của hệ điều hảnh android:
App Drawer: Đây là một thành phần hết sức quan trọng của Android với vai
trò chính là liệt kê tất cả những ứng dụng hiện có trong thiết bị của bạn
Thanh trạng thái: Thanh thông báo trạng thái là đối tượng phía trên cùng của
màn hình, nơi đặt các biểu tượng pin, đồng hồ,
Widget: Khái niệm widget có nghĩa là một thiết bị nhỏ, đính kèm theo một
dụng cụ nào đó Trên Android, bạn có thể hiểu widget chính là những ứng dụng nhỏ gắn trên màn hình chính của Launcher
Lock Screen: Lock Screen là một thành phần thuộc hệ thống của Android
Lock Screen là nơi mà bạn cần kéo thanh trượt (hoặc các động tác tương tự) để
mở khóa máy và bắt đầu sử dụng [1]
Một số thành phần khác: Ngoài các thành phần cơ bản của hệ điều hành
Android được Google đóng gói khi phát hành thì một số tính năng khác cũng được thêm vào tùy theo hãng sản xuất thiết bị chẳng hạn như Flash, Launcher riêng…
Trang 131.2.2 Tầng ứng dụng 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 nha phát triển khả năng để xây dựng các ứng dụng vô cùng phong phú và sáng tạo Các nhà phát triển đƣợc miễn phí để tận dụng lợi thế của các thiết bị phần cứng,thông tin địa điểm truy cập,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 đến các thanh trạng thái và nhiều, nhiều hơn nữa
Các 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.Kiến trúc ứng dụng đƣợc thiết kế để đơn giản hóa việc tái sử dụng
Trang 14các thành phần; bất kỳ ứng dụng có thể xuất bản các khả năng của mình và ứng dụng nào khác sau đó có thể làm cho việc sử dụng những khả năng (tùy thuộc vào chế bảo đảm thi hành theo khuôn khổ).Cơ chế này cũng cho phép các thành phần được thay thế bởi người sử dụng
Nằm bên dưới tất cả các ứng dụng là một tập hợp các dịch vụ và hệ thống,bao gồm
Một tập phong phú và mở rộng có thể được sử dụng để xây dựng một ứng dụng,bao gồm các danh sách,hộp văn bản,các nút và thậm chí một trình duyệt web nhúng
Nhà cung cấp nội dung cho phép các ứng dụng để truy cập dữ liệu từ các ứng dụng khác như Contacts hoặc chia sẻ dữ liệu của riêng mình
Một quản lý tài nguyên,cung cấp quyền truy cập vào tài nguyên phi mã như
Media Libraries : dựa trên OpenCORE PacketVideo’s sự hỗ trợ các thư viện phát lại và ghi âm của âm thanh và phổ biến nhiều định dạng video,cũng như các tập tin hình ảnh tĩnh
Surface Manager : quản lý quyền truy cập vào hệ thống con hiền thị và hoàn toàn phù hợp chất 2D và 3D lớp từ nhiều ứng dụng đồ họa
LibWebCore : một trình duyệt web hiện đại,động cơ có quyền hạn cả hai trình duyệt web của Android
3D Libraries : một việc thực hiện dựa trên OpenGL ES 1.0 API,các thư viện hoặc sử dụng phần cứng tăng tốc 3D
Trang 15 SQLite : một kho lưu trữ dữ liệu manh mẽ và nhẹ quan hệ cơ sở dữ liệu có sẵn cho tất cả các ứng dụng
1.2.4 Tầng Android Runtime
Hệ điều hành Android tích hợp sẳn một tập hợp các thư viện cốt lõi cung cấp hầu hết các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java Mọi ứng dụng của Android chạy trên một tiến trình của riêng nó cùng với một thể hiện của máy
ảo Dalvik Máy ảo Dalvik thực tế là một biến thể của máy ảo Java được sửa đổi, bổ sung các công nghệ đặc trưng của thiết bị di động Nó được xây dựng với mục đích làm cho các thiết bị di động có thể chạy nhiều máy ảo một cách hiệu quả Trước khi thực thi, bất kì ứng dụng Android nào cũng được convert thành file thực thi với định dạng nén Dalvik Executable (.dex) Định dạng này được thiết kế để phù hợp với các thiết bị hạn chế về bộ nhớ cũng như tốc độ xử lý Ngoài ra máy ảo Dalvik sử dụng bộ nhân Linux để cung cấp các tính năng như thread, low-level memory management[2]
1.2.5 Tầng Linux Kernel
Hệ điều hành Android được xây dựng trên bộ nhân Linux 2.6 cho những dịch vụ
hệ thống cốt lõi như: security, memory management, process management, network stack, driver model Bộ nhân này làm nhiệm vụ như một lớp trung gian kết nối phần cứng thiết bị và phần ứng dụng
Dưới đây là mô hình hợp tác giữa máy ảo Dalvik và Navite code:
Hình 2: Mô hình hợp tác giữa máy ảo Dalvik và Navite code
JNI: Java Native Interface (Tương tự khái niệm Application Programming Interface)
Trang 16Java Native Interface: là một bộ framework cho phép mã lệnh viết bằng Java chạy trên máy ảo java có thể gọi hoặc được gọi bởi một ứng dụng viết bằng native code (Ứng dụng được viết cho một phần cứng cụ thể và trên một hệ điều hành cụ thể) hoặc những bộ thư viện viết bằng C, C++ hoặc Assembly
Bằng cách sử dụng SGLJNI, Android cho phép các ứng dụng chạy trên máy ảo Dalvik có thể sử dụng những phương thức được viết bằng các ngôn ngữ cấp thấp như:
C, C++, Assembly Qua đó các nhà phát triển ứng dụng có thể xây dựng ứng dụng dựa trên các bộ thư viện viết bằng C, C++, Assembly nhằm tăng tốc độ thực thi của ứng dụng hoặc sử dụng những tính năng mức thấp mà ngôn ngữ Java không hỗ trợ Tuy nhiên người phát triển ứng dụng cần phải cân nhắc sự gia tăng độ phức tạp của ứng dụng khi quyết định sử dụng các bộ thư viện này
1.3 Kiến thức, công cụ cần thiết để phát triển ứng dụng android
- Apache Tomcat v6.0.8 để tạo máy chủ thực thi web service
- Máy điện thoại có cài hệ điều hành android từphiên bản 2.3 đến 4.3, hoặc máy
ảo cài trên máy tính để có thể chạy thử chương trình
1.4 Tìm hiểu các thành phần của một ứng dụng android
Activity
Là thành phần tối quan trọng của bất kỳ một ứng dụng Android nào.Thuật ngữ Activity chỉ một việc mà người dùng có thể thực hiện trong một ứng dụng Android Do
Trang 17gần như mọi activity đều tương tác với người dùng, lớp Activity đảm nhận việc tạo ra một cửa sổ (window) để người lập trình đặt lên đó một giao diện UI với setContentView(View) Một activity có thể mang nhiều dạng khác nhau: Một cửa sổ toàn màn hình (full screen window), một cửa sổ floating (với windowsIsFloating) hay nằm lồng bên trong 1 activity khác (với ActivityGroup).
Có 2 phương thức mà gần như mọi lớp con của Activity đều phải hiện thực:
onCreate(Bundle) : Nơi khởi tạo activity Quan trọng hơn, đây chính người lập trình gọi setContentView(int) kèm theo layout để thể hiện UI của riêng mình Đồng thời còn có findViewById(int) giúp gọi các widget (buttons, text boxes, labels, ) để dùng trong UI
onPause() : Nơi giải quyết sự kiện người dùng rời khỏi activity Mọi dữ liệu được người dùng tạo ra tới thời điểm này cần phải được lưu vào ContentProvider
Vòng đời của một Activity :
Các activity được quản lí dưới dạng các activity stack - First-In-Last-Out: Khi một activity mới được khởi tạo, nó sẽ được đưa lên trên cùng stack, các activity khác muốn chạy trên nền (foreground) trở lại thì cần phải chờ tới khi Activity mới này kết thúc
Một Activity có 4 trạng thái:
Active hay Running: Khi một activity đang chạy trên màn hình
Paused: Khi một activity vẫn đang chạy trên màn hình nhưng đang bị một activity trong suốt (transparent) hay không chiếm toàn màn hình hiển thị phía trên Tuy vẫn lưu trữ dữ liệu, nhưng các paused activity này sẽ bị hệ thống bắt chấm dứt khi đang thiếu bộ nhớ trầm trọng
Stopped: Khi 1 activity bị che khuất hoàn toàn bởi 1 activity khác Tuy vẫn lưu trữ dữ liệu, nhưng các stopped activity này sẽ thường xuyên bị hệ thống bắt chấm dứt
để dành chỗ cho các tiến trình khác
Killed hay Shut down: Khi 1 activity đang paused hay stopped, hệ thống sẽ xóa activity ấy ra khỏi bộ nhớ
Trang 18Hình 3: Lược đồ vòng đời của Activity
Intent
Intent cung cấp một chức năng cho phép kết nối hai chương trình khác nhau trong quá trình thực thi (runtime) (Cung cấp khả năng cho phép hai chương trình khác nhau
giao tiếp với nhau) Chức năng quan trọng và được sử dụng nhiều nhất của một Intent
là mở một Activity, nơi mà nó có thểđược dùng như một vật kết nối các Activity lại với nhau (Truyền thông tin giữa hai Activity khác nhau)
Hình 4: Sử dụng Intent để trao đổi thông tin giữa hai chương trình
Trang 19Một service là một thành phần của ứng dụng, thể hiện mong muốn ứng dụng thực hiện các hành động trong khi không tương tác với người dùng hoặc cung cấp chức năng cho các ứng dụng khác sử dụng Nói một cách đơn giản, service là các tác vụ (task) chạy ngầm dưới hệ thống nhằm thực hiện một nhiệm vụ nào đó Mỗi class Service phải chứa thẻ <service> được khai báo trong fileAndroidManifext.xml Services có thể được bắt đầu bởi Context.startService() và Context.bindservice()
Cũng như các đối tượng của ứng dụng khác, services chạy trên luồng (Thread) của tiến trình chính Có nghĩa là nếu service của bạn dự định chạy các hành vi có cường độ lớn hoặc các hành vi có thể gây nghẽn mạch, nó sẽ tự sinh ra luồng (Thread) của chính nó để làm thực hiện các tác vụ được đặc tả trong Service
Cần lưu ý:
Service không phải là một tiến trình độc lập.Đối tượng Service không chạy trên tiến trình (process) của riêng nó (trừ khi có một yêu cầu đặt biệt), Service chạy trên tiến trình của chương trình
Service không phải là một luồng (thread)
Service có chứa 2 đặc trưng cơ bản sau:
Là một chức năng để ứng dụng thông báo với hệ thống về việc mà nó muốn thực hiện ở phía dưới nền (ngay cả khi người dùng không tương tác trực tiếp tới ứng dụng) Điều này tương ứng với việc gọi phương thức Context.startservice(), nó sẽ yêu cầu hệ thống lên lịch cho service để chạy cho đến khi bị chính service hay người nào
đó dừng nó lại
Là một chức năng cho phép ứng dụng để cung cấp các chức năng của nó cho các ứng dụng khác Điều đó tương ứng với việc gọi Context.bindService(), cho phép một long-standing connection được tạo ra để service có thể tương tác với nó
Khi một Service được tạo ra, việc hệ thống cần làm là tạo ra thành phần và gọi hàm onCreate() và bất kỳ lệnh callback thích hợp nào trên luồng chình Nó phụ thuộc vào Service thi hành hành vi thích hợp nào, chẳng hạn tạo luồng thứ hai để thực hiện tiến trình
Vòng đời của 1 Service :
Trang 20Có 2 lý do để một service được chạy bởi hệ thống Bằng cách gọi phương thức Context.startService() và Context.bindService() Nếu người dùng gọi phương thức Context.startService() thì hệ thống sẽ nhận về một đối tượng service (tạo mới nó và gọi hàm onCreate() nếu cần thiết) và sau đó lại gọi phương thức onStartCommand(Intent, int ,int) với các biến được cung cấp bởi client Service mới được tạo ra này sẽ chạy cho tới khi có lệnh gọi phương thức Context.stopService() hoặc stopSelf() Dù cho một service có được start bao nhiêu lần đi nữa thì nó sẽ bị tắt ngay khi phương thức Context.stopService() hoặc phương thức stopSelf() được gọi.Service có thể dùng phương thức stopSelf(int) để đảm bảo rằng service sẽ không được tắt cho đến khi Intent đã khởi tạo nó được xử lý [7]
Hình 5: Lược đồ vòng đời của Service
Content Provider
Là nơi lưu trữ và cung cấp cách truy cập dữ liệu do các ứng dụng tạo nên Đây
là cách duy nhất mà các ứng dụng có thể chia sẻ dữ liệu của nhau
Trang 21Android cung cấp sẵn content providers cho 1 số kiểu dữ liệu thông dụng như
âm thanh, video, thông tin sổ điện thoại Người lập trình cũng có thể tự tạo ra các class con (subclass) của Content Provider để lưu trữ kiểu dữ liệu của riêng mình
Content providers sử dụng dữ liệu dưới dạng 1 table đơn giản, trong đó mỗi hàng là 1 record và mỗi cột là dữ liệu của 1 kiểu nhất định
Hình 6: Ví dụ mô hình dữ liệu thông tin số điện thoại trong máy
Mỗi record có 1 trường “_ID” độc nhất để liên kết với các bảng khác
URI (Uniform Resource Identifier)
URI là dãy các ký tự string được dùng để:
Mở 1 trang web trong trình duyệt, bắt đầu với “http://”
Chỉ tới các file tài nguyên có sẵn trong máy (VD: 1 file video, danh sách contacts, ), bắt đầu với "content://"
Hình 7: Các thành phần của URI
A – Tiền tố mặc định của 1 URI, không thay đổi được
B – Xác định content provider Đối với các ứng dụng hãng thứ 3, đây chính là tên đầy đủ của 1 lớp
C – Xác định loại dữ liệu nào cần lấy về Nếu nguồn cung cấp chỉ cho lấy 1 loại duy nhất thì có thể để trống, hoặc nếu có nhiều loại thì có thể phân ra từng phần 1 (land/bus, land/train, sea/ship,…)
Trang 22D – ID của 1 record, khi cần lấy về chỉ duy nhất 1 record.
Khi tạo 1 content provider, Android tự động tạo 1 constant cho URI của provider đó để đảm bảo code hiệu quả và dễ cập nhật sau này.Constant này - CONTENT_URI - sẽ xác định cho ContentProvider phải liên kết với bảng nào của nguồn cung cấp
1.5 Tìm hiểu các thành phần của một project android
Hình 8: Cấu trúc thƣ mục và tệp tin của dự án phần mềm Android trên Eclipse
AndroidManifest.xml: file XML mô tả ứng dụng và các thành phần đuợc cung
cấp bởi ứng dụng (activities, services, )
Trang 23build.xml: Một file chứa mã script Ant (ant.apache.com) nhằm compile và cài
đặt ứng dụng lên máy
default.properties: file property tạo bởi script Ant trên
bin/ : nơi chứa ứng dụng sau khi được compile
bin/classes/ : chứa các lớp Java đã được compile
bin/classes.dex : chứa các file executable tạo bởi các lớp Java
bin/yourapp.ap_ : chứa các tài nguyên của ứng dụng, đóng gói thành 1 file zip bin/yourapp-debug.apk hay bin/yourapp-unsigned.apk : chứa chính ứng
dụng Android của ta
libs/ : nơi chứa các file Java JAR ứng dụng yêu cầu (third party)
src/ : nơi chứa mã nguồn Java của ứng dụng
res/ : chứa các tài nguyên của ứng dụng, như các icons, GUI layouts,
res/drawable/ : chứa file hình ảnh (PNG, JPEG, )
res/layout/ : chứa UI layout, dưới dạng XML
res/menu/ : chi tiết các menu, dưới dạng XML
res/raw/ : chứa các file khác (CSV chứa thông tin account, )
res/values/ : chứa các strings, dimensions,
res/zml/ : chứa các file XML khác cần cho ứng dụng
assets/ : nơi chứa các files tĩnh (static) được yêu cầu đi kèm với ứng dụng.
Trang 24đồ đường xá, đường đi cho xe đạp, cho người đi bộ (những đường đi ngắn hơn 6.2 dặm) và xe hơi, và những địa điểm kinh doanh trong khu vực cũng như khắp nơi trên thế giới Lúc đó chúng ta có thể nhấp và kéo bản đồ để xem ngay các khu vực lân cận Xem hình ảnh vệ tinh của vị trí mong muốn mà bạn có thể thu nhỏ, phóng to và quay Với các thiết bị di động thì Google Map cung cấp một bộ hỗ trợ trên nhiều dòng điện thoại và được phát triển trên nền tảng web.Địa chỉ truy cập
:m.google.com.vn/maps
Google Map hỗ trợ người dùng xem vị trí bản đồ,xác định vị trí hiện tại của mình
(thông qua IP khi kết nối internet hoặc GPS trên điện thoại di động),xem bản đồ giao thông, địa lý, thời tiết,tìm kiếm bằng giọng nói,tìm kiếm các địa điểm công cộng, như: nhà hàng, khách sạn, bệnh viện, chợ ,cho phép người dùng đăng tải vị trí địa điểm của mình,…[3]
b Google Map API
Là một dịch vụ được cung cấp miễn phí cho các lập trình viên để khai thác dữ liệu sẵn có khổng lồ và nhiều tiện ích khác của Google Map Trên các thiết bị di động, ta có thể sử dụng Google Maps API thông qua các Google Maps API webservices
Thành phần chính của Google Map API gồm :
Directions API : là công cụ tính toán khoảng cách giữa các đối tượng tĩnh trên bản đồ thông qua giao thức HTTP
Distance Matrix API : là công cụ tính toán thời gian và khoảng cách di
chuyển giữa các điểm trên bản đồ, không mang tính chất chỉ đường
Elevation API : là công cụ tính toán độ cao của một điểm thông qua vị trí được cung cấp là kinh tuyến và vĩ tuyến
Geocoding API : là công cụ chuyển đổi trực tiếp từ một địa chỉ cụ thể thành
vị trí trên bản đồ và ngược lại
Places API : là công cụ trả về thông tin đầy đủ của một địa điểm trên bản đồ được xác định thông qua vị trí trên bản đồ Sử dụng giao thức HTTP để gởi
yêu cầu
Trang 25 Dữ liệu trả về từ hệ thống dưới dang JSON hoặc XML Sau khi nhận được
dữ liệu trả về, chúng ta phải phân tích cú pháp dữ liệu để có thông tin cần thiết trong ứng dụng
Trong các ứng dụng Android, chúng ta chủ yếu sử dụng kiểu dữ liệu JSON
vì nó tương đối dễ dàng phân tích cú pháp để lấy được dữ liệu cần thiết nhanh chóng
1.6.2 Hệ quản trị CSDL SQLite
Khi lập trình trên di động hay các thiết bị có dung lượng bộ nhớ hạn chế, người
ta thường dùng SQLite SQLite là một hệ quản trị cơ sở dữ liệu nhúng được hiện thực
từ chuẩn SQL-92.Giống với cái tên của nó, SQLite chiếm dung lượng nhỏ (khoảng 275KB) nên việc truy xuất dữ liệu được nhanh chóng, không chiếm dụng quá nhiều tài nguyên hệ thống Do SQLite là phần mềm mã nguồn mở nên nó không bị giới hạn tác quyền Vì lý do đó mà SQLite được nhiều hãng sử dụng (Adobe, Apple, Google, Sun, Symbian) và các dự án mã nguồn mở (Mozila, PHP, Python)
Đặc biệt, đối với Android, SQLite rất thích hợp để tạo cơ sở dữ liệu cho các ứng dụng trên nền Android.Từ khi SQLite có giao diện SQL thì nó càng được sử dụng dễ dàng và thông dụng hơn
Sqlite tuy nhẹ hơn so với các hệ cơ sở dữ liệu khác nhưng cũng không khác biệt nhiều SQLite cũng sử dụng ngôn ngữ truy vấn SQL (SELECT, INSERT, DELETE…), thích hợp cho các ứng dụng trên điện thoại, đặc biệt là ứng dụng trên hệ điều hành Android vì Android Runtime có thể chứa cả SQLite mà không cần phải chia nhỏ ra [4]
SQLite có một hệ thống câulệnhSQL đầy đủ với các triggers, transactions Các câu truy vấn cũng như các hệ cơ sở dữ liệu khác SQLite như bản thu nhỏ của so với các hệ CSDL khác, vì vậy nó không thể có đầy đủ các chứ năng trên chiếc điện thoại di động của bạn [8]
SQLite là một lựa chọn thích hợp dành cho ứng dụng trên hệ điều hành Android Ngoài dung lượng lưu trữ nhỏ gọn, SQLite còn cho phép sử dụng Unicode, kiểu dữ liệu không được cài đặt trong một số phiên bản Android
Trang 261.7 Restful web service
1.7.1 Web Service
Thuật ngữ dịch vụ Web (Web Service) mô tả một cách thức chuẩn để tích hợp các ứng dụng dựa trên nền tảng Web, sử dụng các chuẩn mở XML (Extensible Markup Language), SOAP (Simple Object Access Protocol), WSDL (Web Services Description Language) và UDDI (Universal Description Discovery and Integration) thông qua giao thức Internet
SOAP là một đặc tả kỹ thuật về cách thức đọc và định dạng tài liệu XML giữa dịch vụ yêu cầu và dịch vụ cung cấp trong kiến trúc Web Service.Nó cung cấp một khung ứng dụng thông điệp không phụ thuộc vào hệ điều hành, ngôn ngữ lập trình hay nền tính toán
WSDL là một ngôn ngữ dựa trên XML dùng để mô tả giao diện của Web Service.Nó cung cấp một cách thức chuẩn để mô tả các kiểu dữ liệu được truyền trong các thông điệp thông qua Web Service, các hoạt động được thực hiện trên các thông điệp và ánh
xạ các hoạt động này đến giao thức vận chuyển [5]
Hình 9: Mô hình Web Service
Một công nghệ chính nữa của Web Service đó là UDDI, nó cung cấp một khung ứng dụng về các nghiệp vụ để xuất bản một Web Service, khám phá các Web Service hiện hữu và xây dựng các đăng ký dịch vụ chung
Được sử dụng chủ yếu như một phương tiện để cho các doanh nghiệp giao tiếp với nhau và với khách hàng, Web Service cho phép các tổ chức giao tiếp dữ liệu mà không cần am hiểu về các hệ thống công nghệ thông tin khác
Theo W3C, Web service được thiết kế trong việc hỗ trợ tương tác giữa máy với máy thông qua môi trường mạng Web service thường là các Web API (Application
programming interface) có thể truy cập qua môi trường mạng, ví dụ như Internet, và được thực hiện trên một hệ thống từ xa được yêu cầu các dịch vụ
Trang 27Hình 10: Trao đổi client server
1.7.2 Restful Web Service
Restful web service là kiểu dịch vụ web được xây dựng dựa trên nền kiến trúc REST
và phương thức HTTP
REST (Representational State Transfer) đã được chọn sử dụng rộng rãi thay cho Web service dựa trên SOAP và WSDL vì nó đơn giản và dễ sử dụng hơn rất nhiều REST định nghĩa các quy tắc kiến trúc để bạn thiết kế Web services chú trọng vào tài nguyên hệ thống, bao gồm các trạng thái tài nguyên được định dạng như thế nào và được chuyển tải qua HTTP thông qua số lượng lớn người dùng và được viết bởi những ngôn ngữ khác nhau Nếu tính theo số dịch vụ mạng sử dụng, REST đã nổi lên trong vài năm qua như là một mô hình thiết kế dịch vụ chiếm ưu thế Trong thực tế, REST đã
có những ảnh hưởng lớn và gần như thay thế SOAP và WSDL vì nó đơn giản và dễ sử dụng hơn rất nhiều
Điểm quan trọng trong thiết kế của REST là sự tồn tại của tài nguyên(resource) và được tham chiếu bởi các định danh URI.Để thực hiện thao tác với các tài nguyên này, các thành phần mạng phải kết nối với nhau thông qua giao thức HTTP và thực hiện trao đổi các thành phần thể hiện của tài nguyên
RESTful Web Services là một web API Nó là một tập hợp các tài nguyên, được định nghĩa bởi các khía cạnh:
Kiểu dữ liệu MIME được hỗ trợ bởi web API.Thường thì kiểu dữ liệu này là JSON nhưng cũng có thể là bất kỳ kiểu MIME hợp lệ nào khác
Một tập hợp các phương thức được hỗ trợ bởi web API sử dụng các phương thức sẵn có của HTTP(GET, POST, PUT hoặc DELETE)
API phải là các liên kết siêu văn bản
Trang 28Dữ liệu đƣợc truyền trực tiếp trên HTTP và đƣợc truy cập thông qua HTTP theo đúng định dạng MIME mà không cần thông qua dạng SOAP – giảm bớt sự phức tạp –
vì đơn giản chúng ta sẽ coi dữ liệu và chức năng nhƣ là tham số truyền hay dữ liệu đính kèm trong HTTP [6]
Cơ chế hoạt động :
Client gửi request yêu cầu resources thông qua HTTP
Web services dựa trên request để đáp ứng yêu cầu và response kết quả trả về
Response đƣợc trả về theo đúng định dạng yêu cầu của client
Client xử lý kết quả từ response để đáp ứng yêu cầu của mình
Hình 11: Restful web service
Trang 29CHƯƠNG 2 - PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Trong chương này sẽ mô tả bài toán,giới thiệu về thực trạng du lịch Việt Nam từ đó xác định đưa ra các loại người dùng và nhu cầu sử dụng cho từng đối tượng người dùng.Các yếu tố này là cơ sở đểcó cách nhìn tổng quát cho hệ thống là tiên đề triển khai ứng dụng chúng ta sau này
2.1 Mô tả bài toán
Đối tượng gồm các khách du lịch (đi hoặc không đi theo tua du lịch), các công ty khai thác các tua du lịch
Mục đích
Ứng dụng cung cấp các địa điểm du lịch ở từng vùng cho người du lịch
Người du lịch có thể tìm kiếm các địa điểm du lịch theo vị trí hiện tại của họ hoặc theo từng vùng Thông qua đó người du lịch có thể đánh giá và bình luận địa điểm này
Người du lịch có thể chia sẻ hình ảnh về các địa điểm mình đã đi qua
Người du lịch sẽ tìm thấy những điểm đến nổi tiếng nhất một cách dễ dàng nhất thông qua sàn lọc của hệ thống
Doanh thu ngành du lịch Việt Nam năm 2009 đạt từ 68.000 đến 70.000 tỷ đồng Theo dự báo của Tổng cục du lịch Việt Nam, năm 2015 ngành du lịch Việt Nam sẽ thu hút 7-8 triệu lượt khách quốc tế, 32-35 triệu khách nội địa, con số tương ứng năm
Trang 302020 là 11-12 triệu khách quốc tế, 45-48 triệu khách nội địa Doanh thu từ du lịch sẽ đạt 18-19 tỷ USD năm 2020 ( Theo nguồn http://vietnamtourism.gov.vn)
Tuy nhiên, ngành du lịch Việt Nam từ nhiều năm nay, cũng đang bị báo động về nạn "chặt chém", bắt nạt du khách, hạ tầng cơ sở yếu kém và chất lượng dịch vụ kém, tạo ấn tượng xấu với du khách
2.2.2 Tiềm năng du lịch Việt Nam
Về di tích : Việt Nam có hơn 40.000 di tích, thắng cảnh trong đó có hơn 3000 di
tích được xếp hạng di tích quốc gia và hơn 5000 di tích được xếp hạng cấp tỉnh Việt Nam có 117 bảo tàng trong đó các bộ, ngành quản lý 38, các địa phương quản lý 79
Về thắng cảnh: Việt Nam được UNESCO công nhận 8 khu dự trữ sinh quyển thế
giới, 30 vườn quốc gia, 21 khu du lịch quốc gia Việt Nam đứng thứ 27 trong số 156 quốc gia có biển trên thế giới với 125 bãi tắm biển, hầu hết là các bãi tắm đẹp Việt Nam là 1/12 quốc gia có vịnh đẹp nhất thế giới là vịnh Hạ Long và vịnh Nha Trang
Về văn hóa:Việt Nam có 54 dân tộc anh em, mỗi dân tộc đều có những nét đặc
trưng về văn hoá, phong tục tập quán và lối sống riêng Ngành du lịch và các địa phương đã nỗ lực xây dựng được một số điểm du lịch độc đáo
2.2.3 Vấn đề nan giải
Du lịch Việt Nam đang đối mặt với nhiều vấn đề yếu kém như ô nhiễm môi trường tại các điểm du lịch, nhiều di tích không được bảo quản đúng mức, gây hư hỏng nghiêm trọng hay bị sửa lại khác xa mẫu cổ và luôn thu phí vào cửa, tình trạng chèo kéo, tăng giá phòng tùy tiện, chất lượng hạ tầng cơ sở và giao thông thấp, dịch vụ kém, trong khi đó công tác quản lý chưa đạt hiệu quả
Năm 2012, lần nữa, những tin tức tiêu cực và kinh nghiệm xấu về du lịch Việt Nam được đăng tải trên nhiều báo chí, phản ánh “Nạn lừa đảo du khách rất đáng báo
động”, chất lượng dịch vụ kém và du khách đua nhau tố các chiêu 'chặt chém, chưa có
dấu hiệu thay đổi Thêm nữa, nạn ô nhiễm môi trường lại tăng lên, theo kết quả của báo
cáo thường niên năm 2012 mang tên The Environmental Performance Index (EPI) của
hai trung tâm nghiên cứu môi trường thuộc Đại học Yale và Columbia của Mỹ thực hiện, về ảnh hưởng của chất lượng không khí, Việt Nam đứng thứ 123 trong bảng xếp hạng 132 quốc gia khảo sát, được xem là có không khí bẩn thứ 10 thế giới
Trang 312.3 Phân tích yêu cầu bài toán
2.3.1 Người sử dụng
Người sử dụng là đối tượng quan trọng của hệ thống
a Đối tượng người sử dụng
Đối tượng sử dụng là người du lịch, đây chính là đối tượng sử dụng chiếm số lượng lớn nhất và quan trọng nhất của hệ thống
Người du lịchbao gồm các tất cả mọi người, đối tượng này có thể đi theo các tour
du lịch hoặc không theo tour du lịch hoặc chỉ tham khảo các địa điểm du lịch
Tập trung vào đối tượng người du lịch tự do ( không đi theo các tour du lịch đã định trước) Ưu điểm của đối tượng này:
Thường không định trước các địa điểm cần tới
Phí bỏ ra để đi du lịch và tìm kiếm các địa điểm cần tới là ít
Chiếm số lượng lớn người dân
Đối tượng này cũng có thể là các người du lịch từ nước ngoài
b Mục đích sử dụng
Mục đích lớn của hệ thống là hướng tới đại đa số người dùng.Hệ thống đi kèm với việc xây dựng kho dữ liệu là phát triển một ứng dụng trên điện thoại di động, cụ thể là Android Và người sử dụng sẽ được:
Cung cấp các địa điểm du lịch theo các tiêu chí khác nhau
Tìm kiếm và tra cứu các địa điểm du lịch
Đánh giá và bình luận về các địa điểm du lịch
Chia sẻ hình ảnh tương ứng với địa điểm mình đã đi qua
Ngoài ra, người sử dụng cũng góp phần xây dựng kho dữ liệu thông qua việc:
Chia sẻ hình ảnh
Đánh giá, bình luận để thông qua đó hệ thống có thể lọc để có thể giới thiệu tới người dùng những nơi thú vị nhất một cách nhanh nhất
Trang 322.3.2 Kho dữ liệu
a Xây dựng
Kho dữ liệu được được cung cấp:
Nguồn dữ liệu của hệ thống, là dữ liệu cung cấp ban đầu của hệ thống, trong quá trình hoạt động
Nguồn dữ liệu của người dùng, là thông tin về hình ảnh du lịch do người dùng đăng tải
Dữ liệu của kho dữ liệu chính là cơ sở dữ liệu các địa điểm được người dùng cung cấp thông qua các địa điểm mà họ đã đi qua.Bên cạnh đó dữ liệu sẽ được lọc thô thông qua bình luận và đánh giá của người dùng về một địa điểm nào đó
Quá trình xây dựng dữ liệu bao gồm các bước sau:
1 Người dùng đăng tải chia sẻ hình ảnh kèm với thông tin về một địa điểm du lịch nào đó mà họ đã đi qua Thông tin này mang tích chất dữ liệu thô ban đầu
2 Hệ thống sẽ lưu trữ thông tin
3 Tiến hành lọc bằng tay, do người quản lý hệ thống đảm nhiệm
4 Tiến hành lưu trữ vào cơ sở dữ liệu của kho dữ liệu
Do môi trường xây dựng dữ liệu chính là điện thoại di động nên dữ liệu phải được chuẩn hóa theo các tiêu chí sau:
Mã hóa unicode utf-8 (để hiển thị tiếng Việt)
Thông tin dữ liệu phải ngắn (phù hợp với trạng thái bộ nhớ của điện thoại)
Các tham số về vị trí bản đồ, đánh giá, bình luận phải chính xác
c Khai thác
Dữ liệu của kho sẽ được khai thác thông qua ứng dụng chính trên điện thoại di động
do hệ thống cung cấp Qua đó, người du lịch có thể đăng nhập bằng tài khoản
Facebook để chia sẻ các thông tin về các địa điểm du lịch
Việc lấy dữ liệu sẽ thông qua môi trường Internet, như vậy việc khai thác sẽ là bất
cứ ở đâu và bất cứ lúc nào