Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
BỘ GIÁO DỤC ĐÀO TẠO
TRƯỜNG ĐẠI HỌC NHA TRANG
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỒ ÁN TỐT NGHIỆP
Đề tài:
Xây dựng ứng dụng tìm kiếm thông tin bản đồ
trên thiết bị Android
Giáo viên hướng dẫn: Trần Minh Văn
Sinh viên thực hiện: Trần Mạnh Cường
MSSV:50130175
Lớp 50TH2
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
1
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Contents
Lời nói đầu.................................................................................................................................. 6
Chương I: Giới thiệu................................................................................................................... 7
I.1 Du lịch Nha Trang ............................................................................................................. 7
I.2 Công nghệ thiết bị di động ................................................................................................ 8
I.2.1 Di động đi tắt đón đầu trong thế giới công nghệ ....................................................... 8
I.2.2 Thời kỳ “hậu PC” và cơ hội cho các lập trình viên di động .................................... 10
I.3 Mục đích thực hiện đề tài ................................................................................................ 13
Chương II: Hệ điều hành Android ............................................................................................ 15
II.1 Giới thiệu hệ điều hành Android .................................................................................... 15
II.2 Những đặc trưng của hệ điều hành Android: ................................................................. 15
II.3 Các tính năng hỗ trợ sẵn trong hệ điều hành Android ................................................... 16
II.4 Kiến trúc và các thành phần trong hệ điều hành Android .............................................. 17
II.4.1 Linux kernel (nhân Linux) ...................................................................................... 17
II.4.2 Libraries .................................................................................................................. 17
II.4.3 Android runtime: .................................................................................................... 18
II.4.4 Application framework 2.4.3 Android runtime: ..................................................... 18
II.4.5 Applications: ........................................................................................................... 19
II.5 Các khái niệm cơ bản trong lập trình ứng dụng Android ............................................... 19
II.5.1 Activity ................................................................................................................... 19
II.5.2 Service .................................................................................................................... 22
II.5.3 Content provider ..................................................................................................... 23
II.5.4 Broadcast Receive .................................................................................................. 23
II.5.5 View........................................................................................................................ 23
II.5.6. Intent ...................................................................................................................... 24
II.6 Các thành phần trong một project ứng dụng Android .................................................... 25
II.6.1. AndroidManifest.xml ............................................................................................ 25
II.6.2. File R.java .............................................................................................................. 26
II.6.3 Thư mục src ............................................................................................................ 26
II.6.4 Thư mục rec ............................................................................................................ 26
Chương III: Công nghệ XML và Webservice .......................................................................... 27
III.1 Công nghệ XML ........................................................................................................... 27
III.1.1 Lịch sử ra đời chuẩn XML, XML là gì? ............................................................... 27
III.1.2 Cấu trúc của file XML và tài liệu XML ................................................................ 27
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
2
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
III.1.3 Đặc điểm của XML ............................................................................................... 28
III.1.4 XML và HTML ..................................................................................................... 29
III.1.5 Ngôn ngữ đặt tả cấu trúc ....................................................................................... 29
III.1.6 Ưu điểm của XML ................................................................................................ 30
III.2 Webservice ....................................................................................................................... 31
III.2.1 Webservice là gì ? ...................................................................................................... 31
III.2.2 Một số đặt điểm cơ bản của webservice .................................................................... 32
III.2.3 Phân loại webservice ................................................................................................. 32
Chương IV: Google Map và Google Maps API Web Services ................................................ 34
IV.1 Google Map .................................................................................................................. 34
IV.1.1 Giới thiệu Google Map ......................................................................................... 34
IV.1.2 Google Maps for Mobile ....................................................................................... 35
IV.2 Google Maps API Web Services .................................................................................. 37
IV.2.1 Giới thiệu Google Maps API Web Services ......................................................... 37
IV.2.2 Sử dụng Google Maps API Web Services ............................................................ 37
IV.3 Google Geocoding API ................................................................................................ 40
IV.3.1 Mã hóa địa lý là gì? ............................................................................................... 40
IV.3.2 Giới hạn sử dụng ................................................................................................... 40
IV.3.3 Geocoding API request ......................................................................................... 40
IV.3.4 Kết quả mã hóa địa lý ........................................................................................... 41
IV.3.5 Giải mã địa lý (tìm địa chỉ từ kinh độ-vĩ độ) ........................................................ 47
IV.4 Google Distance Matrix API ........................................................................................ 50
IV.4.1 Giới hạn sử dụng ................................................................................................... 50
IV.4.2 Distance Matrix API request ................................................................................. 50
IV.4.3 Kết quả từ Distance Matrix API ........................................................................... 52
IV.5 Google Direction API ................................................................................................... 58
IV.5.1 Giới hạn sử dụng ................................................................................................... 58
IV.5.2 Google Direction request ...................................................................................... 58
IV.5.3 Kết quả trả về Google Direction ........................................................................... 61
Chương V: Cơ sở dữ liệu SQLite ............................................................................................. 70
V.1 Giới thiệu SQLite ........................................................................................................... 70
V.2 Thiết kế của SQLite ....................................................................................................... 70
V.3 Các đặc tính của SQLite ................................................................................................ 71
V.4 Sử dụng SQLite .............................................................................................................. 71
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
3
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
V.4.1 Những trường hợp thích hợp sử dụng SQLite ........................................................ 71
V.4.2 Những trường hợp không thích hợp sử dụng SQLite ............................................. 73
V.5 Các ứng dụng lớn của SQLite ........................................................................................ 74
Chương VI: Xây dựng ứng dụng .............................................................................................. 75
VI.1 Phân tích thiết kế dữ liệu .............................................................................................. 75
VI.1.1 Đặc tả hệ thống ..................................................................................................... 75
VI.1.2 Mô hình thực thể kết hợp ...................................................................................... 76
VI.1.3 Mô hình vật lý dữ liệu ........................................................................................... 77
VI.2 Các yêu cầu về chức năng của chương trình ................................................................ 77
VI.3 Các vấn đề trong quá trình xây dựng ứng dụng............................................................ 78
VI.3.1 Giao diện UI trong lập trình ứng dụng Android ................................................... 78
VI.3.2 Đăng ký bản đồ Google Map trong ứng dụng ...................................................... 82
VI.3.3 Đánh dấu địa điểm và hiện thông tin trên bản đồ ................................................. 83
VI.3.4 Sử dụng SQLite trong hệ điều hành Android ....................................................... 84
VI.3.5 Phân tích cú pháp XML ........................................................................................ 86
VI.3.6 Chạy đa tiến trình các tác vụ truy cập mạng nhằm giảm độ trễ cho ứng dụng ..... 87
VI.3.7 Bắt vị trí hiện tại bằng các Location Provider ...................................................... 88
VI.3.8 Dùng Observer Template để thông báo cho các Activity mỗi khi địa điểm hiện tại
thay đổi ............................................................................................................................. 90
VI.3.9 Gọi các Activity và truyền dữ liệu giữa chúng ..................................................... 91
VI.4 Kết quả xây dựng ứng dụng.......................................................................................... 92
Chương VII: Tổng kết ............................................................................................................ 106
VII.1 Ưu khuyết điểm của chương trình đã xây dựng ........................................................ 106
VII.1.1 Ưu điểm ............................................................................................................. 106
VII.1.2 Khuyết điểm....................................................................................................... 106
VII.2 Hướng đi trong tương lai ........................................................................................... 106
VII.3 Kết quả đạt được ....................................................................................................... 107
Tài liệu tham khảo .................................................................................................................. 108
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
4
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Lời nhận xét của giáo viên hướng dẫn:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
5
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Lời nói đầu
Hiện hay du lịch đang là một ngành kinh tế mũi nhọn của Việt Nam nói chung
và đặt biệt là đối với Thành phố Nha Trang tỉnh Khánh Hòa. Với tiềm năng du lịch
như vậy việc xúc tiến quảng bá du lịch và cung cấp thông tin du lịch là điều rất quan
trọng để đẩy mạnh hơn nữa ngành kinh tế mủi nhọn này.
Với sự xuất hiện phát triển chóng mặt của công nghệ mobile-thiết bị nhúng hiện
nay mang lại cơ hội quảng bá du lịch và cung cấp thông tin du lịch một cách thuận tiện
nhất cho khách du lịch. Và hiệu quả mạng lại là rất cao.
Với sự hướng dẫn, giúp đỡ của thầy Trần Minh Văn tôi đã thực hiện đề tài ‘Xây
dựng ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android’. Phần mềm sản
phẩm có tên là ‘Du lịch Nha Trang bằng xe buýt’. Được viết bằng ngôn ngữ Java,
trên nền tảng Android 2.3.3, sử dụng Google Map API lever 10 và Google Maps API
Web Services, sử dụng công nghệ XML, cơ sở dữ liệu SQLite.
Phần mềm ‘Du lịch Nha Trang bằng xe buýt’ sẽ cung cấp thông tin địa điểm
du lịch chia thành các nhóm: ăn uống, vui chơi, tham quan … Cung cấp chức năng
quản lý thông tin các địa điểm du lịch, cho phép người sử dụng thêm thông tin các vị
trí của mình chưa có trong dữ liệu, cung cấp thông tin các tuyến và trạm xe buýt, hiển
thị toàn bộ thông tin trên bảng đồ Google Map, lấy vị trí hiện tại trên bản đồ và chức
năng tìm đường đi.
Vì thời gian cộng với khả năng của bản thân có hạn và đây là một lĩnh vực khá
mới mẻ nên chương trình chắc chắc sẽ còn nhiều thiếu sót. Vì vậy tôi mong sẽ nhận
được nhiều góp ý từ phía thầy cô để chương trình có thể hoàn thiện thêm.
Cuối cùng tôi xin cảm ơn thầy Trần Minh Văn đã lo lắng và giúp đỡ em trong
suốt quá trình thực hiện đề tài.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
6
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Chương I: Giới thiệu
I.1 Du lịch Nha Trang
Nha Trang, một điểm du lịch hấp dẫn khách du lịch gần xa đặc bởi những bãi
biển yên bình và khí hậu mát mẻ suốt bốn mùa. Đến với Nha Trang khách du lịch
không những được thưởng thức vô vàn cảnh đẹp thiên nhiên mà còn được tìm hiểu về
văn hóa cả truyền thông lẫn hiện đại.
Trong khoảng 20 năm qua, du lịch Nha Trang đã phát triển khá toàn diện về cơ
sở hạ tầng cũng như chất lượng sản phẩm du lịch. Nhờ đó, Nha Trang đã trở thành
trung tâm du lịch lớn của cả nước, hàng năm thu hút lượng khách lớn đến nghỉ dưỡng.
Thiên nhiên đã ưu đãi cho Nha Trang những điều kiện tuyệt vời để phát triển du
lịch, đó là vịnh Nha Trang - một trong những vịnh đẹp nhất thế giới, thời tiết ấm áp
quanh năm… Vùng đất này còn có nhiều trầm tích văn hóa gắn liền với 2 nền hóa Việt
- Chăm, những lễ hội độc đáo của cư dân miền biển gắn với con người hiền hòa, mến
khách… Những chuyên gia du lịch thế giới đánh giá, với những tiềm năng vốn có,
Nha Trang hội tụ đầy đủ các lợi thế để trở thành một trung tâm du lịch biển của thế
giới như Bali (Indonesia), Phuket (Thái Lan).
Cơ sở hạ tầng du lịch Nha Trang phát triển rất nhanh, cho đến nay Nha Trang
đã có gần 500 cơ sở lưu trú với hơn 12.000 phòng; trong đó, khách sạn từ 3 đến 5 sao
có gần 3.800 phòng. Các thương hiệu khách sạn nổi tiếng của thế giới như: Sheraton,
Novotel, Marriot… đã có mặt ở Nha Trang. Thành phố biển cũng đã có những khu du
lịch lớn như: Tổ hợp du lịch giải trí Vinpearl, Khu du lịch Diamond bay Nha Trang,
Khu nghỉ mát Ana Mandara, Khu du lịch Hòn Tằm. Bên cạnh đó số lượng các nhà
hàng, quán bar quán cà phê, khu mua sắm ngày càng tăng phục vụ nhu cầu khách du
lịch trong và ngoài nước.
Các sự kiện văn hóa - du lịch mang tầm quốc gia và quốc tế liên tục được tổ
chức ở Nha Trang như: Các cuộc thi hoa hậu trong nước và quốc tế, chương trình
Festival Biển được tổ chức 2 năm/lần (từ năm 2003)… đã góp phần quảng bá hình ảnh
và từng bước khẳng định thương hiệu du lịch Nha Trang với du khách trong nước,
quốc tế.
Lượng khách đến nghỉ dưỡng ở Nha Trang liên tục tăng. Theo thống kê của
UBND TP. Nha Trang, năm 2011, Nha Trang đón khoảng 2,073 triệu lượt khách du
lịch (tăng 18,54% so với năm 2010), trong đó hơn 440.000 lượt khách quốc tế (tăng
13,5%), số ngày lưu trú bình quân của khách du lịch là 2,09 ngày/khách; tổng doanh
thu du lịch và dịch vụ ước đạt 2.142,9 tỷ đồng (tăng 20,28%)…
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
7
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Nhìn tổng thể, du lịch Nha Trang đã có những bước phát triển vượt bậc. Tuy
nhiên, sự phát triển của du lịch Nha Trang vẫn còn có những hạn chế cần khắc phục để
hướng tới sự phát triển bền vững. Thành phố cần phải đẩy mạnh công tác xúc tiến du
lịch, giới thiệu hình ảnh du lịch Nha Trang ra thị trường quốc tế với nhiều hình thức
khác nhau. Hy vọng, trong tương lai, Nha Trang sẽ trở thành trung tâm du lịch biển
quốc tế.
I.2 Công nghệ thiết bị di động
I.2.1 Di động đi tắt đón đầu trong thế giới công nghệ
Công nghệ di động trong những năm gần đây đã có những bước nhảy vọt nhanh
chóng cả về sức mạnh phần cứng lẫn tốc độ phổ biến của nó trong dân cư. Những
chiếc điện thoại thậm chí còn phát triển nhanh hơn cả thời kỳ hoàng kim của các công
nghệ trong quá khứ như ti vi, máy vi tính ... Bên cạnh đó, trong vòng 2 năm trở lại đây
thì thị trường máy tính bảng cũng trở nên vô cùng sôi động.
Tốc độ chiếm lĩnh 10% số người tiêu dùng của các lại công nghệ
Tốc độ chiếm lĩnh 10-40% số người tiêu dùng của các lại công nghệ
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
8
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Biều đồ trên đã cho chúng ta thấy khá rõ “chặng đường phát triển” của các loại
hình công nghệ. Điện thoại bàn và điện năng đã phải trải qua hơn 100 năm mới đạt tới
thời điểm bão hòa trong khi đó những công nghệ không dây như: radio, truyền hình
hay điện thoại di động lại có thể thâm nhập được 75% thị trường chỉ trong vòng 20
năm.
Những thành tựu mà công nghệ di động đã tạo ra là không thể phủ nhận. Khi
chiếc iPhone đầu tiên ra đời, kỷ nguyên của điện thoại thông minh bắt đầu phát triển
mạnh mẽ và từng bước chiếm lĩnh thị trường từ 5% cho đến 40% thị phần.
Đặc biệt, ở một số thị trường, sự phát triển điện thoại thông minh còn diễn ra
nhanh hơn rất nhiều, đơn cử như ở Mỹ đã có hơn 2/3 số điện thoại được bán ra hiện
nay là các điện thoại thông minh. Nhiều khả năng thì điện thoại thông minh sẽ chiếm
lĩnh tới 75% thị trường Mỹ trong vài năm tới, trở thành công nghệ có tốc độ phổ
biến nhanh nhất trong lịch sử loài người. Trong quý I năm 2012, điện thoại thông minh
chiếm đến 36% tổng số điện thoại di động được bán ra, tăng 25% so với cùng kì năm
trước, một tỷ lệ rất cao.
Trong khi đó, máy tỉnh bảng cũng có sự phát triển nhanh chóng ở Mỹ từ khi
iPad lần đầu ra mắt vào năm 2010. Các chuyên gia vẫn chưa dám khẳng định liệu nhu
cầu về thiết bị này có lan rộng ở khắp nơi trên thế giới hay không. Ở các nước phương
Tây có thể dễ dàng mua được một chiếc máy tính xách tay, điện thoại thông minh hay
máy tính bảng nhưng ở các nước đang phát triển nó là điều cần phải cân nhắc.
Nền móng cho sự phát triển của điện thoại di động chính là hệ thống mạng
không dây. Theo ITU (Liên Minh Viễn Thông Quốc tế), có 90% dân số thế giới (hiện
nay đã đạt gần 7 tỷ người) được bao phủ bởi mạng di động GSM, phần lớn trong số
đó là truy cập thông qua mạng lưới EDGE và GPRS. Hơn thế nữa, có 45% dân số thế
giới đã được biết hoặc đã từng sử dụng mạng di động 3G. Ngày nay việc triển khai
Internet tốc độ cao đã trở nên phổ biến ở mọi quốc gia ngay cả những nước đang phát
triển.
Sự tiến bộ của mạng không dây đã thúc đẩy sự phát triển của những sản phẩm
công nghệ “thông minh” như điện thoại thông minh và máy tính bảng. Với số lượng
người dùng các thiết bị “thông minh” ngày càng cao sẽ tăng trưởng số lượng người
dùng Internet. Không nằm ngoài số đó Việt Nam cũng không ngừng gia tăng số lượng
người sử dụng Internet đặt biệt xu hướng truy cập Internet từ thiết bị di động đang
bùng nổ mạnh mẽ. Tính đến thời điểm quý 4-2011, thế giới đã có 1,1 tỉ thuê bao 3G,
tăng 37% so với cùng kỳ năm trước. Trong đó, Mỹ, Nhật và Trung Quốc lần lượt là ba
cường quốc hàng đầu về lượng thuê bao 3G. Việt Nam đứng thứ 21 với 12 triệu thuê
bao 3G, đứng sau nhóm các quốc gia phát triển, xếp trên Thụy Điển (24), Hà Lan (27)
và Hi Lạp (28).
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
9
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Tiềm năng phát triển các thiết bị “thông minh ” tại Việt Nam là rất lớn. Các sản
phẩm máy tính bảng điện thoại “thông minh” của các hãng công nghệ nổi tiếng hầu hết
đều có mặt tại Việt Nam. Các hãng điện thoại trong nước cũng bắt đầu bán các thiết bị
“thông minh” giá rẻ ra thị trường. Điện thoại thông minh ngày càng rẻ hơn cũng đang
khiến nó nhanh chóng được phổ biến và tiếp cận với người dùng hơn. Và đó chỉ là
vấn đề thời gian bởi ngày càng có nhiều điện thoại thông minh có mức giá phải chăng
được tung ra để đáp ứng nhu cầu của cả những khách hàng có thu nhập không cao.
Theo thống kê năm 2012 có 30% điện thoại được bán ra ở Việt Nam là điện thoại
thông minh.
Chiếc điện thoại không còn đơn thuần là thiết bị liên lạc mà nó đả trở thành một
thiết bị đa chức năng phục vụ rất nhiều nhu cầu công việc và giải trí của con người.
Hiện tại điện thoại thông minh đang là ngọn sóng công nghệ trên thế giới. Và Việt
Nam cũng sẽ đón ngọn sóng đó chỉ tron một tương lai ngắn. “Làn sóng moblie” sẽ
thay đổi cách con người làm việc, giải trí và mang lại những thách thức mới.
I.2.2 Thời kỳ “hậu PC” và cơ hội cho các lập trình viên di động
Thời kỳ “hậu-PC” tiêu biểu là thế hệ các thiết bị di động thông minh có khả
năng chạy hệ điều hành quản lý đa nhiệm, kết nối dữ liệu tốc độ cao có thể đảm nhận
hầu hết nhiệm năng của một máy tính cá nhân bình thường (PC) mà thậm chí còn
nhiều điểm tiện lợi hơn. Đâu tiên phải kể đến đó là chiếc điện thoại di động của Apple
– Iphone. Thiết bị điện thoại thông minh này xuất hiện vào năm 2007 khác xa các loại
điện thoại truyền thống, màn hình cảm ứng rộng, không có bàn phím, chạy hệ điều
hành IOS đã gây sốt trong giới công nghệ. Chiếc Iphone đầu tiên được nhắc đến như
một huyền thoại công nghệ mở màng cho một trào lưu mới. Nó đã thúc đẩy thời kỳ
“Hậu PC” (Post-PC)
Theo Steve Jobs – Giám đốc điều hành tập đoàn Apple, các thiết bị hậu PC phải
trực quan và dễ dùng hơn so với PC. Cụ thể, với chiếc máy tính bảng iPad 2 mà công
ty của ông mới cho ra mắt, phần cứng và phần mềm "phải đan quyện vào nhau, chặt
chẽ hơn so với cách thức trên PC". Thời kỳ “hậu PC” là thời kỳ mà những hệ thống
nhúng là cốt lõi sẽ làm nên làn sóng đổi mới thức 3 sau sự phát triển của máy tính lớn
và mini (mainframe và mini computer) giai đoạn 1960 - 1980, PC-Internet giai đoạn
1980 – 2000.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
10
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Đại diện tiêu biển nhất cho thời đại “hậu PC” đó là những chiếc điện thoại
thông minh và máy tính bảng. Hai thiết bị đã tạo nên một làng sóng công nghệ mạnh
mẽ. Các xu hướng công nghệ của thế giới đều tập trung nhiều vào những thiết bị này.
Cùng với nó là sự phát triển chóng mặt của phần cứng và nhất là các phần mềm, các
ứng dụng di động và hệ điều hành di động.
Đầu tiên là sự xuất hiện của IOS trên thiết bị của Apple. Tiếp theo đó là sự xuất
hiện của Android – hệ điều hành mã nguồn mở do Google phát triển. Sau đó nữa là
WebOS của HP và Window Phone của Microsolf . Tuy nhiên IOS và Android là hai
hệ điều hành phát triển mạnh nhất. Android bắt đầu nhảy vọt sau IOS nhưng nó đang
có tốc độ phát triển nhanh hơn IOS.
Điều quan trọng tạo nên thành công cho một hệ điều hành di động đó là các
ứng dụng. Với một chiếc điện thoại thông minh bạn có thể cài đặt nhiều ứng dụng đa
dạng và phong phú phục vụ phục công việc và giải trí. Một tiêu chí đánh giá một hệ
điều hành này tốt hơn hệ điều hành kia là ở số lượng ứng dụng mà hệ điều hành đó có
thể cung cấp chất lượng của ứng dụng.
Hiện tại hệ điều hành IOS chiếm vị trí độc tôn với tổng cộng 356,577 ứng dụng.
Đứng thứ 2 là Android với 256,545 ứng dụng.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
11
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Android là hệ điều hành mã nguồn mở có thể sử dụng trên rất nhiều thiết bị và đang
có tốc độ phát triển ứng dụng rất nhanh.
Trong năm 2011, 10 xu hướng công nghệ chiến lược được các chuyên gia đánh
giá có bao gồm điện toán đám mây, ứng dụng di động (điện thoại thông minh… ).
Mỗi ngày có hàng triệu thiết bị đi động được bán ra đẫn đến nhu cầu về ứng dụng di
động ngày càng tăng. Đây là một cơ hội lớn cho các nhà lập trình các thiết bị di động.
Với các của hàng ứng dụng như AppStore, Google Play, lập trình viên hay nhóm lập
trình các nhân có thể đưa các sản phẩm đưa lên để bán cho người dùng. Đây là một lợi
thế lớn cho các lập trình viên lập trình trên thiết bị di động. Nhờ đó không cần phải
trực thuộc một công ty lập trình đủ lớn mà sản phần của người lập trình có thể được trả
tiền nếu sử dụng tốt và đáp ứng nhu cầu của người sử dụng. Nhà viết ứng dụng cá
nhân cũng có thể tiết kiệm được một khoảng tiền lớn chi phí quản cáo và kênh phân
phối đến cho khách hàng của mình.
Cụ thể hơn ở Việt Nam, lập trình di động đang là một cơ hội rất tốt cho các lập
trình viên bán ra các sản phẩm của mình. Có thể dễ dàng đưa sản phẩm của mình ra
thế giới tiêu thụ và thu được tiền từ những ứng dụng tốt và độc đáo. Đối với thị trường
ứng dụng trong nước, từ năm 2010 đến nay, cùng với xu thế phát triển thiết bị di động
của thế giới, Việt Nam cũng có một sự phát triển vượt bật trong mảng này.Với các chợ
ứng dụng của chính hãng như AppStore, Google Play nhiều người sử dụng vẫn còn
vấp phải rào cảng thanh toán. Vì vậy đây là cơ hội để các lập trình viên phát triển ứng
dụng tiêu thụ trong nước với các chợ ứng dụng của hãng thứ 3.
Điện thoại thông minh và máy tính bảng đã góp phần thúc đẩy kỷ nguyên “hậu
PC” phát triển. Và đã mở ra một cơ hội lớn cho các lập trình viên tự do chứng tỏ khả
năng sáng tạo của mình. Lập trình di động là một hướng đi mới và đầy triển vọng, và
là cơ hội lớn đối với nền Công nghệ thông tin ở Việt Nam.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
12
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
I.3 Mục đích thực hiện đề tài
Quảng bá du lịch và cung cấp thông tin du lịch là một công việc hết sức quan
trọng đối với ngành du lịch Nha Trang. Cần phải thực hiện điều đó trên rất nhiều
phương tiện đặt biệt là áp dụng công nghệ mới. Có nhiều website đã được xây dựng để
quản bá du lịch và cung cấp thông tin du lịch và đạt được hiệu quả tốt. Tuy nhiên với
xu hướng công nghệ hiện nay thì website đã không còn là phương tiện cung cấp thông
tin du lịch một cách thuận tiện nhất đối với khách du lịch.
Ví dụ muốn lên tìm một điểm ăn uống, vui chơi, mua sắm ở Nha Trang khách
du lịch phải tìm trước ở nhà, nguyên cứu và ghi lại thông tin địa chỉ. Hoặc trong
chuyến đi có thể mang theo laptop để tra cứu thông tin, tuy nhiên thông thường rất ít
người mang laptop du lịch bởi vì cồng kềnh và nặng nề, có thể sử dụng dịch vụ
internet công cộng, tuy nhiên cũng khá bất tiện vì phát sinh thêm vấn đề là phải tìm
thêm vị trí của dịch vụ internet công cộng, mỗi lần muốn tìm một địa điểm lại sử dụng
internet công cộng. Thậm chí bằng một cách nào đó khách du lịch có được địa chỉ của
địa điểm mong muốn, nếu không phải quen với đường phố Nha Trang cũng khó xác
địch được vị trí đó ở đâu. Giải pháp là sử dụng một bản đồ số trên laptop nhưng bản đồ
số trên laptop rất bất tiện khi mạng theo trong lúc đi đường, thêm một giải pháp nữa là
bản đồ giấy. Tuy nhiên sử dụng bản đồ giấy rất khó khăn để nhận ra vị trí hiện tại. Để
tìm một vị trí ăn uống, vui chơi đối với một khách du lịch Nha Trang trở thành một
vấn đề phức tạp, và nhiều du khách chấp nhận việc vui chơi ở các địa điểm tour du lịch
xắp xếp sẵn và chỉ đến các địa điểm thật sự nổi tiếng.
Ngoài ra khách du lịch có thể hỏi lái xe taxi đưa đến các vị trí đã biết trước, tuy
nhiên nếu địa điểm đó đã được biết trước. Hoặc nếu khách du lịch muốn tự đi thì sao?
Để giải quyết vấn đề ví dụ ở trên trở nên đơn giản, có một giải pháp đó chính là
sử dụng ứng dụng trên thiết bị di động. Với một bản đồ số Google Map, có một danh
sách các địa điểm nhà hàng, khách sạn, quán cà phê … mà khách du lịch có thể đến để
lựa chọn, hiển thị trực tiếp địa địa điểm đó trên bản đồ số. Với GPS, bản đồ có thể xác
định đươc vị trí hiện tại và từ đó gợi ý tuyến đường ngắn nhất đến mục tiêu. Và đặt
biệt thiết bị di động luôn sẵn sàng hoạt động 24/24, kích thước nhỏ gọn luôn mang
theo, cùng với mạng internet 3G hay WIFI thì việc tìm một địa điểm du lịch và đi đến
đó không còn gì thuận tiện hơn.
Ngoài ra bản đồ số còn tích hợp bản đồ các tuyến xe buýt ở Nha Trang hiển thị
toàn bộ 6 tuyến xe và các trạm xe tương ứng. Cho người dùng hình dung được tổng thể
các tuyến xe và biết tuyến xe buýt nào có thể đưa đến một địa điểm nhất định.
Với một số lượng địa điểm vui chơi, nhà hàng, quán bar, khách sạn, mua sắm ..
ở Nha Trang nhiều như hiện nay rất cần thiết phải có một cách tìm kiếm thông tin du
lịch thuận tiện nhất, đơn giản nhất, hiệu quả nhất. Để du khách đến Nha Trang có thể
biết đến Nha Trang một cách trọn vẹn không chỉ ở phong cảnh thiên nhiên, khí hậu.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
13
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Tốc độ phổ biến công nghệ di động “thông minh” nhanh chóng như bây giờ sẽ
mạng lại cơ hội cho các lập trình viên di động tự do thể hiện ý tưởng của mình. Làm
sao cho các sản phẩm phần mềm ngày càng hữu dụng, gần gũi và phục vụ cho công
việc và cuộc sống nhiều hơn.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
14
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Chương II: Hệ điều hành Android
II.1 Giới thiệu hệ điều hành Android
Android là một hệ điều hành di động dựa trên một phiên bản sửa đổi của Linux.
Được phát triển vào năm 2005 với một dự án cùng tên “Android”. Như một phần chiến
lược của mình để lấn sâu vào lĩnh vực di động Google Android đã mua về toàn bộ quá
trình phát triển cũng như đội phát triển nó.Đây là con át chủ bài của Google để cạnh
tranh thị phần hệ điều hành di động với Apple.
Google Android muốn mở và miễn phí, vì vậy hầu hết các mã android được
được đưa ra dưới dạng mã nguồn mở Apache License, điều này tương đương với việc
bất cứ ai muốn sử dụng Android có thể làm như vậy bằng cách tải về mã nguồn
android đầy đủ. Hơn nữa các nhà cung cấp (thường là những nhà phát triển phần cứng)
có thể thêm phần mở rộng và tùy biến cho android để phân biệt sản phẩm của họ với
sản phẩm của những người khác. Điều này đơn giản làm cho mô hình phát triển
android rất hấp dẫn và do đó khơi dậy sự quan tâm của nhiều nhà cung cấp. Những
nhà sản xuất coi android như một giải pháp – họ sẽ tiếp tục thiết kế phần cứng của
riêng mình và sử dụng android như một hệ điều hành chính.
Ưu điểm chính của việc áp dụng android là nó cung cấp một cách tiếp cận
thống nhất để phát triển ứng dụng. Các nhà phát triển chỉ cần phát triển cho android và
các ứng dụng của họ có thể chạy trên nhiều thiết bị khác nhau, miễn là các thiết bị
được hỗ trợ bằng cách sử dụng android. Trong thế giới điện thoại thông minh ứng
dụng là một phần quan trọng nhất của chuỗi thành công. Do đó các nhà sản xuất thiết
bị coi Android như là hy vọng tốt nhất để thách thức sự tấn công của Apple.
II.2 Những đặc trưng của hệ điều hành Android:
Application framework: cho phép sử dụng lại và thay thế các thành phần
trong lập trình ứng dụng.
Dalvik virtual machine: tối ưu hóa cho thiết bị di động.
Intergrated browser: trình duyệt tích hợp, dựa trên cơ chế WebKit mã
nguồn mở.
SQLite: sơ sở dữ liệu trong môi trường di động.
Media support: hỗ trợ các định dạng audio, video và hình ảnh thông dụng.
GSM Telephony: mạng điện thoại di động (phụ thuộc vào phần cứng).
Bluetooth, EDGE, 3G, và WiFi :các chuẩn kết nối dữ liệu (phụ thuộc vào
phần cứng).
Camera, GPS, la bàn, và gia tốc kế: (phụ thuộc vào phần cứng).
Môi trường phát triển phong phú: bao gồm thiết bị mô phỏng, công cụ
cho việc dò tìm lỗi, bộ nhớ và định hình hiệu năng và một plugin cho
Eclipse IDE.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
15
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
II.3 Các tính năng hỗ trợ sẵn trong hệ điều hành Android
Các tính năng được hổ trỡ tùy thuộc vào cấu hình phần cứng và phần mềm.
Storage: Sử dụng SQLite, một cơ sở dữ liệu quan hệ nhẹ cho việc lưu trữ
dữ liệu
Connectivity: Hỗ trợ GSM/EDGE, IDEN, CDMA, EV-DO, UMTS,
Bluetooth (bao gồm AD2P và AVRCP), Wifi, LTE và WiMAX
Messaging: hỗ trợ cả SMS và MMS
Web browser: Dựa trên mã nguồn mở Webkit, cùng với công nghệ
JavaScript V8 của Chrome
Media support: Bao gồm hỗ trợ các phương tiện truyền thông sau: H.263,
H.264 (Trong 3GP hoặc MP4 container ), MPEG-4 SP, AMR, AMR-WB
(3GP container), AAC, HE-AAC (MP4 hoặc 3GP container), MP3, MIDI,
Ogg Vorbis, WAV, JPEG, PNG, GIF và BMP
Hardware support: Accelerometer Sensor, Camera, Digital Compass,
Proximity Sensor và GPS
Multi-touch: Hỗ trợ màn hình cảm ứng đa điểm
Multi-tasking: Hỗ trợ ứng dụng đa tác vụ
Flash support: Android 2.3 hỗ trợ Flash 10.1
Tethering: Hỗ trợ kết nối internet không dây/có dây
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
16
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
II.4 Kiến trúc và các thành phần trong hệ điều hành
Android
Mô hình sau thể hiện đầy đủ kiến trúc các thành phần của hệ điều hành
Android.
II.4.1 Linux kernel (nhân Linux)
Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng và tầng
dưới của phần mềm. Lớp này chứa tất cả các thiết bị mức thấp điều khiển các thành
phần phần cúng khác nhau của một thiết bị Android.
II.4.2 Libraries
Libraries bao gồm một tập hợp các thư viện lập trình chứa mã lệnh cung cấp
những tính năng và thao tác chính trên hệ điều hành. Một số các thư viện cơ bản
được liệt kê dưới đây:
System C library: a BSD-derived triển khai các thư viện hệ thống ngôn
ngữ C chuẩn, được nhúng vào các thiết bị dựa trên hệ điều hành Linux.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
17
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Media Libraries – Dựa trên PacketVideo's OpenCORE; thư viện này hỗ
trợ cho việc chơi nhạc, quay phim, chụp hình theo các định dạng file
MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
Surface Manager – Quản lý truy cập đến các hệ thống con hiển thị cũng
như các lớp đồ họa 2D, 3D từ tầng ứng dụng.
LibWebCore – Thư viện được dùng để tạo nên thành phần webview trong
Android và có thể nhúng được vào nhiều ứng dụng.
SGL – Thư viện hỗ trợ đồ hoạ 2D.
3D libraries – Thư viện đồ họa 3D.
FreeType - bitmap and vector font rendering.
SQLite – Một cơ sở dữ liệu nhỏ được dùng cho các thiết bị cầm tay có bộ
nhớ hạn chế. SQLite không có quan hệ như các cơ sở dữ liệu khác.
II.4.3 Android runtime:
Tại cùng một tầng với Libraries, android runtime cung cấp một bộ lõi thư viện
cho phép các nhà phát triển viết các ứng dụng android bằng cách sử dụng ngôn ngữ lập
trình java. Android runtime cũng bao gồm các máy ảo Dalvik, cho phép mọi ứng dụng
android chạy trong tiến trình riêng của mình. Dalvik là một máy ảo chuyên dụng được
thiết kế đặc biệt cho android và tối ưu hóa cho các thiết bị điện thoại di động với giới
hạn bộ nhớ và CPU.
II.4.4 Application framework 2.4.3 Android runtime:
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 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 API. Đưa ra
những khả năng khác nhau của hệ điều hành android vào ứng dụng để sử dụng chúng
trong các ứng dụng của mình.
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: các
View (là dùng để hiển thị thông tin và để người dùng thao tác), Content Provider để
chia sẻ dữ liệu giữa các ứng dụng, Resource Manager truy xuất tài nguyên,
Notification Manager hiển thị các thông báo, Activity Manager quản lý chu trình sống
của ứng dụng và điều hướng Activity.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
18
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
II.4.5 Applications:
Tại lớp trên cùng sẽ là các ứng dụng cho android (như điện thoại, danh bạ, trình
duyệt,…) cũng như các ứng dụng được tải về và cài đặt từ AndroidMarket hay bất lý
ứng dụng nào bạn viết được tại tầng này.
II.5 Các khái niệm cơ bản trong lập trình ứng dụng
Android
II.5.1 Activity
Một activity thể hiện một giao diện đồ họa người dùng. Ví dụ một activity có
thể biểu diễn một danh sách các menu item để người dùng có thể chọn và có thể hiển
thị ảnh cùng với tiêu đề. Một ứng dụng gửi tin nhắn văn bản có thể có một hoạt động
là hiển thị một danh sách các liên hệ để gửi tin nhắn tới, hoạt động thứ hai là viết tin
nhắn tới liên hệ được chọn, các hoạt động khác nữa là xem lại tin nhắn cũ hay thay đổi
cài đặt. Mặc dù chúng làm việc cùng nhau để tạo thành một giao diện người dùng, mỗi
activity độc lập với những cái khác. Mỗi activity là một lớp con của lớp cơ sở Activity.
Một ứng dụng có thể gồm chỉ một activity hay nhiều activity. Activity chính
phải được hiển thị đầu tiên khi khởi động chương trình. Chuyển từ một activity sang
activity khác bằng cách cho activity hiện thời khởi động activity kế tiếp.
Mỗi activity được vẽ vào một cửa sổ trên màn hình, mặc định sẽ lấp đầy màn
hình, nhưng nó có thể nhỏ hơn màn hình và nằm trên các cửa sổ khác ví dụ như
activity thông báo một thông tin gì đó.
Nội dung trực quan của cửa sổ được cung cấp bởi một cây phân cấp các đối
tượng view dẫn xuất từ lớp View. Mỗi view điều khiển một khoảng hình chữ nhật cụ
thể bên trong cửa sổ. View cha chứa và tổ chức bố cục các view con. Các view lá vẽ
trong hình chữ nhật mà chúng điều khiển và đáp ứng lại các hành động người dùng
trực tiếp ở khoảng trống này. Do đó, các view là nơi mà các tương tác của activity với
người dùng diễn ra.
Ví dụ một view có thể hiển thị một hình ảnh nhỏ và khởi tạo một hoạt động khi
người dùng nhấn vào hình ảnh đó. Android có một số view đã xây dựng sẵn mà bạn có
thể sử dụng – gồm có các buttons, text fields, scroll bars, menu items, check boxes …
Một cây phân cấp view được đặt trong một cửa sổ của activity bằng phương
thức Activity.setContentView(). Content view là đối tượng View ở gốc của cây phân
cấp.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
19
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Class cơ sở Activity định nghĩa một loạt các sự kiện mà điều chỉnh vòng đời
của một hoạt động. Class Activity định nghĩa các sự kiện sau đây :
onCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên
onStart(): Được gọi khi hoạt động trở nên hữu hình so với người dùng
onResume(): Được gọi khi hoạt động bắt đầu tương tác với người sử dụng
onPause(): Được gọi để dừng các hoạt động hiện tại và nối lại các hoạt
động trước đó
onStop(): Được gọi khi hoạt động không còn hiển thị với người dùng
onDestroy(): Được gọi trước khi hoạt động bị phá hủy bởi hệ thống (bằng
tay hoặc bằng hệ thống để bảo tồn bộ nhớ)
onRestart(): Được gọi khi hệ thống đã được dừng lại và khởi động lại một
lần nữa
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
20
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Sau đây là sơ đồ các sự kiện trong vòng đời của một Activity:
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
21
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
II.5.2 Service
Một service không có giao diện trực quan, nó chạy trên nền trong một khoảng
thời gian không xác định. Ví dụ một service có thể chơi nhạc nền, hay nó nạp dữ liệu
trên mạng hay tính toán cái gì đó và cung cấp kết quả cho activity cần đến nó. Mỗi
service mở rộng từ lớp cơ sở Service.
Trong khi kết nối, người sử dụng có thể giao tiếp với service thông qua giao
diện mà service đó trưng ra. Ví dụ như trong service chơi nhạc, giao diện này có thể
cho phép người dùng pause, rewind, stop và restart lại playback.
Giống như các activity và các thành phần khác khác, service chạy trong thread
chính của tiến trình ứng dụng. Vì thế chúng không thể chặn những thành phần khác
hay giao diện người dùng, chúng thường tạo ra các thead khác cho các nhiệm vụ hao
tốn thời gian.Sơ đồ các sự kiện trong vòng đời của một service:
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
22
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
II.5.3 Content provider
Một content provider tạo ra một tập cụ thể các dữ liệu của ứng dụng khả dụng
cho các ứng dụng khác. Dữ liệu có thể được lưu trữ trong hệ thống file, trong một cơ
sở dữ liệu SQLite, hay trong một cách khác nào đó. Content provider mở rộng lớp cơ
sở ContentProvider để cài đặt một tập các chuẩn các phương thức cho phép các ứng
dụng khác đạt được và lưu trữ dữ liệu của kiểu mà nó điều khiển. Tuy nhiên, các ứng
dụng không gọi trực tiếp các phương thức này, chúng sử dụng một đối tượng
ContentResolver và gọi các phương thức của nó. Một ContentResolver có thể nói
chuyện với bất cứ content provider nào, chúng cộng tác với provider để quản lý giao
tiếp liên tiến trình.
II.5.4 Broadcast Receive
Một Broadcast Rreceiver là một thành phần không làm gì ngoài việc nhận và
đáp lại các thông báo broadcast. Nhiều broadcast khởi đầu trong mã hệ thống - ví dụ
như thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay người dùng đã thay
đổi ngôn ngữ … Các ứng dụng có thể tạo ra các broadcast, chẳng hạn để ứng dụng
khác biết được một số dữ liệu đã được tải về thiết bị và sẵn sàng cho việc sử dụng
chúng.
Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ thông báo
nào mà nó cho là quan trọng. Tất cả các receiver mở rộng từ lớp cơ sở
BroadcastReceiver.
Broadcast Receiver không hiển thị một giao diện người dùng. Tuy nhiên chúng
có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, hay chúng có thể sử
dụng NotificationManager để cảnh báo người dùng. Notifications có thể lấy sự chú ý
của người dùng bằng nhiều cách, lóe sáng đèn sau, rung, tạo ra âm thanh, vân vân.
Chúng thường lấy một biểu tượng bền vững trong thanh trạng thái, cái mà người dùng
có thể mở để lấy thông điệp.
II.5.5 View
Trong một ứng dụng Android, giao diện người dùng được xây dựng từ các đối
tượng View và ViewGroup. Có nhiều kiểu View và ViewGroup. Mỗi một kiểu là một
con của class View và tất cả các kiểu đó được gọi là các Widget.
Tất cả mọi widget đều có chung các thuộc tính cơ bản như là cách trình bày vị
trí, background, kích thước, lề,… Tất cả những thuộc tính chung này được thể hiện hết
ở trong đối tượng View.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
23
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu trúc
phân cấp như hình dưới. Một màn hình là một tập hợp các Layout và các widget được
bố trí có thứ tự. Để thể hiện một màn hình thì trong hàm onCreate của mỗi Activity
cần phải được gọi một hàm là setContentView(R.layout.main); hàm này sẽ load giao
diện từ file XML lên để phân tích thành mã bytecode.
II.5.6. Intent
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. 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.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
24
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
II.6 Các thành phần trong một project ứng dụng Android
II.6.1. AndroidManifest.xml
Trong bất kì một dự án Android nào khi tạo ra đều có một file
AndroidManifest.xml, file này được dùng để định nghĩa các màn hình sử dụng, các
quyền cũng như các giao diện cho ứng dụng. Đồng thời nó cũng chứa thông tin về
phiên bản SDK cũng như màn hình chính sẽ chạy đầu tiên.
Ví dụ file manifest:
File này được tự động sinh ra khi tạo một dự án Android. Trong file manifest
bao giờ cũng có 3 thành phần chính đó là: application, permission và version.
Application: chứa các giá trị định nghĩa cho một ứng dụng Android như
icon,tên ứng dụng, chế độ hiển thị giao diện…Ngoài ra cần phải khai báo các Activity
và Service có trong chương trình tại đây.
Permission: bao gồm các thuộc tính chỉ định quyền truy xuất và sử dụng tài
nguyên của ứng dụng. Khi cần sử dụng một loại tài nguyên nào đó thì trong file
manifest của ứng dụng cần phải khai báo các quyền truy xuất tương ứng
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
25
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
SDK version: Xác định phiên bản SDK nhỏ nhất mà ứng dụng hiện đang sử
dụng tương ứng với một phiên bản hệ điều hành Android mà ứng dụng có thể tương
thích.
II.6.2. File R.java
File R.java là một file tự động sinh ra ngay khi tạo ứng dụng, file này được sử
dụng để quản lý các thuộc tính được khai báo trong file XML của ứng dụng và các tài
nguyên hình ảnh.Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện
nào xảy xa làm thay đổi các thuộc tính trong ứng dụng.
Có thể nói file R.java hoàn toàn không cần phải đụng chạm gì đến trong cả quá
trình xây dựng ứng dụng.
II.6.3 Thư mục src
Là vị trí chứa gói các class trong ứng dụng. Các class có thể là các một Activity
hoặc Service hoặc các lớp chức năng nào đó được viết bằng ngôn ngữ Java dựa trên
API được cung cấp sẵn của Android. Cần phải có ít nhất một Activity và khai báo là
Activity chính để chương trình có thể chạy được.
II.6.4 Thư mục rec
Thư mục chứa tài nguyên ứng dụng. Thư mục này bao gồm 5 thư mục con là:
drawable – hdpi, drawable – mdpi, drawable – ldpi,layout,values.
Drawable – hdpi, drawable – mdpi, drawable – ldpi là ba thư mục dùng
để chứa các hình ảnh được sử dụng trong quá trình thiết kế giao diện ứng dụng, bao
gồm cả icon của ứng dụng. 3 thư mục tương ứng với hình ảnh sẽ được sử dụng ở ba độ
phân giải khác nhau lần lược là: cao, trung bình, thấp. Điều này giúp các nhà lập trình
có thể thiết kế giao diện ứng dụng phù hợp với nhiều độ phân giải màn hình tương
thích với nhiều lại thiết bị.
Thư mục layout chứa các file xml dùng để khai báo và thiết kế giao diện cho
một Activity hay một thành phần điều khiển con trong ứng dụng Android.
Thư mục values gồm các file xml chứa các giá trị chuỗi, mã màu … Giúp người
lập trình có thể dễ dàng thay đổi những giá trị này trong ứng dụng một cách nhanh
chóng mà khôn cần phải sửa trong code của ứng dụng.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
26
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Chương III: Công nghệ XML và Webservice
III.1 Công nghệ XML
III.1.1 Lịch sử ra đời chuẩn XML, XML là gì?
XML (viết tắt từ tiếng Anh eXtensible Markup Language, “Ngôn ngữ Đánh dấu
Mở rộng”) là ngôn ngữ đánh dấu do W3C đề nghị. Mục đích chính của XML là đơn
giản hóa việc chia sẻ dữ liệu giữa các hệ thống khác nhau, đặc biệt là các hệ thống
được kết nối với Internet.
XML là một ngôn ngữ đánh dấu tương đối mới vì nó là một subset (một phần
nhỏ hơn) của và đến từ (derived from) một ngôn ngữ đánh dấu ra đời trước tên là
Standard Generalized Markup Language (SGML). Ngôn ngữ HTML cũng dựa vào
SGML, thật ra nó là một áp dụng của SGML.
SGML được phát minh bởi Ed Mosher, Ray Lorie và Charles F. Goldfarb của
nhóm IBM research vào năm 1969, khi con người đặt chân lên mặt trăng. Lúc đầu nó
có tên là Generalized Markup Language (GML), và được thiết kế để dùng làm metalanguage, một ngôn ngữ được dùng để diễn tả các ngôn ngữ khác - văn phạm, ngữ
vựng của chúng ,.v.v.. Năm 1986, SGML được cơ quan ISO (International Standard
Organisation) thu nhận (adopted) làm tiêu chuẩn để lưu trữ và trao đổi dữ liệu. Khi
Tim Berners-Lee triển khai HyperText Markup Language - HTML để dùng cho các
trang Web hồi đầu thập niên 1990, ông ta cứ nhắc nhở rằng HTML là một áp dụng của
SGML.
Vì SGML rất rắc rối, và HTML có nhiều giới hạn nên năm 1996 tổ chức W3C
thiết kế XML. XML version 1.0 được định nghĩa trong hồ sơ February 1998 W3C
Recommendation, giống như một Internet Request for Comments (RFC), là một "tiêu
chuẩn".
III.1.2 Cấu trúc của file XML và tài liệu XML
Cấu trúc file xml:
Document Prolog: lưu trữ metadata của XML gồm 2 phần đó là khai báo XML
và khai báo kiểu dữ liệu trong XML. Phần khai báo XML (XML declaration) bao gồm
các thông tin về version của XML, charset, encoding…. Phần khai báo kiểu dữ liệu
trong XML (DTD) dùng để khai báo cấu trúc của các thẻ dùng trong XML.
Root element hay còn gọi là Document Element: chứa tất cả các phần tử và nội
dung của nó. 1 phần tử của XML phải có thẻ mở và thẻ đóng.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
27
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Dưới đây là sơ đồ cấu trúc của tài liệu XML
Cấu trúc tài liệu xml:
Gồm có hai phần đó là cấu trúc logic và cấu trúc vật lý .
Cấu trúc logic: Định nghĩa các phần tử, các thuộc tính, kiểu dữ liệu
Cấu trúc vật lý:chứa dữ liệu và các phần tử chứa dữ liệu như text, hình ảnh,
media …
III.1.3 Đặc điểm của XML
XML cung cấp một phương tiện dùng văn bản (text) để mô tả thông tin và
áp dụng một cấu trúc kiểu cây cho thông tin đó.
Đơn vị cơ sở của XML là các ký tự theo định nghĩa của Universal Character
Set (Bộ ký tự toàn cầu).
Các tệp XML có thể dùng cho nhiều loại dữ liệu đa phương tiện. RFC3023
định nghĩa các loại "application/xml" và "text/xml", với ý rằng dữ liệu được
biểu diễn bằng XML mà không nói gì đến ngữ nghĩa của dữ liệu.
XML được dùng kết hợp với HTML, rất hữu ích cho việc trao đổi dữ liệu và
tạo ra tùy biến cho các tags.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
28
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
III.1.4 XML và HTML
XML
HTML
Content Markup Language
Presenttation Markup Language
Cho phép người sử dụng định nghĩa
Các phần tử được định nghĩa sẵn
các phần tử.
Kiểm tra tính hợp lệ
Hầu như không bắt lỗi
Cho phép trao đổi dữ liệu giữa các ứng
Chỉ được thiết kế để trình diễn
dụng
Cần phải được định nghĩa một cách
Không bắt buộc
chặt chẽ
Các phần tử phải được đóng
Các phần tử rổng không cần đóng
III.1.5 Ngôn ngữ đặt tả cấu trúc
DTD (Document Type Definition)
Một DTD xác định ngữ pháp của một tài liệu XML, DTD định nghĩa cấu trúc
tài liệu XML bằng một tập những qui tắc của phần tử (elements) và thuộc tính
(attributes).
Ví dụ:
]>
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
29
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
XML Schema
XML Schema mô tả cấu trúc của tài liệu XML, thay thế cho DTD.
XML Schema mô tả:
Các phần tử và thuộc tính trong tài liệu XML.
Thứ tự và số lượng các phần tử con.
Các kiểu dữ liệu của phần tử và thuộc tính.
Ví dụ:
III.1.6 Ưu điểm của XML
Dễ dàng xử lý, chuyển tải và trao đổi dữ liệu.
Mô tả dữ liệu và cách thể hiện dữ liệu thông qua các thẻ.
Tổ chức dữ liệu và cấu trúc phân cấp
Dữ liệu độc lập là ưu điểm chính của XML. Do XML chỉ dùng để mô tả
dữ liệu bằng dạng text nên tất cả các chương trình đều có thể đọc được
XML.
Dễ dàng để tạo 1 file XML
Lưu trữ cấu hình cho web site
Sử dụng cho phương thức Remote Procedure Calls (RPC) phục vụ web
service
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
30
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
III.2 Webservice
III.2.1 Webservice là gì ?
Webservice(dịch vụ web) là sự kết hợp các máy tính cá nhân với các thiết bị
khác, các cơ sở dữ liệu và các mạng máy tính để tạo thành một cơ cấu tính toán ảo mà
người sử dụng có thể làm việc thông qua các trình duyệt mạng hoặc ứng dụng có kết
nối mạng.
Webservice
Một web service có thể được mô tả như là một chức năng có thể duy trì trên
web, và có thể được gọi bởi bất kỳ ứng dụng nào hay dịch vụ nào. Nó có thể là một
business application hay một system function.
Bản thân các dịch vụ này sẽ chạy trên các máy chủ trên nền Internet chứ không
phải là các máy tính cá nhân, do vậy có thể chuyển các chức nǎng từ máy tính cá nhân
lên Internet. Người sử dụng có thể làm việc với các dịch vụ thông qua bất kỳ loại máy
hay phần mềm nào có hỗ trợ web service và có truy cập internet, kể cả các thiết bị cầm
tay. Do đó các web service sẽ làm internet biến đổi thành một nơi làm việc chứ không
phải là một phương tiện để xem và tải nội dung.
Điều này cũng sẽ đưa các dữ liệu và các ứng dụng từ máy tính cá nhân tới các
máy phục vụ của một nhà cung cấp dịch vụ web. Các máy phục vụ này cũng cần trở
thành nguồn cung cấp cho người sử dụng cả về độ an toàn, độ riêng tư và khả nǎng
truy nhập.
Các máy phục vụ ứng dụng sẽ là một phần quan trọng của các web service bởi
vì thường thì các máy chủ này thực hiện các hoạt động ứng dụng phức tạp dựa trên sự
chuyển giao giữa người sử dụng và các chương trình kinh doanh hay các cơ sở dữ liệu
của một tổ chức nào đó.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
31
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Một số nhà quan sát ngành công nghiệp này cho rằng web service không thực
sự là một khái niệm mới và phản ánh một phần không nhỏ khái niệm mạng máy tính
vốn đã trở nên quen thuộc trong nhiều nǎm qua. Web service chủ yếu dựa trên một lời
gọi thủ tục từ xa không chặt chẽ mà có thể thay thế các lời gọi thủ tục từ xa chặt chẽ,
đòi hỏi các kết nối API phù hợp đang phổ biến hiện nay. Dịch vụ web sử dụng XML
chứ không phải C hay C++, để gọi các quy trình.
Tuy nhiên các chuyên gia khác lại cho rằng web service là một dạng API dựa
trên phần mềm trung gian, có sử dụng XML để tạo phần giao diện trên nền Java 2
(J2EE) hay các server ứng dụng .NET. Giống như các phần mềm trung gian, web
service sẽ kết nối server ứng dụng với các chương trình khách hàng.
III.2.2 Một số đặt điểm cơ bản của webservice
Một webservice có thể được truy cập thông qua web.
Một webservice có giao diện dịch vụ. Giao diện này giúp cho webservice có thể
được gọi bởi bất kỳ một ứng dụng nào hay bởi webservice nào khác. Giao diện dịch vụ
là một tài liệu XML. Bởi vì XML có thể thể hiện rõ vai trò trong công nghệ trao đổi
thông tin toàn cục (global exchange technology) được chấp nhận bởi phần lớn công
nghệ hiện nay.
Các Dịch vụ web dùng giao thức tiêu chuẩn web để giao tiếp, không như COM,
RMI hay CORBA. XML được dùng để trao đổi thông tin giữa các chương trình ứng
dụng và dịch vụ.
III.2.3 Phân loại webservice
Service có hai loại :
Dịch vụ ứng dụng và dịch vụ hệ thống (Application and System Service ). Một
Application Service thể hiện một hành động của user như duyệt thư email, hay kiểm
tra tỷ số hối đoái… Một System Service thể hiện yêu cầu của kiến trúc hệ thống và sự
quản lý như bảo mật , lưu trữ và chịu lỗi, quản lý transaction hay messaging.
Một dịch vụ có hai đặc điểm chính : Interface và Registration. Sử dụng
Interface, một dịch vụ có thể được gọi từ một chương trình khác. Một service được
đăng ký trong một registry.
Các ví dụ về công nghệ liên quan đến hệ thống hướng dịch vụ (service-oriented
system) là Remote Method Invocation (RMI), Jini, CORBA và Distributed Computing
Environment (DCE).
Một vấn đề tổng quát với service hệ thống là các client cần thiết chỉ rõ giao
thức để yêu cầu các dịch vụ từ các hệ thống. Web service là một hệ thống phát triển từ
hệ thống hướng dịch vụ , dùng giao tiếp tổng quát để chuyển tải các thông điệp giữa
các hệ thống.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
32
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Một tập hợp các modular service có thể được cung cấp bởi cùng công ty hay
bởi nhiều công ty khác nhau được mix và match lại để trở thành một business process.
Lấy ví dụ đơn giản dễ nhận thấy nhất về webservice là hệ thống .NET passport
của Hotmail. Vấn đề đăng nhập trở nên đơn giản giữa các web site nếu giải quyết bằng
webservice. Web site tương tác với các site khác thông qua Web Service, điều này cho
phép thông tin người dùng được chia xẻ giữa các chúng. Một user khi điền thông tin
đăng nhập chỉ một lần duy nhất, và có thể dùng nó cho dịch vụ email, và dùng cùng
login user cùng mật khẩu trong một “accounting package service site”.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
33
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Chương IV: Google Map và Google Maps API Web
Services
IV.1 Google Map
IV.1.1 Giới thiệu Google Map
Google Maps (thời gian trước còn gọi là Google Local) là một dịch vụ ứng
dụng và công nghệ bản đồ trực tuyến trên web miễn phí được cung cấp bởi Google và
hỗ trợ nhiều dịch vụ dựa vào bản đồ như Google Ride Finder 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 Google Maps API. Nó cho phép
thấy bản đồ đường sá, đường đi cho xe đạp, cho người đi bộ 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.
Một sản phẩm liên quan, đó là Google Earth, một ứng dụng độc lập dành cho
Microsoft Windows, Mac OS X và Linux cho phép xem các tính năng mở rộng khác.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
34
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Google Map là một trong những ứng dụng phổ biến nhất của Google hiện nay.
Khi mà việc sử dụng bản đồ giấy đã trở lên lỗi thời thì dịch vụ tìm kiếm bản đồ số, bản
đồ vệ tinh, hệ thống GPS là hết sức cần thiết. Giờ đây chúng ta có thể dễ dàng truy cập
vào Google Map dù ở bất cứ nơi đâu để tra cứu địa chỉ hoặc sử dụng hệ thống GPS
cũng rất phổ biến. Đặt biệt khả năng tích hợp dịch vụ bản đồ Google Map là rất cần
thiết và quan trọng.
IV.1.2 Google Maps for Mobile
Năm 2006, Google đã giới thiệu một ứng dụng Java có tên là Google Maps for
Mobile. Mục đích để chạy trên bất kỳ thiết bị di động nào dựa có cũng cấp nền tảng
Java. Rất nhiều tính năng chính của phiên bảng Google Maps trên web có mặt trong
ứng dụng.
Ngày 28 tháng 11, 2007, Google Maps for Mobile 2.0 được phát hành. Nó cung
cấp một dịch vụ xác định vị trí giống như GPS nhưng vẫn hoạt động nếu thành phần
GPS trong phần cứng không có hoạt không hoạt động. Vị trí hiện tại chỉ được bắt nếu
thành phần GPS sẵn sàng hoạt động. Tính năng định vị không cần thành phần GPS
dựa vào phần mềm xác định trạm phát sóng không dây và trạm BTS gần nhất. Sau đó
phần mềm sẽ tìm trong cơ sở dữ liệu của nó vị trí của các điểm phát sóng WiFi và các
trạm BTS mà nó biết được. Bằng cách xác định cường độ tín hiệu từ nhiều trạm phát
sóng WiFi và BTS đã biết vị trí, phần mềm sẽ tính toán ra được vị trí hiện tại của
người dùng.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
35
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Thứ tự ưu tiên tính toán vị trí như sau:
Thiết bị bắt vị trí GPS
Trạm WiFi
Trạm BTS
Tính đến ngày 15 tháng 12 năm 2008, dịch vụ này có sẵn cho các nền tảng sau
đây:
Android
iOS (iPhone, iPod Touch, iPad)
PlayStation Vita 3G Models
Windows Mobile (không hỗ trợ Windows Phone 7 từ 21/12/2011)
Nokia/Symbian (S60 3rd & 5th)
Symbian OS (UIQ v3)
BlackBerry
Điện thoại hỗ trợ Java-Platform (từ MIDP 2.0 trở lên)
Palm OS (Centro và mới hơn)
Palm webOS (Palm Pre và Palm Pixi)
Ngày 4 tháng 11, năm 2009, Google Maps Navigation đã được phát hành trên
hệ điều hành Google Android 2.0 Eclair trên điện thoại Motorola Droid, thêm chức
năng ra lệnh bằng giọng nói, báo cáo lưu lượng truy cập, và hỗ trợ xem đường phố.
Phát hành ban đầu được giới hạn ở Hoa Kỳ. Dịch vụ này đã được đưa ra tại Anh vào
ngày 20 tháng 4 năm 2010 và trong phần lớn của lục địa châu Âu vào ngày 09 tháng 6
2010 (bao gồm Áo, Bỉ, Canada, Đan Mạch, Pháp, Đức, Ý, Hà Lan, Bồ Đào Nha, Tây
Ban Nha, và Thụy Sĩ ).
Trong tháng 3 năm 2011, Phó Chủ tịch Dịch vụ Location Service, Marissa
Mayer thông báo mà Google đã cung cấp dịch vụ bản đồ đến 150 triệu người sử dụng.
Trong tháng sáu năm 2012, Apple thông báo rằng họ sẽ loại bỏ Google Maps
trên IOS 6 và sẽ được thay thế bằng dịch vụ bản đồ của riêng của họ.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
36
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
IV.2 Google Maps API Web Services
IV.2.1 Giới thiệu Google Maps API Web Services
Google Maps API Web Services là một tập các giao diện HTTP cung cấp thông
tin địa lý cho ứng dụng.
Google Maps API Web Services bao gồm:
Directions API
Distance Matrix API
Elevation API
Geocoding API
Places API
IV.2.2 Sử dụng Google Maps API Web Services
Google Maps API cung cấp các dịch vụ như là các giao diện phục vụ cho việc
yêu cầu dữ liệu địa lý và sử dụng dữ liệu đó trong ứng dụng của nhà phát triền. Các
dịch vụ này được thiết kế để sử dụng với một ứng dụng bản đồ.
Các dịch vụ này sử dụng HTTP request, thiết lập các chuỗi URL request để gởi
yêu cầu cho web service. Thông thường, web service sẽ trả về kết quả là tập tin JSON
hoặc XML. Phân tích cú pháp kết quả trả về để sử dụng.
URL request có dạng:
http://maps.googleapis.com/maps/api/service/output?parameters
service: loại dịch vụ.
output: kết quả ở dạng tập tin JSON hay XML.
parameters: các tham số phù hợp.
SSL Access
Có thể truy cập Google Maps API Web Services thông qua HTTPS. Truy cập
Maps API Web Service thông qua HTTPS được khuyến khích sử dụng nếu ứng dụng
có chứa những dữ liệu nhạy cảm như tọa độ người dùng.
https://maps.googleapis.com/maps/api/service/output?parameters
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
37
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Theo dõi sử dụng với tham số sensor
Sử dụng Google Maps API yêu cầu nhà phát triển phải chỉ ra rằng ứng dụng có
sử dụng một cảm biến (ví dụ cảm biến GPS) để xác định vị trí người dùng trong bất cứ
yêu cầu nào cho service. Nó khá quan trọng cho điện thoại. Nếu ứng dụng Google
Map API sử dụng bất cứ dạng cảm biến để xác định vị trí của thiết bị phải thiết lập giá
trị của tham số sensor=true.
Trong trường hợp ứng dụng không sử dụng cảm biến thì vẫn phải gán giá trị
sensor=false.
Xây dựng chuỗi URL request hợp lệ
Một chuỗi URL có thể chứa những ký tự đặt biệt. Ví dụ trong trình duyệt web,
chuỗi URL được nhập vào thanh địa chỉ chứa những ký tự đặt biệt (ví dụ chứa tiếng
Việt có dấu), trình duyệt phải tự chuyển sang kiểu mã hóa khác trước khi gởi đi. Một
số trình duyệt có thể nhận những chuỗi ký tự ở dạng mã hóa UTF-8. Quá trình chuyển
kiểu mã hóa ký tự đó gọi là URL-encoding.
Cần phải dịch những ký tự đặt biệt bởi vì tất cả các URL cần phải phù hợp với
cú pháp đã được qui định ở W3 Uniform Resource Identifier. Có nghĩa là URL chỉ
chứa các ký tự thuộc một tập hợp các ký tự ASCII. Các ký tự được sử dụng trong
chuỗi URL được qui định trong bảng sau:
Nhóm
Ký tự
Alphanumeric a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H
IJKLMNOPQRSTUVWXYZ0123456789
Unreserved
-_.~
Reserved
!*'();:@&=+$,/?%#[]
Việc chuỗi URL chỉ chứa các ký tự ASCII đã được qui định dẫn đến 2 tình
huống:
Ký tự muốn đưa vào URL không nằm trong tập ký tự được cho phép (ví dụ
tiếng Việt có dấu)cần được mã hóa bằng các ký tự trên. Ký tự khoảng cách thường
được thay thế bằng ký tự “+”.
Ký tự muốn sử dụng theo cách thông thường nằm trong nhóm ký tự dành riêng
(Ví dụ ký tự “?”). Nếu muốn sử dụng ký tự dành riêng phải mã hóa.
Ký tự được mã hóa bằng cách sử dụng ký tự “%” theo sau là hai ký tự chứa giá
trị hex đại diện cho ký tự hệ UTF-8.
Giới hạn của chuối URL là 2048 ký tự. Hầu hết các URL request ít khi đạt đến
ngưỡng này, tuy nhiên vẫn phải cẩn thận để tránh trường hợp web service không trả lời
vì chuỗi URL quá dài.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
38
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Processing Responses
Kết quả trả về của Google Direction API khá dễ hiểu nhưng lại ít thân thiện với
người sử dụng. Khi giởi yêu cầu và nhận được kết quả, tốt nhất là không hiển thị tất cả
những gì nhận được mà chỉ cần trích xuất một số thông tin phù hợp. Tóm lại là cần
phải phân tích cú pháp kết quả nhận được và chỉ trích xuất một số thông tin có ích.
Phân tích cú pháp kết quả nhận được phụ thuộc vào loại tập tin trả về là XML
hay JSON và có thể sử dụng nhiều kỹ thuật và ngôn ngữ lập trình khác nhau.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
39
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
IV.3 Google Geocoding API
IV.3.1 Mã hóa địa lý là gì?
Mã hóa địa lý là tiến trình chuyển địa chỉ (ví dụ: số 2, đường Nguyễn Đình
Chiểu, Vĩnh Thọ, Nha Trang)sang tọa độ địa lý (ví dụ: kinh độ 12.268491, vĩ độ
109.202148) để đánh dấu trên bảng đồ. Google Geocoding API cung cấp một phương
thức trực tiếp để truy cập bộ mã hóa địa lý thông qua giao thức HTTP. Ngoài ra dịch
vụ Google Geocoding API còn cho phép giải mã từ tọa độ sang địa chỉ.
IV.3.2 Giới hạn sử dụng
Google Geocoding API giới hạn ở 2500 truy vấn mỗi ngày. Nếu trả phí con số
này tăng lên 100000. Các giới hạn này được đặt ra để ngăn chặn sự lạm dụng dịch vụ.
Nếu vượt quá giới hạn này ứng dụng sẽ không thể truy cập được sau 24 giờ, nếu tiếp
tục vượt ở 24 giờ tiếp theo thì dịch dụ Geocoding API có thể sẽ chặn ứng dụng.
Sử dụng Geocoding API cần phải kết hợp với một bản đồ Google Map dùng để
hiển thị các địa điểm một cách trực quan trên bản đồ.
IV.3.3 Geocoding API request
Định dạng chuỗi request URL
Chuỗi request URL có dạng như sau:
http://maps.googleapis.com/maps/api/geocode/output?parameters
HTTPS được khuyến cáo sử dụng cho các ứng dụng có dùng những dữ liệu
nhạy cảm của người dùng:
https://maps.googleapis.com/maps/api/geocode/output?parameters
Output có thể là xml hoặc json:
json (khuyến cáo): kết quả trả về tập tin JSON (JavaScript Object Notation).
Loại tập tin này phù hợp hơn cho các ứng dụng bản đồ trên nền web.
xml: kết quả trả về tập tim XML.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
40
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Tham số của chuỗi request URL
Một số tham số là bắt buộc phải được gán giá trị, một số là tùy chọn. Trong một
chuỗi URL hợp chuẩn mỗi tham số được phân cách bằng ký tự (&).
address (bắt buộc): địa chỉ muốn mã hóa địa lý.
HOẶC
latlng (bắt buộc): Giá trị kinh độ - vĩ độ của điểm muốn lấy địa chỉ gần
nhất.
bounds (tùy chọn): Hình chữ nhật mà kết quả mã hóa địa lý sẽ hiện lên nổi
bật.
region (tùy chọn): mã vùng, dùng hệ thống tên miền quốc gia.
language (tùy chọn): thiết lập ngôn ngữ sẽ trả về trong kết quả.
sensor (bắt buộc): cho biết yêu cầu tìm đường có phải đến từ một thiết bị có
cảm biến vị trí hay không. True hoặc false.
Chỉ có thể dùng một trong hai tham số address hoặc latlng để tìm. Nếu tham số
latlng được sử dụng thì quá trình này tạm gọi là giải mã địa lý.
IV.3.4 Kết quả mã hóa địa lý
Geocoding API sẽ trả về một rong hai loại tập tin là JSON hoặc XML.
Trong ví dụ này sẽ yêu cầu Geocoding API mã hóa địa lý địa chỉ “ số 6, đường
Biệt Thự, Lộc Thọ, Nha Trang”
Chuỗi request URL:
http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+P
arkway,+Mountain+View,+CA&sensor= false
Kết quả trả về ở định dạng JSON:
{
"results" : [
{
"address_components" : [
{
"long_name" : "6",
"short_name" : "6",
"types" : [ "street_number" ]
},
{
"long_name" : "Biệt Thự",
"short_name" : "Biệt Thự",
"types" : [ "route" ]
},
{
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
41
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
"long_name" : "Lộc Thọ",
"short_name" : "Lộc Thọ",
"types" : [ "sublocality", "political" ]
},
{
"long_name" : "Nha Trang",
"short_name" : "Nha Trang",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Khanh Hoa",
"short_name" : "Khanh Hoa",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Vietnam",
"short_name" : "VN",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "6 Biệt Thự, Lộc Thọ, Nha Trang, Khanh Hoa province,
Vietnam",
"geometry" : {
"location" : {
"lat" : 12.23569550,
"lng" : 109.19563650
},
"location_type" : "ROOFTOP",
"viewport" : {
"northeast" : {
"lat" : 12.23704448029150,
"lng" : 109.1969854802915
},
"southwest" : {
"lat" : 12.23434651970850,
"lng" : 109.1942875197085
}
}
},
"types" : [ "street_address" ]
}
],
"status" : "OK"
}
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
42
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Kết quả trả về ở định dạng XML:
OK
street_address
6 Biệt Thự, Lộc Thọ, Nha Trang, Khanh Hoa province,
Vietnam
6
6
street_number
Biệt Thự
Biệt Thự
route
Lộc Thọ
Lộc Thọ
sublocality
political
Nha Trang
Nha Trang
locality
political
Khanh Hoa
Khanh Hoa
administrative_area_level_1
political
Vietnam
VN
country
political
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
43
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
12.2356955
109.1956365
ROOFTOP
12.2343465
109.1942875
12.2370445
109.1969855
Cấu trúc của kết quả trả về
Cấu trúc tập tin rả về có hai phần tử gốc:
status: thông báo trạng thái của kết quả.
result: chứa một tập thông tin kết quả.
Thông thường chỉ có một phần tử result trả về trong kết quả, tuy nhiên
Geocoding API có thể trả về nhiều thẻ result hơn nếu truy vấn địa chỉ không rõ ràng.
Kết quả trả về cần phải phân tích cú pháp để trích xuất thông tin cần thiết.
STATUS
OK: kết quả trả về bình thường.
ZERO_RESULTS: địa chỉ không tồn tại hoặc gí trị kinh độ - vĩ độ không
đúng.
OVER_QUERY_LIMIT: thông báo đã gởi quá số lượng yêu cầu trong
một khoảng thời gian.
REQUEST_DENIED: ứng dụng đã bị dịch vụ Google Distance Matrix API
chặn.
INVALID_REQUEST: thông báo chuỗi request URL không hợp lệ.
RESULT
type[]: Một tập thẻ type cho biết kiểu của kết quả trả về. Chứa một hay
nhiều kiểu của địa danh, ví dụ khi mã hóa địa lý Nha Trang sẽ trả về hai giá
trị type là political và locality.
formatted_address:là địa chỉ bằng chữ.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
44
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
address_component[]: chứa một mảng các thành phần địa lý. Ví dụ Nha
Trang là một thành phần, Khánh Hòa là một thành phần. Mỗi thẻ
address_component chứa:
o type[]: kiểu của thành phần địa lý.
o long_name: tên đầy đủ của thành phần địa lý.
o short_name: tên viết tắt của thành phần địa lý.
geometry: chứa thông tin hình học của địa điểm mã hóa địa lý. Trong thẻ
geometry bao gồm các thẻ sau:
o location: chứa kết quả kinh độ vĩ độ của địa điểm. Đây là thông tin chính
của kết quả.
o location_type: chứa thông tin bổ sung về địa điểm . Giá trị của
location_type có thể là một trong danh sách sau:
ROOFTOP: cho biết kết quả trả về là chính xác đến mức đến độ
chính xác đường phố.
RANGE_INTERPOLATED: cho biết kết quả nhận được bằng
phương pháp nội xuy giữa hai điểm đã biết địa chỉ chính xác.
GEOMETRIC_CENTER: cho biết kết quả trả về là trung tâm của
kết quả. Kết quả này nhận được khi tìm các địa chỉ dạng vùng (tỉnh,
thành phố) hay đường phố.
APPROXIMATE: chỉ rằng kết quả trả về trả về là gần đúng.
o viewport: chứa thông tin về khung nhìn của kết quả. Gồm có tọa độ điểm
Tây-Bắc và Đông-Nam. Viewport dùng để hiển thị trên bản đồ cho người
dùng.
o bound (có thể có trả về hoặc không): chứa thông tin một hình chữ nhật
bao toàn bộ kết quả trả về. Có thể khác viewport.
partial_match: thông báo Geocoding API trả về một kết quả không chính
xác, chỉ tìm được một phần so với địa chỉ được yêu cầu. Có thể do lỗi chính
tả của địa chỉ nhập vào, hoặc địa chỉ không đầy đủ, hay đường phố không
tồn tại trong địa phương được yêu cầu.
Lưu ý rằng trong kết quả trả lại các thành phần địa lý theo cấp độ có thể không
nằm ở vị trí tuyệt đối mà phải xem xét kiểu của thành phần địa lý.
Kiểu thành phần địa lý
Một tập thẻ type cho biết kiểu của thành phần địa chỉ. Địa chỉ được mã hóa địa
lý có thể có nhiều kiểu và được xem như là tag.
Các giá trị của type
street_address: địa chỉ đường.
route: địa chỉ tuyến đường (chỉ có ở Mĩ).
intersection: là ngã tư lớn, giao nhau giữa hai con đường chính.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
45
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
political: địa chỉ hành chính.
country: quốc gia, là địa chỉ cấp cao nhất.
administrative_area_level_1: địa chỉ hành chính cấp 1 dưới cấp quốc gia,
ở Việt Nam là tỉnh hoặc các thành phố trực thuộc Trung ương, ở Mỹ là
bang.
administrative_area_level_2: địa chỉ hành chính cấp 2 dưới cấp quốc gia.
Ở Việt Nam là các quận của thành phố trược thuộc Trung ương.
administrative_area_level_3: địa chỉ hành chính cấp 3 dưới cấp quốc gia.
Chỉ có ở Mỹ và một số quốc gia.
colloquial_area: tên địa chỉ thường dùng.
locality: thành phố hoặc thị xã.
sublocality: địa chỉ hành chính dưới cấp locality.
neighborhood: khu phố
premise: một địa điểm được đặt tên, thường là một tòa nhà hoặc một cụm
các tòa nhà được đặt chung tên.
subpremise: cấp dưới của premise, thường là một tòa nhà nằm trong một
cụm được đặt tên.
postal_code: mã bưu chính.
natural_feature: indicates một địa điểm tự nhiên.
airport: sân bay.
park: công viên.
point_of_interest: một địa điểm nổi tiếng.
Ngoài ra còn có các giá trị khác của type hiếm khi sử dụng:
post_box: hộp thư.
street_number: số đường.
floor: tầng nhà trong một tòa nhà.
room: phòng trong một tòa nhà.
Giới hạn vùng tìm kiếm
Có thể giới hạn vùng tìm kiếm địa chỉ bằng cách thêm vào tham số bound gồm
có kinh độ vĩ độ - vĩ độ của góc Tây Nam và Đông Bắc của khung tìm kiếm phân tách
nhau bằng ký tự (|).
Ví dụ tìm đường Nguyễn Thị Minh Khai:
http://maps.googleapis.com/maps/api/geocode/json?address=Winnetka&sensor=fals
e
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
46
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Rất nhiều kết quả nhận được từ chuỗi URL request này. Muốn tìm được đường
Nguyễn Thị Minh Khai ở Nha Trang cần phải giới hạn vùng tìm kiếm.
http://maps.googleapis.com/maps/api/geocode/json?address=Nguyễn
Thị
Khai&bounds=12.211684,109.166822|12.259496,109.225359&sensor=false
Minh
Ngoài ra có thể giới hạn vùng tìm kiếm theo quốc gia.
http://maps.googleapis.com/maps/api/geocode/json?address=Toledo&sensor=false&
region=es
IV.3.5 Giải mã địa lý (tìm địa chỉ từ kinh độ-vĩ độ)
Khái niệm mã hóa địa lý dùng để chỉ việc chuyển từ địa chỉ mà con người đọc
được thành vị trí trên bảng đồ. Giải mã địa lý tức là chuyển từ vị trí trên bảng đồ thành
địa chỉ mà con người đọc được.
Dữ liệu đầu vào là giá trị kinh độ - vĩ độ. Ví dụ dưới đây sẽ tìm địa chỉ của vị trí
có tọa độ 12.268355,109.20116.
http://maps.googleapis.com/maps/api/geocode/xml?latlng=12.268554,109.202104&s
ensor= false&language=vi-VN
Kết quả trả về ở định dạng XML:
OK
street_address
2 Nguyễn Đình Chiểu, Đại học Nha Trang, Vĩnh Thọ, Nha
Trang, Khánh Hòa, Việt Nam
2
2
street_number
Đại học Nha Trang
Đại học Nha Trang
establishment
Nguyễn Đình Chiểu
Nguyễn Đình Chiểu
route
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
47
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Vĩnh Thọ
Vĩnh Thọ
sublocality
political
Nha Trang
Nha Trang
locality
political
Khánh Hòa
Khánh Hòa
administrative_area_level_1
political
Việt Nam
VN
country
political
12.2697490
109.2022615
ROOFTOP
12.2684000
109.2009125
12.2710980
109.2036105
…
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
48
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Kết quả trả về sẽ nhiều hơn một thẻ result. Geocoding sẽ trả về bất kỳ kết quả
nào tìm được.
Danh sách formatted_address mà Geocodin API tìm được với tọa độ
12.268355,109.20116:
2 Nguyễn Đình Chiểu, Vĩnh Phước, Nha Trang, Khánh Hòa, Việt Nam
Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt Nam
Nha Trang, Khanh Hoa province, Vietnam
Khanh Hoa province, Vietnam
Vietnam
Địa chỉ trả về từ cụ thể nhất đến ít cụ thể nhất. Kết quả quan trọng nhất là địa
chỉ cụ thể nhất nằm trong thẻ result đầu tiên.
Geocoding API sẽ mã hóa địa lý bằng cách tìm vị trí gần nhất trong một khoảng
sai số nhất định, nếu không tìm thấy Geocoding API sẽ trả về kết quả rỗng.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
49
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
IV.4 Google Distance Matrix API
Google Distance Matrix API là một dịch vụ cung cấp khoảng cách và thời gian
di chuyển cho một ma trận các điểm gốc và điểm đích. Thông tin trả về phụ thuộc vào
đường đi được đề nghị giữa điểm gốc và điểm đích theo tính toán của Google Distance
Matrix API, bao gồm các giá trị khoảng cách và thời gian cho mỗi cặp.
Dịch vụ Google Distance Matrix API không cung cấp chi tiết đường đi. Muốn
tìm thông tin chi tiết đường đi có thể sử dụng dịch dụ Google Direction API với chỉ
một cặp điểm gốc và điểm đích.
IV.4.1 Giới hạn sử dụng
Mỗi truy vấn gởi cho Distance Matrix API bị giới hạn số lượng phần tử, cứ mỗi
một điểm gốc đến một điểm đích là một phần tử.
Số lượng phần tử bị giới hạn như sau:
100 phần tử cho mỗi truy vấn.
100 phần tử cho mỗi 10 giây.
2500 phần tử cho mỗi giờ.
Google MAP API trả phí sẽ có giới hạn lớn hơn:
625 phần tử cho mỗi truy vấn.
1000 phần tử cho mỗi 10 giây.
100000 phần tử cho mỗi giờ.
Các Distance Matrix API URL giới hạn ở 2048 ký tự trước khi mã hóa. Trong
mỗi chuỗi Distance Matrix API URL sẽ có nhiều thông tin địa điểm được đưa vào vì
vậy nên chú ý giới hạn này khi xây dựng chuỗi request URL.
Sử dụng Distance Matrix API cần phải kết hợp với một bản đồ Google Map
dùng để hiển thị các địa điểm một cách trực quan trên bản đồ.
IV.4.2 Distance Matrix API request
Định dạng chuỗi request URL
Chuỗi request URL có dạng như sau:
http://maps.googleapis.com/maps/api/distancematrix/output?parameters
HTTPS được khuyến cáo sử dụng cho các ứng dụng có dùng những dữ liệu
nhạy cảm của người dùng:
https://maps.googleapis.com/maps/api/distancematrix/output?parameters
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
50
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Output có thể là xml hoặc json:
json (khuyến cáo): kết quả trả về tập tin JSON (JavaScript Object Notation).
Loại tập tin này phù hợp hơn cho các ứng dụng bản đồ trên nền web.
xml: kết quả trả về tập tim XML.
Tham số của chuỗi request URL
Một số tham số là bắt buộc phải được gán giá trị, một số là tùy chọn. Trong một
chuỗi URL hợp chuẩn mỗi tham số được phân cách bằng ký tự (&).
Các tham số tham gia trong chuỗi URL yêu cầu dịch vụ Distance Matrix gồm
có:
origins (bắt buộc): Một hay nhiều điểm gốc mà từ đó muốn tính khoảng
cách đến các điểm đích. Mỗi điểm phân cách nhau bằng ký tự (|). Mỗi điểm
có thể là chuỗi ký tự địa chỉ hoặc giá trị kinh độ - vĩ độ.
Ví dụ:
origins=89 Vân Đồn, Phước Hòa, Nha Trang|12.213802,109.195588
destinations (bắt buộc): Một hay nhiều điểm đích muốn tính khoảng cách từ
các điểm gốc. Mỗi điểm phân cách nhau bằng ký tự (|). Mỗi điểm có thể là
chuỗi ký tự địa chỉ hoặc giá trị kinh độ - vĩ độ.
Ví dụ:
origins=17 Thái Nguyên, Phước Tân, Nha Trang|12.213802,109.195588
Để xác định một điểm cần thông tịn địa chỉ hoặc kinh độ - vĩ độ. Nếu sử dụng
thông tin địa chỉ, hệ thống Google Map API sẽ tự chuyển địa chỉ đó về giá trị kinh độ vĩ độ. Nếu sử dụng giá trị kinh độ - vĩ độ để xác định một điểm thì giá trị kinh độ và
vĩ độ được phân cách nhau bằng ký tự (,).
mode(tùy chọn, mặc định là driving): xác định kiểu di chuyển, hiện tại hỗ
trợ 3 kiểu di chuyển sau:
o driving (mặc định): lái xe hơi.
o walking : đi bộ, có thể qua những con đường cho người đi bộ hoặc đi
trên đường tắt và vỉa hè.
o bicycling: lái xe đạp, chọn đường dành riêng cho xe đạp (chỉ phổ biến ở
Mỹ)
language(tùy chọn): xác định ngôn ngữ của kết quả trả về. Để trả về tiếng
Việt thì language=vi-VN.
avoid (tùy chọn): chỉ ra tuyến đường sẽ phải tránh đường cao tốc hoăc tránh
trạm thu phí.
units(tùy chọn): xác định đơn vị cho kết quả tính toán.
sensor(bắt buộc): cho biết yêu cầu tìm đường có phải đến từ một thiết bị có
cảm biến vị trí hay không. True hoặc false.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
51
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Restrictions
Google Distance Matrix sẽ tính toán đường đi với những giới hạn được đặt ra.
Dựa vào những giới hạn đó Google Matrix sẽ tính được đường đi thuận lợi hơn cho
người dùng. Hiện tại có 2 giá trị của giới hạn được hỗ trợ đó là:
avoid=tolls : tránh trạm thu phí.
avoid=highways: tránh đường cao tốc.
Unit Systems
Trong kết quả Google Distance Matrix trả về có chứa thông tin độ dài tuyến
đường của mỗi cặp điểm.
Có thể thay đổi đơn vị khoảng cách mà hệ thống đã lựa chọn bằng cách
cung cấp giá trị cho tham số units. Có hai giá trị của tham số units là:
metric: đơn vị hệ mét.
imperial : dùng hệ thống đơn vị của Anh.
Lựa chọn đơn vị độ dài chỉ có hiệu lực đối với dòng ký tự mô tả khoảng cách,
trá trị khoảng cách trả về ở dạng số luôn có đơn vị là mét.
IV.4.3 Kết quả từ Distance Matrix API
Kết quả trả về của Distance Matrix API phụ thuộc vào output là xml hay json
trong cuỗi request URL.
Chuỗi request URL dưới đây sẽ yêu cầu Google Distance Matrix tính toán
khoảng cách với hai điểm gốc là Trường Đại học Nha Trang và Tháp Bà Bonaga, hai
điểm đích là Ga Nha Trang và khách sạn Lodge.
http://maps.googleapis.com/maps/api/distancematrix/xml?origins=2 Nguyễn
Đình Chiểu, Vĩnh Phước, Nha Trang|12.265288,109.196167&destinations=42 Trần
Phú, Lộc Thọ, Nha Trang, Khanh
Hoa|12.248427,109.184052&mode=driving&language=vi-VN&sensor=false
Google Distance Matrix sẽ tính toán 4 phần tử:
Từ ĐH Nha Trang đến KS Lodge
Từ ĐH Nha Trang đến Ga Nha
Trang
Từ Tháp Bà đến KS Lodge
Từ Tháp Bà đến Ga Nha Trang
Kết quả trả về sẽ gồm nhiều row, mỗi row sẽ tương ứng với một điểm gốc, mỗi
row gồm nhiều element tương ứng với mỗi điểm đích.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
52
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Tập tin kết quả JSON :
{
"destination_addresses" : [
"42 Trần Phú, Lộc Thọ, Nha Trang, Khánh Hòa, Việt Nam",
"24 Thái Nguyên, Phước Tân, Nha Trang, Khánh Hòa, Việt Nam"
],
"origin_addresses" : [
"2 Nguyễn Đình Chiểu, Vĩnh Phước, Nha Trang, Khánh Hòa, Việt Nam",
"126 2 Tháng 4, Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt Nam"
],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "4,9 km",
"value" : 4933
},
"duration" : {
"text" : "6 phút",
"value" : 383
},
"status" : "OK"
},
{
"distance" : {
"text" : "3,6 km",
"value" : 3564
},
"duration" : {
"text" : "5 phút",
"value" : 309
},
"status" : "OK"
}
]
},
{
"elements" : [
{
"distance" : {
"text" : "3,2 km",
"value" : 3205
},
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
53
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
"duration" : {
"text" : "6 phút",
"value" : 346
},
"status" : "OK"
},
{
"distance" : {
"text" : "3,0 km",
"value" : 2955
},
"duration" : {
"text" : "4 phút",
"value" : 265
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
Để lấy được những thông tin cần thiết cần phải phân tích cú pháp tập tin JSON.
Tập tin kết quả XML:
OK
2 Nguyễn Đình Chiểu, Vĩnh Phước, Nha Trang, Khánh Hòa,
Nam
126 2 Tháng 4, Vĩnh Thọ, Nha Trang, Khánh Hòa,
Nam
42 Trần Phú, Lộc Thọ, Nha Trang, Khánh Hòa,
Nam
24 Thái Nguyên, Phước Tân, Nha Trang, Khánh Hòa,
Nam
OK
383
6 phút
4933
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
Việt
Việt
Việt
Việt
54
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
4,9 km
OK
309
5 phút
3564
3,6 km
OK
346
6 phút
3205
3,2 km
OK
265
4 phút
2955
3,0 km
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
55
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Cấu trúc của kết quả trả về
Các phần từ gốc:
status: thông báo trạng thái kết quả.
origin_addresses: chứa một tập các địa chỉ điểm gốc đã được API chuyển từ
thông tin đầu vào. Ngôn ngữ sẽ phụ thuộc vào giá trị của language trong request URL.
destination_addresses: chứa một tập các địa chỉ điểm đích đã được API
chuyển từ thông tin đầu vào. Ngôn ngữ sẽ phụ thuộc vào giá trị của language trong
request URL.
row: chứa một tập các element.
STATUS
OK: kết quả trả về bình thường.
INVALID_REQUEST: thông báo chuỗi request URL không hợp lệ.
MAX_ELEMENTS_EXCEEDED: thông báo vượt quá giới hạn các phần
tử (element)
OVER_QUERY_LIMIT: thông báo đã gởi quá số lượng yêu cầu trong
một khoảng thời gian.
REQUEST_DENIED: ứng dụng đã bị dịch vụ Google Distance Matrix API
chặn.
UNKNOWN_ERROR: lỗi không xác định.
ROW
Khi Distance Matrix API trả về kết quả, thông tin nằm trong một tập các thẻ
row. Nếu không có kết quả tìm thấy sẽ trả về tập rỗng.
Các row được xắp xếp phụ thuộc vào giá trị trong chuỗi request URL. Mỗi row
sẽ tương ứng với một điểm gốc, mỗi row gồm nhiều element tương ứng với mỗi điểm
đích.
ELEMENT
Mỗi element chứa thông tin cụ thể về khoảng cách giữa hai điểm. Mỗi element
chứa các phần tử sau:
status: thông báo trạng thái kết quả.
Giá trị của status ở thẻ element
o OK: kết quả trả về bình thường.
o NOT_FOUND: một điểm nào đó không thể mã hóa địa lý để lấy kinh độ
- vĩ độ.
o ZERO_RESULTS: không thể tìm thấy đường đi.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
56
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
duration: ước lượng thời gian di chuyển giữa hai điểm, value có giá trị kiểu
số nguyên đơn vị là giây, text mô tả bằng chữ, ngôn ngữ phụ thuộc vào giá
trị của language trong request URL.
distance: khoảng cách giữa hai điểm, value có giá trị kiểu số nguyên đơn vị
là mét, text mô tả bằng chữ, ngôn ngữ phụ thuộc vào giá trị của language
trong request URL.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
57
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
IV.5 Google Direction API
Google Direction API là dịch vụ tính toán đường đi giữa hai điểm sử dụng
HTTP request. Thông tin đầu vào của điểm đầu, điểm kết thúc, điểm trung gian có thể
ở dạng tên xác định địa điểm hay giá trị kinh độ và vĩ độ. Direction API có thể trả về
nhiều hướng đi khác nhau sử dụng một tập các điểm trung gian.
Dịch vụ này được thiết kế để tính toán đường đi giữa những vị trí xác định rõ
thông tin trên bản đồ Google Map. Vì quá trình tính toán đường đi mất thời gian và
phức tạp (phụ thuộc vào khoảng cách hai điểm) nên bất cứ khi nào có thể nên thực
hiện công việc tính toán trước và lưu trữ tạm thời kết quả nhận được.
Có thể truyền vào một số tham số giá trị địa chỉ hoặc kinh độ - vĩ độ. Nếu
truyền vào địa chỉ, hệ thống Google Direction sẽ chuyển nó sang giá trị kinh độ - vĩ độ
để tính toán.
IV.5.1 Giới hạn sử dụng
Google Direction API cho phép 2500 truy vấn mỗi ngày. Mỗi lần tính toán
hướng đi có thể sử dụng tối đa 9 điểm trung gian. Nếu có nhu cầu cao hơn, có thể sử
dụng Google Direction API cho doanh nghiệp với tối đa 100000 truy vấn mỗi ngày và
23 điểm trung gian ở mỗi truy vấn.
Ngoài ra mỗi chuỗi URL truy vấn được giới hạn ở 2048 ký tự trước khi mã hóa.
Mội số truy vấn tìm đường có thể chứa thông tin các điểm dọc theo đường đi vì vậy
cần lưu ý độ dài của nó.
Kết quả trả về của Google Direction API phải được sử dụng kết hợp với bản đồ
Goolge Map. Tức là thông tin phải kết hợp với hiển thị đường đi trên bản đồ. Không
nên sử dụng thông tin trả về mà không dùng Google Map.
IV.5.2 Google Direction request
Cấu trúc của chuỗi request URL:
Chuỗi request URL của Google Diriection có dạng như sau:
http://maps.googleapis.com/maps/api/directions/output?parameters
Giá trị của output có thể là:
json (Khuyến khích sử dụng): Kết quả trả về ở dạng file JavaScript Object
Notation (JSON).
xml: Kết quả trả về ở dạng file xml.
Có thể sử dụng HTTPS để truy xuất Google Direction API nếu chuỗi truy xuất
có bao gồm các thông tin nhạy cảm (Ví dụ: trọa độ của người dùng).
https://maps.googleapis.com/maps/api/directions/output?parameters
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
58
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Các tham số của chuỗi URL request
Một số tham số là bắt buộc, một số là tùy chọn. Được phân cách bằng ký tự
“&”. Dưới đây là danh sách các tham số có thể tham gia vào một chuỗi Google
Direction URL:
origin (bắt buộc): Địa chỉ hay giá trị kinh độ - vĩ độ của điểm mà từ đó bạn
muốn tìm đường đi.
destination (bắt buộc): Địa chỉ hay giá trị kinh độ - vĩ độ của điểm muốn
tìm đường đi đến.
mode (bắt buộc, mặc định là driving): xác định kiểu duy chuyển (đi bộ, lai
xe) khi tính toán hướng đi.
waypoints (tùy chọn): xác định một tập hợp điểm trung gian mà đường đi
phải đi qua. Tham số cho điểm trung gian có thể là địa chỉ hay kinh độ - vĩ
độ.
alternatives (tùy chọn): nếu được xác định là true, Google Direction sẽ trả
về nhiều hơn một tuyến đường để lựa chọn. Tuy nhiên thời gian trả lời của
Google Direction sẽ nhiều hơn.
avoid (tùy chọn): chỉ ra tuyến đường sẽ phải tránh đường cao tốc hoăc tránh
trạm thu phí. Hiện tại Google Direction chỉ hỗ trợ hai tham số:
o tolls: tránh các trạm thu phí.
o highways: tránh đường cao tốc.
units(tùy chọn): xác định đơn vị cho kết quả tính toán.
region(tùy chọn): mã vùng, bao gồm 2 ký tự xác định vùng.
sensor(bắt buộc): cho biết yêu cầu tìm đường có phải đến từ một thiết bị có
cảm biến vị trí hay không. True hoặc false.
Kiểu di chuyển
Khi tính toán hướng đi, có thể qui định kiểu duy chuyển. Kiểu mặc định khi
không có tham số trong request url là driving (lái xe hơi). Hiện tại tham số cho kiểu
duy chuyển hỗ trợ 3 giá trị:
driving (mặc định): lái xe hơi.
walking : đi bộ, có thể qua những con đường cho người đi bộ hoặc đi trên
đường tắt và vỉa hè.
bicycling: lái xe đạp, chọn đường dành riêng cho xe đạp (chỉ phổ biến ở
Mỹ)
Hướng dành cho đi bộ và đi xe đạp đôi khi không bao gồm đường chỉ dẫn rỏ
ràng cho người đi bộ và đi xe đạp, vì vậy Google Direction cung cấp thông tin cảnh
báo trong kết quả trả về và phải hiển thị cho người dùng.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
59
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Sử dụng điểm trung gian
Khi tính toán tuyến đường đi sử dụng Google Direction API, sử dụng các điểm
trung gian để tính toán đường đi đến đích có đi qua những điêm trung gian đã qui định.
Có thể sử dụng nhiều điểm trung gian, mỗi điểm phân cách nhau bằng ký tự “|”.
Ví dụ dưới đây là chuỗi request URL để tìm đường đi từ tháp Trầm Hương đến
trường ĐH Nha Trang đi qua cầu Hà Ra:
http://maps.googleapis.com/maps/api/directions/json?origin=Boston,MA&destination
=12.268743,109.201986&waypoints=12.260722,109.190088&sensor=false
Mặc định Google Direction sẽ tính toán đường đi qua các điểm trung gian dựa
trên sự sắp xếp địa điểm trên request URL. Tuy nhiên có thể sử dụng tham số
optimize:true để Google Direction xắp xếp các điểm trung gian tối ưu nhất (là một ứng
dụng của bài toán Travelling Salesman Problem).
Vùng giới hạn
Google Direction sẽ tính toán đường đi với những giới hạn được đặt ra. Dựa
vào những giới hạn đó Google Direction sẽ tính được đường đi thuận lợi hơn cho
người dùng. Hiện tại có 2 giá trị của giới hạn được hỗ trợ đó là:
avoid=tolls : tránh trạm thu phí.
avoid=highways: tránh đường cao tốc.
Đơn vị hệ thống
Trong kết quả Google Direction trả về có chứa thông tin độ dài từng chặn
đường và tuyến đường. Mặc định đơn vị độ dài được sử dụng sẽ phụ thuộc vào vùng
(qui định bởi giá trị region).
Ví dụ: tìm đường từ Chicago, IL đến Toronto,ONT sẽ trả về giá trị khoảng cách
ở đơn vị dặm (miles), trong khi tìm đường ở Việt Nam kết quả sẻ ở đơn vị ki lô mét
(km).
Có thể thay đổi đơn vị khoảng cách mà hệ thống đã lựa chọn bằng cách cung
cấp giá trị cho tham số units. Có hai giá trị của tham số units là:
metric: đơn vị hệ mét.
imperial : dùng hệ thống đơn vị của Anh.
Lựa chọn đơn vị độ dài chỉ có hiệu lực đối với dòng ký tự mô tả khoảng cách,
trá trị khoảng cách trả về ở dạng số luôn có đơn vị là mét.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
60
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Vùng giới hạn địa lý
Có thể qui định cho Goolgle Direction trả về kết quả ở những vùng địa lý riêng
biệt bằng cách qui định qía trị cho tham số “region”. Giá trị của tham số “region” là
tên miền quốc gia (country code top-level domain). Tên miền quốc gia của Việt Nam
là “vn”.
Việc đặt giá trị để qui định vùng riêng biệt se giúp cho Google Direction tìm
kiếm nhanh và chính xác hơn.
IV.5.3 Kết quả trả về Google Direction
Cấu trúc kết quả trả về
Kết quả Google Direction trả về sẽ ở 2 dạng tập tin là xml và json.
Mặc định chỉ có một giá trị route nhận được trong kết quả trả về, trừ khi muốn
kết quả trả về hơn hai tuyến đường (alternatives=true).
Kết quả trả về cần phải được phân tích cú pháp để sử dụng.
Ví dụ tìm đường đi từ Tháp Bà đến trường Đại học Nha Trang
Kết quả trả về ở định dạng JSON:
{
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 12.270420,
"lng" : 109.202090
},
"southwest" : {
"lat" : 12.265350,
"lng" : 109.196220
}
},
"copyrights" : "Dữ liệu bản đồ ©2012 Google",
"legs" : [
{
"distance" : {
"text" : "1,1 km",
"value" : 1122
},
"duration" : {
"text" : "3 phút",
"value" : 161
},
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
61
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
"end_address" : "2 Nguyễn Đình Chiểu, Đại học Nha Trang, Vĩnh Thọ, Nha
Trang, Khánh Hòa, Việt Nam",
"end_location" : {
"lat" : 12.268710,
"lng" : 109.202090
},
"start_address" : "126 2 Tháng 4, Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt
Nam",
"start_location" : {
"lat" : 12.265350,
"lng" : 109.196220
},
"steps" : [
{
"distance" : {
"text" : "0,6 km",
"value" : 601
},
"duration" : {
"text" : "1 phút",
"value" : 43
},
"end_location" : {
"lat" : 12.270420,
"lng" : 109.197950
},
"html_instructions" : "Đi về hướng \u003cb\u003eBắc\u003c/b\u003e
lên \u003cb\u003e2 Tháng 4/Cầu Xóm Bóng\u003c/b\u003e về phía
\u003cb\u003eTháp Bà\u003c/b\u003e\u003cdiv style=\"font-size:0.9em\"\u003eĐi
tiếp
tục
theo
2
Tháng
4\u003c/div\u003e\u003cdiv
style=\"fontsize:0.9em\"\u003eBăng qua Tháp Bà Ponagar (ở phía bên trái)\u003c/div\u003e",
"polyline" : {
"points"
:
"mqziAkknySICqAKyAQqC]gAOmBWe@Ko@Qu@[k@U]OUMoB}@gAe@o@Uc@I"
},
"start_location" : {
"lat" : 12.265350,
"lng" : 109.196220
},
"travel_mode" : "DRIVING"
},
{
"distance" : {
"text" : "0,3 km",
"value" : 338
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
62
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
},
"duration" : {
"text" : "1 phút",
"value" : 86
},
"end_location" : {
"lat" : 12.268840,
"lng" : 109.200510
},
"html_instructions" : "Rẽ \u003cb\u003ephải\u003c/b\u003e tại Trường
Trung Học Kinh Tế lên \u003cb\u003eNguyễn Đình Chiểu\u003c/b\u003e",
"polyline" : {
"points"
:
"cq{iAevnySP_@N_@Zm@Zk@LUDODM@MBM@OBMBSLSRMXUr@g@FKLQ\\s
@Te@AK"
},
"start_location" : {
"lat" : 12.270420,
"lng" : 109.197950
},
"travel_mode" : "DRIVING"
},
{
"distance" : {
"text" : "0,2 km",
"value" : 183
},
"duration" : {
"text" : "1 phút",
"value" : 32
},
"end_location" : {
"lat" : 12.268710,
"lng" : 109.202090
},
"html_instructions" : "Chếch sang \u003cb\u003ephải\u003c/b\u003e tại
Uân Loan\u003cdiv style=\"font-size:0.9em\"\u003eĐiểm đến sẽ ở bên
phải\u003c/div\u003e",
"polyline" : {
"points" : "gg{iAefoyS@CJMJKJOFMFKCOCIEICK?K?UEsACgA?E"
},
"start_location" : {
"lat" : 12.268840,
"lng" : 109.200510
},
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
63
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
"travel_mode" : "DRIVING"
}
],
"via_waypoint" : []
}
],
"overview_polyline" : {
"points"
:
"mqziAkknyS{AOkFo@uDg@uA]aBq@s@]wDcBo@Uc@I`@_Av@yARe@F[L_ALS
RMlA}@T]r@yA?OVYR]FKCOISCWIwD"
},
"summary" : "2 Tháng 4 và Nguyễn Đình Chiểu",
"warnings" : [],
"waypoint_order" : []
}
],
"status" : "OK"
}
Kết quả trả về ở định dạng XML:
OK
2 Tháng 4 và Nguyễn Đình Chiểu
DRIVING
12.2653500
109.1962200
12.2704200
109.1979500
mqziAkknySICqAKyAQqC]gAOmBWe@Ko@Qu@[k@U]OUMoB}@gAe@o
@Uc@I
43
1 phút
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
64
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Đi về hướng <b>Bắc</b> lên <b>2 Tháng 4/Cầu
Xóm Bóng</b> về phía <b>Tháp Bà</b><div style="fontsize:0.9em">Đi tiếp tục theo 2 Tháng 4</div><div style="fontsize:0.9em">Băng
qua
Tháp
Bà
Ponagar
(ở
phía
bên
trái)</div>
601
0,6 km
DRIVING
12.2704200
109.1979500
12.2688400
109.2005100
cq{iAevnySP_@N_@Zm@Zk@LUDODM@MBM@OBMBSLSRMXUr@g@
FKLQ\s@Te@AK
86
1 phút
Rẽ <b>phải</b> tại Trường Trung Học Kinh Tế lên
<b>Nguyễn Đình Chiểu</b>
338
0,3 km
DRIVING
12.2688400
109.2005100
12.2687100
109.2020900
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
65
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
gg{iAefoyS@CJMJKJOFMFKCOCIEICK?K?UEsACgA?E
32
1 phút
Chếch sang <b>phải</b> tại Uân Loan<div
style="font-size:0.9em">Điểm
đến
sẽ
ở
bên
phải</div>
183
0,2 km
161
3 phút
1122
1,1 km
12.2653500
109.1962200
12.2687100
109.2020900
126 2 Tháng 4, Vĩnh Thọ, Nha Trang, Khánh Hòa, Việt
Nam
2 Nguyễn Đình Chiểu, Đại học Nha Trang, Vĩnh Thọ, Nha Trang,
Khánh Hòa, Việt Nam
Dữ liệu bản đồ ©2012 Google
mqziAkknyS{AOkFo@uDg@uA]aBq@s@]wDcBo@Uc@I`@_Av@yARe@F
[L_ALSRMlA}@T]r@yA?OVYR]FKCOISCWIwD
12.2653500
109.1962200
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
66
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
12.2704200
109.2020900
Nút gốc trong tài liệu Xml trả về có 2 thẻ con là:
status :thông báo trạng thái của kết quả hoặc thông tin sự cố .
route :(một hay nhiều), mỗi thẻ route chứa một tuyến đường đi riêng biệt từ
điểm đầu đến điểm cuối.
STATUS
OK: kết quả trả về bình thường.
NOT_FOUND: một điểm nào đó nhập vào không thể mã hóa địa lý để lấy
kinh độ - vĩ độ.
ZERO_RESULTS: không thể tìm thấy đường đi.
MAX_WAYPOINTS_EXCEEDED: thông báo vượt quá giới hạn các
điểm trung gian được cho phép. (Bình thường là 8 điểm, nếu trả thêm chi
phí sẽ tăng lên tối đa là 23 điểm trung gian)
INVALID_REQUEST: thông báo chuỗi yêu cầu không hợp lệ.
OVER_QUERY_LIMIT: thông báo đã gởi quá số lượng yêu cầu trong
một khoảng thời gian.
REQUEST_DENIED: ứng dụng đã bị dịch vụ Google Direction chặn.
UNKNOWN_ERROR: lỗi không xác định.
ROUTE
Mỗi thẻ route chứa thông tin về một tuyến đường phân biệt từ điểm xuất phát
đến điểm cần đến. Trong kết quả trả về của Google Direction sẽ có nhiều thẻ route
hoặc sẽ không có nếu không thể tìm được đường đi.
Trong mỗi thẻ route sẽ có một hay nhiều thẻ leg phụ thuộc vào số lượng điểm
trung gian đã yêu cầu. Ngài ra, bên trong thẻ rout> còn chứa các thông tin cảnh báo,
bản quyền …
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
67
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Trong mỗi thẻ route có thể bao gồm các thẻ con sau:
summary: tên tóm tắc của đoạn đường.
legs[]: chứa một tập hợp các thẻ mô tả đường đi giữa hai điểm. Nếu
không yêu cầu điểm trung gian thì kết quả trả về chỉ có một thẻ tương
ứng với đường đi từ điểm xuất phát đến điểm đích. Nếu có một hoặc một số
điểm trung gian được yêu cầu thì mỗi thẻ sẽ tương ứng với đoạn
đường từng cặp điểm lần lược là: điểm xuất phát đến điểm trung gian thứ
nhất, điểm trung gian thứ nhất đến điểm trung gian thứ hai,…điểm trung
gian cuối đến điểm đích.
waypoint_order: chứa một mảng qui định thứ tự xắp xếp của các điểm
trung gian.
overview_polyline: chứa một đối tượng giữ một mảng các điểm đã mã hóa
đại diện cho một con đường trả về trong kết quả.
bounds: qui định hình chữ nhật bao chung quanh tuyến đường trên bản đồ.
copyrights: chứa thông tin bản quyền.
warnings[] : chứa một tập các cảnh báo cho người dùng.
LEG
Trong mỗi thẻ leg sẽ mô tả một đoạn đường đi giữa hai điểm.Trong những yêu
cầu tìm đường không có điểm trung gian sẽ chỉ có một thẻ leg ở mỗi thẻ route. Trong
trường hợp có yêu cầu một số điểm trung gian thì mỗi thẻ leg sẽ tương ứng với mỗi
đoạn đường tương ứng với từng điểm trung gian.
Trong mỗi thẻ leg có thể bao gồm các thẻ con sau:
steps[]: chứa thông tin từng đoạn đường.
distance: thông tin về độ dài chặn đường được mô tả trong thẻ . Chứa
2 thẻ con:
o value: độ dài kiểu số nguyên, đơn vị mét.
o text: mô tả bằng chữ độ dài của đoạn đường, đơn vị độ dài sử dụng phụ
thuộc vào vùng địa ký đã thiết lập trong chuỗi url yêu cầu tìm đường,
hoặc có thể thiết lập riêng bằng giá trị chủa units.
Thẻ này có thể không có nếu không thể tính toán được khoảng cách.
duration: ước lượng thời gian di chuyển hết chặn đường tương ứng với thẻ
leg
o value: giá trị số nguyên đơn vị giây.
o text: thời gian ước lượng bằng chữ.
Thẻ này có thể không có nếu không thể tính toán được thời gian.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
68
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
start_location: chứa kinh độ - vĩ độ điểm đầu của chặn đường tương ứng
với thẻ leg. Bởi vì Direction API sẽ chọn một điểm gần với điểm gốc nhất
nhưng trên đường giao thông để tính toán đường đi nên tọa độ điểm này có
thể không trung với tọa độ điểm gốc(end_location cũng tương tự như vậy).
end_location: chứa kinh độ - vĩ độ điểm cuối của chặn đường tương ứng
với thẻ leg.
start_address: địa chỉ điểm đầu bằng chữ tương ứng với thẻ .
end_addresss: địa chỉ điểm cuối bằng chữ tương ứng với thẻ .
STEP
Mỗi thẻ step mô tả một đoạn đường. Đoạn đường thẻ step qui định là “đơn vị”
nhất và không cần cần phải tách thêm nữa. Thông thường Google Direction tách ra
thành mỗi step khi cần rẽ. Nội dung của thẻ step mô tả độ dài, ước lượng thời gian di
chuyển, chỉ đường bằng chữ…
Trong mỗi thẻ leg có thể bao gồm các thẻ con sau:
html_instructions: hướng dẫn cho đoạn đường bằng HTML.
distance :mô tả độ dài của đoạn đường tương ứng với thẻ .
Chứa 2 thẻ con:
o value: độ dài kiểu số nguyên, đơn vị mét.
o text: mô tả bằng chữ độ dài của đoạn đường, đơn vị độ dài sử dụng phụ
thuộc vào vùng địa ký đã thiết lập trong chuỗi url yêu cầu tìm đường,
hoặc có thể thiết lập riêng bằng giá trị chủa units.
Thẻ này có thể không có nếu không thể tính toán được khoảng cách.
duration: ước lượng thời gian di chuyển hết chặn đường tương ứng với thẻ
step
o value: giá trị số nguyên đơn vị giây.
o text: thời gian ước lượng bằng chữ.
Thẻ này có thể không có nếu không thể tính toán được thời gian.
start_location: chứa kinh độ - vĩ độ điểm đầu của chặn đường tương ứng
với thẻ leg. Bởi vì Direction API sẽ chọn một điểm gần với điểm gốc nhất
nhưng trên đường giao thông để tính toán đường đi nên tọa độ điểm này có
thể không trung với tọa độ điểm gốc(end_location cũng tương tự như vậy).
end_location: chứa kinh độ - vĩ độ điểm cuối của chặn đường tương ứng
với thẻ leg.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
69
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Chương V: Cơ sở dữ liệu SQLite
V.1 Giới thiệu SQLite
SQLite là một hệ quản trị cơ sở dữ liệu quan hệ nhúng. Chứa trong nó là một
thư viện nhỏ bằng ngôn ngữ C (khoảng 275kB).
SQLite thực hiện hầu hết chuẩn SQL, sử dụng các cú pháp SQL linh hoạt
nhưng không đảm bảo ràng buộc toàn vẹn. Ngược lại với những hệ quản trị cơ sở dữ
liệu khác, SQLite không được thiết kế riêng để truy cập từ ứng các ứng dụng phía
client. Hành động đọc có thể thực hiện đa nhiệm, nhưng hành động ghi thì thực hiện
tuần tự.
Khác với hầu hết các hệ quản trị sơ sở dữ liệu khác, SQLite được thiết kết theo
tiêu chí đơn giản hóa tối đa:
Đơn giản để quản trị
Đơn giản để hoạt động
Đơn giản để nhúng vào một chương trình lớn hơn
Đơn giản để bảo trì và tùy chỉnh
SQLite là một lựa chọn phổ biến để lưu trữ dữ liệu cục bộ. Có thể kết hợp với
nhiều ngôn ngữ lập trình khác nhau. Nó là công cụ cơ sở dữ liệu được sử dụng rộng rãi
nhất trong các trình duyệt web, hệ điều hành, hệ thống nhúng và đặt biệt là trong các
thiết bị di động.
V.2 Thiết kế của SQLite
Không giống như các hệ quản trị cơ sở dữ liệu client-server, SQLite không có
các tiến trình giao tiếp ứng dụng client-server. Thay vào đó SQLite có các thư viện
được liên kết và trở thành một phần không thể thiếu cho ứng dụng.Ứng dụng gọi
những chức năng của SQLite trực tiếp thông qua lời gọi hàm đơn giản làm giảm độ
trễ của truy xuất dữ liệu. Do tiến trình gọi hàm để thực hiện các chức năng sẽ đơn giản
và hiệu quả hơn liên quá trình giao tiếp mà các hệ quản trị cơ sở dữ liệu client-server
thực hiện. SQLite lưu trữ toàn bộ cơ sở dữ liệu chỉ trong một tập tin.
Có thể sử dụng SQLite để lưu trữ dữ liệu của ứng dụng tốt hơn XML vì không
cần phải phân tích cú pháp và ghi tập tin. Sử dụng SQLite dễ dàng truy cập thao tác
trên dữ liệu và độc lập nền tảng.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
70
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
V.3 Các đặc tính của SQLite
Giao tác là nguyên tử, nhất quán, độc lập và bền vững ngay cả sau khi hệ
thống bị treo hoặc mất điện.
Không cần cài đặt hay quản trị phức tạp.
Đáp ứng hầu hết chuẩn SQL92.
Toàn bộ cơ sở dữ liệu chứa trong một tập tin không phụ thuộc nền tảng.
Hỗ trợ cơ sở dữ liệu có kích thước terabyte và chuỗi kích thước gigabyte.
Mã nguồn nhỏ, khoảng 350KB với cấu hình đầy đủ tính năng và 200KB với
các tính năng tùy chọn.
Nhanh hơn các hệ quản trị cơ sở dữ liệu client/server ở hầu hết các thao tác.
API đơn giản, dễ sử dụng.
Được viết bằng ANSI-C. Kết hợp với nhiều ngôn ngữ riêng biệt.
Có sẵn tập tin mã nguồn để dễ dàng đưa vào một dự án.
Độc lập, không phụ thuộc bên ngoài.
Độc lập nền tảng: Unix (Linux, Mac OS-X, Android, iOS) và Windows
(Win32, WinCE, WinRT) được hỗ trợ. Dễ dàng chuyển đổi để sử dụng trên
nhiều hệ thống khác nhau.
Mã nguồn mở và có thể được sử dụng với mọi mục đích.
Giao diện quản trị bằng dòng lệnh.
V.4 Sử dụng SQLite
V.4.1 Những trường hợp thích hợp sử dụng SQLite
Định dạng tập tin ứng dụng
SQLite đã được sử dụng một cách thành công với vai trò là định dạng tập tin
trên đĩa cho các ứng dụng máy tính như công cụ phân tích tài chính, gói CAD, chương
trình ghi nhật ký, và vv. Hành động File / Open sẽ gọi hàm sqlite3_open() và bắt đầu
thực hiện một giao dịch truy cập đến nội dung. Hành động File / Save kết thúc giao
dịch. Việc sử dụng các giao dịch bảo đảm việc cập nhật các tập tin ứng dụng một cách
nguyên tử, độ bền cao, độc lập, và nhất quán.
Các trigger có thể được thêm vào cơ sở dữ liệu để tạo ra chức năng redo/undo
cho dữ liệu.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
71
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Thiết bị nhúng và các ứng dụng trên thiết bị nhúng
Bởi vì SQLite hầu như không đòi hỏi phải quản trị cho nên SQLite là một lựa
chọn tốt cho các thiết bị hoặc dịch vụ phải làm việc không cần giám sát và không có
sự hỗ trợ của con người. SQLite thích hợp cho sử dụng trong điện thoại di động, máy
tính bảng, hộp set-top ... Nó cũng hoạt động tốt với vai trò là cơ sở dữ liệu nhúng trong
các ứng dụng của người dùng tải về.
Các website
SQLite là cơ sở dữ liệu làm việc tốt cho những website có lượng truy cập từ
trung bình tở xuống (Hầu hết 99% website trên mạng internet nó lượng truy cập trung
bình). Bất cứ website nào nó lượng truy cập ít hơn 100000 lượt trên một ngày SQLite
đều có thể chạy tốt (thậm chí SQLite còn được chứng minh có thể đảm bảo gấp 10 lần
lượng truy cập như vậy).
Cơ sở dữ liệu nội bộ hoặc tạm thời
Đối với các chương trình có rất nhiều dữ liệu phải được sàng lọc và sắp xếp
theo nhiều cách khác nhau, sẽ dễ dàng và nhanh hơn nếu đưa dữ liệu trong bộ nhớ vào
một cơ sở dữ liệu SQLite và sử dụng các truy vấn JOIN và ORDER BY để trích xuất
các dữ liệu theo yêu cầu. Sử dụng một cơ sở dữ liệu SQL nội bộ theo cách này cũng
cung cấp cho các chương trình tính linh hoạt hơn.
Công cụ phân tích tập dữ liệu bằng dòng lệnh
Những người dùng SQL có kinh nghiệm có thể sử dụng một chương trình dựa
trên SQLite để phân tích các tập dữ liệu hỗn hợp. Dữ liệu thô có thể được nhập từ các
tập tin CSV, sau đó dữ liệu có thể được chia nhỏ ra và tạo ra vô số các báo cáo tóm tắt.
Có thể bao gồm phân tích thông tin nhật ký (log) của website, phân tích số liệu thống
kê trong thể thao, lập số liệu lập trình, và phân tích kết quả thử nghiệm.
Có thể làm điều tương tự với một cơ sở dữ liệu client-server. Nhưng những lợi
thế để sử dụng SQLite trong tình huống này mà SQLite là dễ dàng hơn nhiều để thiết
lập và cơ sở dữ liệu kết quả là một tập tin duy nhất có thể lưu trữ trên đĩa hoặc USB
hoặc email thuận tiện trong trao đổi.
Thay thế cho một cơ sở dữ liệu doanh nghiệp trong quá trình demo hoặc
kiểm tra
Nếu đang xây dựng một ứng dụng phía client cho một cơ sở dữ liệu doanh
nghiệp, SQLite có thể thay thế cho cơ sở dữ liệu doanh nghiệp khi chưa hoàn thành.
Đưa SQLite tích hợp vào ứng dụng phía client giúp cho chương trình phía client có thê
chạy độc lập thuận tiện để test hoặc demo.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
72
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Cơ sở dữ liệu phục vụ giảng dạy
Bởi vì tính đơn giản dễ cài đặt và sử dụng (chỉ cần sao chép file thực thi sql
hoặc sqlite.exe là có thể chạy) SQLite là một cơ sở dữ liệu tốt để sử dụng trong giảng
dạy SQL. Sinh viên có thể dễ dàng tạo ra nhiều cơ sở dữ liệu và trao đổi với nhau một
cách nhanh chóng trong quá trình học tập. SQLite không phải là một mô hình chính
xác của các hệ cơ sở dữ liệu khác, tuy nhiên nếu sinh viên nắm bắt được ngôn ngữ
SQL thông qua SQLite thì sẽ đễ dàng hơn khi tiếp cận các hệ quản trị cơ sở dữ liệu
khác phức tạp hợn.
V.4.2 Những trường hợp không thích hợp sử dụng SQLite
Ứng dụng client/server
Nếu có nhiều chương trình phía client truy cập vào một cơ sở dữ liệu chung
thông qua kết nối mạng, thì nên xem xét sử dụng một hệ quản trị cơ sở dữ liệu
client/server khác thay vì SQLite. SQLite sẽ làm việc trên một hệ thống tập tin mạng,
nhưng vì độ trễ liên quan với hầu hết các hệ thống tập tin mạng, hiệu suất sẽ không
cao.
Một nguyên tắc nhỏ nên tránh sử dụng SQLite trong các tình huống nơi cùng
một cơ sở dữ liệu sẽ được truy cập đồng thời từ nhiều máy tính trong một hệ thống tập
tin mạng.
Các trang web lớn
SQLite sẽ làm việc tốt trong vai trò cơ sở dữ liệu duy nhất của một trang web.
Tuy nhiên, nếu website quá bận rộn và phải nghĩ cách tách các thành phần cơ sở dữ
liệu vào các máy chủ riêng biệt, thì chắc chắn phải sử dụng một hệ quản trị cơ sở dữ
liệu client/server phù hợp thay vì SQLite.
Tập dữ liệu rất lớn
Kích thước giới hạn của cơ sở dữ liệu SQLite là 2 terabyte. Và ngay cả khi
SQLite có thể xử lý một lượng dữ liệu lớn hơn thì toàn bộ dữ liệu của nó đều nằm
trong một tập tin duy nhất. Tuy nhiên nhiều hệ thống giới hạn kích thước của một tập
tin nhỏ hơn nhiều 2 terabyte. Nếu cơ sở dữ liệu lớn bắt buộc phải chọn hệ cơ sở dữ liệu
client/server có khả năng chia tập dữ liệu thành nhiều phần lưu trữ trên nhiều vị trí.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
73
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Lượng truy cập đồng thời cao
SQLite dùng khóa đọc/ghi trên toàn bộ tập tin cơ sở dữ liệu. Điều đó có nghĩa
là nếu có quá trình đang đọc từ bất cứ phần nào của cơ sở dữ liệu, tất cả các quá trình
khách bị cấm ghi trên bất kỳ phần nào khác của cơ sở dữ liệu . Tương tự như vậy, nếu
bất kỳ quá trình nào đang ghi trên cơ sở dữ liệu, tất cả các quá trình đọc khác bị ngăn
cản trên bất kỳ một phần khác của cơ sở dữ liệu. Đối với nhiều tình huống, điều này
không phải là một vấn đề. Mỗi ứng dụng làm việc trên cơ sở dữ liệu một cách nhanh
chóng và khóa không kéo dài hơn một vài chục phần nghìn giây. Nhưng có một số ứng
dụng yêu cầu đồng thời nhiều hơn, và những ứng dụng đó có thể phải tìm kiếm một
giải pháp khác mà không phải là SQLite.
V.5 Các ứng dụng lớn của SQLite
Adobe sử dụng SQLite như một định dạng tập tin ứng dụng trong phân mềm
Photoshop Lightroom. SQLite là một thành phần chuẩn trong Adobe Integrated
Runtime (AIR). Acrobat Reader cũng sử dụng SQLite.
Airbus sử dụng SQLite trong phần mềm bay của hãng dòng máy bay A350
XWB.
Apple sử dụng SQLite cho nhiều chức năng trong Mac OS X, bao gồm Apple
Mail, Safari, Aperture. Apple còn sử dụng SQLite trong iPhone, iPod touch và phần
mềm iTune.
Dịch vụ đồng bộ dữ liệu Dropbox sử dụng SQLite lưu trữ dữ liệu phí client.
SQLite lưu trữ meta-data cho trình duyệt Firefox và trình duyệt mail
Thunderbird Email Reader của Mozilla.
Google sử dụng SQLite cho phần mềm Google Desktop, Google Gears, trong
hệ điều hành Android và trong trình duyệt web Chrome. Các kỹ sư của Google có
nhiều đóng góp cho hệ thống con tìm kiếm full-text trong SQLite.
McAfee sử dụng SQLite trong phần mềm diệt virus.
Ngôn ngữ PHP thường có SQLite phiên bản 2 và 3 đi kèm.
SQLite đã đi kèm ngôn ngữ Python từ phiên bản 2.5
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
74
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Chương VI: Xây dựng ứng dụng
VI.1 Phân tích thiết kế dữ liệu
VI.1.1 Đặc tả hệ thống
Về địa điểm du lịch
Xây dựng chương trình quản lý địa điểm du lịch và các tuyến xe buýt, quản lý
theo danh sách và hiển thị trên bản đồ.
Chương trình sẽ quản lý các địa điểm du lịch. Các địa điểm được chia làm
nhiều loại địa điểm, mỗi địa điểm sẽ thuộc ít nhất một loại địa điểm và có thể nhiều
hơn một loại. Loại địa điểm đặc trưng cho dịch vụ hay hoạt động mà địa điểm đó có,
chia làm các loại: tham quan, vui chơi, ẩm thực, café, mua sắm, khách sạn.
Mỗi địa điểm sẽ cung cấp các thông tin: địa chỉ (gồm số nhà và đường), mô tả
tóm tắt về địa điểm, số điện thoại, có phải là địa điểm yêu thích hay không và có phải
là địa điểm của người dùng thêm vào hay không, tọa độ địa lý dùng để hiển thị và chỉ
đường trên bản đồ.
Mỗi địa điểm sẽ có một danh sách ảnh, trong có có một ảnh chính đóng vai trò
là ảnh đại diện cho địa điểm trong chương trình.
Về các tuyến xe buýt
Hiện tại trong nội thành Thành phố Nha Trang có 6 tuyến xe buýt khác nhau.
Mỗi tuyến xe sẽ phải cung cấp các thông tin: tóm tắc lộ trình, lộ trình chi tiết, tần xuất
xe chạy tính bằng đơn vị phút, giá vé, cự ly toàn tuyến có đơn vị ki-lô-mét, ngoài ra
còn lưu giữ thông tin đường đi tuyến xe buýt để hiển thị lên bản đồ.
Mỗi trạm xe buýt thuộc ít nhất một tuyến xe buýt và có thể có nhiều tuyến xe
buýt đi qua trạm đó, để xác định vị trí trên bản đồ, mỗi trạm sẽ có thông tin về tọa độ
địa lý ngoài ra còn quản lý thông tin địa chỉ (gồm số nhà, đường).
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
75
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
VI.1.2 Mô hình thực thể kết hợp
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
76
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
VI.1.3 Mô hình vật lý dữ liệu
VI.2 Các yêu cầu về chức năng của chương trình
Chương trình sẽ xây dựng sẽ đảm bảo các chức năng chính sau :
Bắt vị trí hiện tại của người sử dụng bằng GPS hoặc Wifi hoặc sóng điện thoại.
Tính toán địa chỉ hiện tại dựa trên Google Geocoding API.
Chức năng quản lý địa điểm du lịch
Các địa điểm du lịch sẽ được quản lý theo danh sách. Mỗi danh sách theo từng
loại địa điểm. Trên danh sách địa điểm hiển thị những thông tin tóm tắc cần thiết. Cho
phép người truy cập truy cập nhanh vào từng danh sách địa điểm tương ứng với từng
loại địa điểm. Có phân loại những địa điểm đã được đánh dấu là địa điểm yêu thích và
địa điểm người dùng thêm vào.
Có giao diện UI hiển thị chi tiết thông tin của từng địa điểm. Với một số thông
tin đặt biệt sẽ cung cấp truy cập nhanh để sử dụng thông tin đó. Ví dụ: với số điện
thoại, người sử dụng có thể gọi ngay…
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
77
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Cho phép thêm, xóa, sửa các thông tin địa điểm, bao gồm cả danh sách hình
ảnh.
Với mỗi địa điểm, khi vị trí hiện tại đã tính toán được sẽ tính khoảng cách từ vi
trí hiện tại của người sử dụng đến từng địa điểm, chức năng này sẽ dựa trên Google
Distance Matrix API.
Tự động tính toán các tuyến xe buýt đi đến mỗi địa điểm. Hiển thị các trạm gần
mỗi địa điểm trên bản đồ.
Hiển thị danh sách địa điểm trên bản đồ. Hiển thị thông tin tóm tắc của mỗi địa
điểm trên bản đồ và cho phép người dùng truy cập trực tiếp thông tin chi tiết mỗi địa
điểm từ bản đồ. Tìm đường đi và hiển thị trên bản đồ.
Chức năng hiển thị thông tin các tuyến xe buýt
Cung cấp danh sách các tuyến xe buýt với các thông tin quan trọng. Hiển thị
thông tin chi tiết từng tuyến.
Hiển thị các tuyến xe buýt gồm các trạm và lộ trình trên bản đồ. Cho phép hiển
thị nhiều tuyến cùng lúc.
VI.3 Các vấn đề trong quá trình xây dựng ứng dụng
VI.3.1 Giao diện UI trong lập trình ứng dụng Android
Giao diện người dùng của ứng dụng trên hệ điều hành Android là các Activity.
Mỗi Activity tương ứng với một giao diện gồm nhiều đối tượng View. Các đối tượng
View được chia làm hai loại:
View: là một UI cụ thể có khả năng hiển thị và tương tác với người dùng. Ví
dụ: TextView, Button …
View Group: chứa các View và View Group khác, mục đích của View
Group là xắp xếp các thành phần View theo một trật tự nào nhất định.
Các loại View thường sử dụng :
TextView: hiển thị text, một dòng hay nhiều dòng
EditText: chỉnh sửa text, có thể chọn nhiều kiểu EditText ví dụ: chỉ nhập số,
vùng nhập địa chỉ mail, vùng nhập tự đoán nội dung…
ImageView : hiển thị ảnh
Button: nút nhấn phân biệt bằng text
ImageButton: nút nhất phân biệt bằng hình ảnh
RadioButton: chọn một trong danh sách
CheckBox: chọn nhiều trong danh sách
ListView: hiển thị các item con theo kiểu danh sách dọc.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
78
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
ExpandableListView: hiển thị các item con theo từng nhóm theo kiểu cây
thư mục.
ToggleButton: nút nhấn hai trạng thái.
ProgressBar: thanh tiến trình của tác vụ.
Các loại View Group thường xử dụng :
LinearLayout: dùng thường xuyên nhất, xắp xếp các View con theo chiều
ngang hay chiều dọc, mỗi View con tương ứng một cột hay một hàng.
RelativeLayout: xắp xếp các View con theo vị trí tương đối với các View
con khác và với View cha.
ScrollView: Tự động chuyển sang thành cuộn khi nội dung dài quá chiều dài
màng hình theo chiều dọc.
TableLayout: Xắp xếp các view theo kiểu bảng, gồm nhiều TableRow
Cách đơn giản và phổ biết nhất để thiết kế UI trên ứng dụng Android là viết tập
tin Layout bằng XML. Mỗi Activity sẽ tương ứng với một XML Layout. Lưu ý: luôn
luôn có duy nhất một View Group gốc chứa toàn bộ các View còn lại.
Ví dụ: thiết kế UI đơn giản gồm một EditText và một Button.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
79
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Kết quả:
Các thuộc tính của View được thiếp lập bằng giá trị các thuộc tính của thể
XML. Các thuộc tính quan trọng thường sử dụng trên mọi kiểu View:
id: tên vủa View hay View Group, để xác định và lấy ra sử dụng trong code.
layout_width: độ rộng của View.
layout_height: độ cao của View
Giá trị của layout_width và layout_height có thể là giá trị số kèm theo đơn vị
(5px, 5dp …):
o px: pixel, đơn vị điểm ảnh chính xác, không nên dùng khi thiết kế cho
nhiều kích thước màn hình.
o dp hoặc dip (Density-independent Pixels): đơn vị phụ thuộc kích thước
màn hình, nên dùng, thích hợp cho thiết kết UI trên nhiều độ phân giải.
o sp (Scale-independent Pixels): giống dp nhưng thay đổi khi người dùng
tùy chọn kích thước font chữ cho hệ thống, tích hợp cho font chữ.
o pt: point, 1/72 của một inches.
o in: inches
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
80
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Hoặc có thể là giá trị cố định sau:
o fill_parent: lấy hết kích thước View cha.
o match_parent: như fill_parent kể từ API lever 8.
o wrap-content: kích thước vừa đủ nội dung.
layout_weight: thuộc tích khác đặt biệt nhưng sử dụng khá nhiều, giá trị số,
cho biết View sẽ tràn hết khoảng trống còn lại của View theo giá trị được
đặt.
gravity: thiết lập vị trí tương đối của View con: trái, phải, giữa, trên, dưới…
layout_gravity: thiết lập vị trí tương đối so với View cha: trái, phải, giữa,
trên, dưới…
padding: khoảng cách của nội dung hay View con cách mép trong trái, phải
trên, dưới, không làm thay đổi kích thước View.
layout_margin: thêm phần khoảng trống vào View ở 4 mép ngoài trái, phải
trên, dưới…làm thay đổi kích thước View.
Ngoài ra với mỗi kiểu View sẽ có rất nhiều thuộc tính khác nhau có thể thiết
lập.
Cách đặt XML Layout làm layout cho Activity
Trong phường thức onCreate gọi:
setContentView(R.layout.main);
Với tập tin XML Layout có tên là main.xml
Cách lấy đối tượng View từ layout để xử lý
TextView textview=(TextView)findViewById(R.id.textview_id);
Với View có kiểu TextView và có id là textview_id.
Thao tác trên View
Mỗi loại View hay View Group sẽ có các hành động khác nhau.
Ví dụ:
textview.setText(“Giá trị text”);
Thêm sự kiện thao tác trên View hoặc View Group
Để bắt sự kiện người dùng thao tác trên View phải tạo các Listener tương ứng
với hành động của người dùng và tương ứng với mỗi loại View. Các loại Listener
thường dùng:
OnClickListener: sự kiện click vào View.
OnLongClickListener: sự kiện nhấn và giữ View hơn 1s.
OnItemClickListener: sự kiện chọn item (ListView …).
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
81
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
OnCheckedChangeListener : sự kiện thay đổi trạng thái check
(ToogleButton, CheckBox).
OnDoubleTapListener: sự kiện click đôi.
OnTouchListener: sự kiện trược trên View.
Cách gán Listener cho View
button.setOnClickListener(button_onclick);
Với đối tượng OnClickListener là button_onclick.
VI.3.2 Đăng ký bản đồ Google Map trong ứng dụng
Để sử dụng bản đồ Google Map trong ứng dụng cần phải đăng ký một chuỗi
APIkey. Mỗi phiên bản của Android SDK được cài đặt trên máy tính sẽ có thể lấy một
APIkey duy nhất và không thể dùng được trên máy khác.
Để hiển thị bản đồ Google Map lên UI cần phải khai báo một View đặt biệt là:
com.google.android.maps.MapView.
Khai báo trong XMLayout:
Activity của hiển thị bản đồ cần phải kế thừa lớp MapActivity.
Đưa thư viện com.google.android.maps vào ứng dụng bằng cách khai báo trong
tập tin AndroidManifest.xml
Để thao tác trên bản đồ Google Map có hai đối tượng quan trọng :
MapView: là đối tượng bản đồ Google Map. Các thao tác thêm thông tin,
thêm đánh dấu, thêm đường đi, cập nhật bản đồ, lấy tọa độ … thực hiện trên
đối tượng này.
Cách lấy đối tượng MapView tương tự cách lấy một View từ XMLayout.
MapController: thao tác trên bản đồ: phóng to, thu nhỏ, di chuyển đến một
tạo độ nhất định …
Cách lấy đối tượng MapController:
MapController mc=mv.getController();
Một tọa độ trên bản đồ Google Map là một thể hiện của lớp GeoPoint. Thuộc
tính của thể hiện của lớp GeoPoint gồm có: latitudeE6(int) và longitudeE6(int).
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
82
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
VI.3.3 Đánh dấu địa điểm và hiện thông tin trên bản đồ
Để đánh dấu địa điểm, vẽ thông tin, lấy tạo độ trên bản đồ cần sử dụng thể hiện
của lớp Overlay. Lớp ItemizedOverlay là một lớp kế thừa từ lớp Overlay dùng để vẽ
một danh sách điểm có kiểu hoặc kế thừa từ lớp OverLayItem.
Trong mỗi thể hiện của lớp MapView có chứa một danh sách ArrayList các
Overlay. Cách lấy danh sách OverLay của MapView:
ArrayList map_overlays=mv.getOverlays();
Để hiển thị Overlay lên bản đồ phải thêm nó vào danh sách Overlay của
MapView. Nội dung của Overlay được thêm vào sau sẽ đè lên các Overlay đã thêm
trước đó.
Overlay overlay=new Overlay();
map_overlays.add(overlay);
Để vẽ thông tin lên bản đồ, cần phải cài đặt lệnh vẽ cho mỗi Overlay trong
phương thức draw(). Lớp ItemizedOverlay là lớp đã kế thừa từ lớp Overlay và cài đặt
sẵn phương thức vẽ các điểm đánh dấu bới đối số là ảnh Bitmap hay Drawable để đánh
dấu mỗi OverLay, nên nếu chỉ cần vẽ điểm đánh dấu thì không cần override phương
thức draw(). Tuy nhiên nếu muốn vẽ thêm nội dung khác ví dụ: hình ảnh, đoạn thằng,
hình tròn … thì phải phải override phương thức onDraw.
Ví dụ:
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// TODO Auto-generated method stub
super.draw(canvas, mapView, shadow);
//Cài đặt lệnh vẽ bằng đối tượng canvas
canvas.draw(..);
}
}
Khi vẽ lên bản đồ cần phải chuyển từ tạo độ GeoPoint sang tọa độ điểm trên
màn hình. Thực hiệu điều đó bằng cách sử dụng lớp Projection.
Point screenPoint= mapView.getProjection().toPixels(point_pick, screenPoint);
Mỗi OverlayItem bao gồm các thuộc tính: point (GeoPoint), title (String),
snippet(String).
Lớp ItemizedOverlay là lớp kế thừa từ lớp Overlay mà Android SDK cung cấp
để vẽ đánh dấu điểm nhanh chóng của một danh sách các OverlayItem. Ngoài ra có thể
kế thừa tiếp tục lớp ItemizedOverlay và OverlayItem để tạo ra các lớp có khả năng mở
rộng hơn. Lớp Balloon ItemizedOverlay là lớp kế thừa từ lớp ItemizedOverlay để vẽ
một bảng thông tin lên điểm đánh dấu trên bản đồ khi người dùng click vào.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
83
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
VI.3.4 Sử dụng SQLite trong hệ điều hành Android
Mặc định SQLite không có công cụ quản lý riêng, vì vậy cơ sở dữ liệu phải
thao tác trên code. Android SDK cung cấp một lớp để thao tác trên cơ sở dữ liệu
SQLite là SQLiteOpenHelper.
Thao tác trên cơ sở dữ liêu bằng cách override hai phương thức:
onCreate(SQLiteDatabase db): gọi để tạo cơ sở dữ liệu, là nơi cài đặt các
phương thức tạo cơ sở dữ liệu, tạo bảng, tạo trigger… Được gọi khi
SQLiteOpenHelper khởi tạo và chưa có cơ sở dữ liệu.
onUpgrade(SQLiteDatabse db, int oldVersion, int newVersion): gọi khi cập
nhật phiên bản cho cơ sở dữ liệu. Là nơi cài đặt các thao tác cập nhật cơ sở
dữ liệu.
Phương thức khởi tạo SQLiteOpenHelper:
public DatabaseHelper(Context context) {
super(Context context,String dataBaseName, cursorFactory ,String version);
}
context : Context của ứng dụng.
dataBaseName: tên cơ sở dữ liệu.
cursorFactory: tạo một đối tượng Cursor tùy chọn.
version : phiên bản cơ sở dữ liệu, nếu lớn hơn phiên bản cũ, sẽ gọi phương
thức onUpgrade ().
Cài đặt các câu lênh SQL để tạo cơ sở dữ liệu, tạo bản, tạo trigger … cập
nhật.
public void onCreate(SQLiteDatabase db) {
String query=”…”;
db.execSQL(querry);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query=”…”;
db.execSQL(querry);
}
Thêm giá trị vào bảng dùng ContentValue
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(“ten_cot_khoa”, 1);
cv.put(“ten_cot”, "Nội dung");
db.insert(“ten_bang”, “ten_cot_khoa”, cv);
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
84
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Cập nhật bản ghi
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(“ten_cot_1”, “gia_tri_1”);
cv.put(“ten_cot_2”,”gia_tri_2”);
db.update(“ten_bang”, cv, “ten_cot_1=?”, new String []{String.valueOf(“gia_tri_1”)});
Tham số thứ 3 của câu lệnh là mệnh đề where, giá trị của “?” sẽ được thay thế
bằng phần tử tương ứng trong mảng String ở tham số thứ 4.
Xóa bản ghi
SQLiteDatabase db=this.getWritableDatabase();
db.delete(“ten_bang”, “ten_cot_1=?”, new String [] {String.valueOf(“gia_tri_1”)});
db.close();
Truy vấn
Truy vấn đơn giản:
database.rawQuery(String query,String[} selection args);
query: câu select, trong mệnh đề where, “?” sẽ được thay thế bằng giá trị trong
mảng selection args.
Câu lệnh sẽ trả về kết quả trong đối tượng Cursor
Truy vấn phức tạp
Cursor c=db.query(String tableName, String [] columns, String whereClause, String []
selection_args, String groupBy, String having, String orderBy);
o tableName: tên bảng.
o columns: mảng String tên các cột lấy giá trị
o whereClause: mệnh đề where
o selection_args: tập giá trị của mệnh đề where thay vào ký tự “?”
o groupBy: mệnh đề group by
o having: mệnh đề having
o orderBy: mệnh đề order by
Câu lệnh sẽ trả về kết quả trong đối tượng Cursor
Sử lý đối tượng Cursor để lấy dữ liệu truy vấn
Toàn bộ kết quả truy vấn sẽ nằm trong đối tượng Cursor. Các câu lệnh để sử
dụng Cursor:
boolean moveToNext(): chuyển đến dòng tiếp theo.
boolean moveToFirst(): chuyển đến dòng đầu tiên.
boolean moveToPosition(int position): chuyển đến dòng ở vị trí position.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
85
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
boolean moveToPrevious(): đến dòng vừa trước.
boolean moveToLast(): chuyển đến dòng cuối cùng
Các phương thức trên trả về false nếu không có nội dung ở dòng chuyển đến.
Để lấy liệu một dòng dùng các câu lệnh:
getInt(int column_index)
getString(int column_index)
getFloat(int column_index)
…
column_index là chỉ số dòng có thể lấy bằng lệnh:
cursor.getColumnIndex(“ten_cot”);
Kiểu dữ liệu trong SQLite
INTEGER: số nguyên, chứa trong 1, 2, 3, 4, 6, hay 8 byte phụ thuộc vào độ
lớn.
REAL: số thực, kiểu 8-byte của IEEE
TEXT. kiểu chuỗi hỗ trợ UTF-8, UTF-16BE or UTF-16LE.
BLOB: kiểu dữ liệu để lưu trữ thông tin bất kỳ, truyền vào thế nào thì nhận
lại như vậy.
Để đơn giản hóa, trong SQLite không có kiểu boolean, kiểu datetime… nên
phải dùng kiểu int để thay thế.
VI.3.5 Phân tích cú pháp XML
Một nhiệm vụ của chương trình là phân tích tập tin xml kết quả trả về của các
API webservice để trích xuất nội dung : Có nhiều cơ chế để phân tích một tài liệu xml
bằng ngôn ngữ Java trong Android. Một là phân tích hướng sự kiện mà tiêu biểu là sử
dụng API SAX do Sun đưa ra. Hai là phân tích hướng đối tượng bằng cách sử dụng
API DOM do W3C đưa ra.
Mỗi một mô hình phân tích đều có ưu nhược điểm riêng. Mô hình phân tích
hướng đối tượng mang lại khả năng tìm kiếm. Trong khi mô hình phân tích heo hướng
sự kiện duyệt tài liệu từ trên xuống dưới một chiều, chủ yếu dùng để đọc xml là chính.
Ưu điểm của phân tích hướng sự kiện là tốc độ đọc nhanh, ít tốn bộ nhớ. Vì vậy trong
trường hợp này ta sẽ chọn phân tích file Rss theo phương pháp hướng sự kiện sử dụng
API SAX.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
86
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Sử dụng SAX bằng cách tạo một lớp kế thừa từ lớp DefaultHandler và override
các phương thức:
characters(char[] ch, int start, int length): con trỏ đang duyệt đến nội dung
của mỗi thẻ.
startElement(String uri, String localName, String qName, Attributes
attributes): con trỏ duyệt đến đầu thẻ.
endElement(String uri, String localName, String qName): con thỏ duyệt đến
kết thúc thẻ.
Con trỏ của XML SAX sẽ duyện lần lược từ đầu tài liệu, đến vị trí tương ứng
nó sẽ gọi phương thức tương ứng, nhiệm vụ phải cài đặt các câu lệnh nhận biết con trỏ
đang ở vị trí nào để lấy dữ liệu thích hợp.
VI.3.6 Chạy đa tiến trình các tác vụ truy cập mạng nhằm giảm độ
trễ cho ứng dụng
Tạo thread mới chạy các tác vụ mất thời gian
Để sử dụng các Google API Webservice cần phải truy cập mạng để gởi chuỗi
request URL và lấy về tập tin XML chứa kết quả. Hành động này sẽ làm mất nhiều
thời gian và sẽ làm treo ứng dụng một khoảng thời gian ngắn gây khó chịu cho người
dùng. Vì vậy với các tác vụ cần truy cập mạng để gởi nhận thông tin sẽ thực hiện trong
một thread mới song song với thread chính của chương trình.
Cách tạo mới thread đơn giản để xử lý các nhiệm vụ làm mất thời gian :
new Thread(new Runnable() {
public void run() {
//Các tác vụ mất thời gian thực hiện ở đây
}
}).start();
Cập nhật UI từ một thread khác không phải là thread chính
Sau khi thread phụ thực hiện xong sẽ tiếp hành cập nhật thông tin lên UI của
người dùng. Tuy nhiên trong Android không cho phép cập nhật UI từ một thread
không phải là thread chính của chương trình.
Giải pháp cho vấn đề này là sử dụng lớp Handler. Trong mỗi Activity cần cập
nhật UI từ một thread ngoài phải tạo một thể hiện handler của lớp Handler toàn cục
override phương thức handleMessage(Message msg).
Trong handleMessage(Message msg ) cài đặt các hành động cần thực hiện khi
handler gởi Message. Trong thread phụ, khi cần cập nhật UI phải gọi các phương thức
thích hợp của Handler.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
87
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Các phương thức gởi message thường dùng:
handler.sendEmptyMessage(int what)
handler.sendEmptyMessageAtTime(int what,long uptimeMillis)
handler.sendEmptyMessageDelayed(int what,long delayMillis)
handler.sendMessage(Message msg)
handler.sendMessageAtTime(Message msg,long uptimeMillis)
handler.sendMessageDelayed(Message msg,long delayMillis)
Tạo đối đối tượng handler và override phương thức handleMessage(Message
msg)
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
if(msg.what==1){
// Thực hiện các hành động với what = 1
}
}
};
VI.3.7 Bắt vị trí hiện tại bằng các Location Provider
Trong hệ thống Android có cung cấp sẵn các dịch vụ để lấy vị trí của người
dùng. Để tính toán và xác định vị trí người dùng, hệ thống Android sử dụng dữ liệu
GPS (chính xác nhất), tín hiệu Wifi, tín hiệu sóng điện thoại.
Để truy cập và sử dụng các dịch vụ vị trí của hệ thống, phải sử dụng lớp
LocationManager. Lớp này không yêu cầu tạo thể hiện trực tiếp mà sẽ lấy đối tượng
bằng cách :
LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);
Implement interface LocationListener tạo ra một lớp lắng nghe mỗi khi vị trí
thay đổi và đăng ký nó với đối tượng của lớp LocationManager. Có thể thiết lập điều
kiện để LocationListener quyết định cập nhật vị trí mới, điều kiện bao gồm: sau một
thời gian nhất định, cách vị trí đã xác định lần trước một khoảng nhất định, loại thành
phần cung cấp vị trí.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
88
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Ví dụ đăng ký LocationListener với LocationManager, bắt vị trí bằng GPS, cập
nhật vị trí sau mỗi 30000 mili giây hoặc 10 mét:
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
location_listener);
30000,
10,
Ví dụ implement LocationListener và override các phương thức thực hiện khi vị
trí thay đổi:
public class MyLocationListener implements LocationListener {
public MyLocationListener(){
}
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
//CÀI ĐẶT CÁC HÀNH ĐỘNG KHI VỊ TRÍ HIỆN TẠI THAY ĐỔI
}
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
Thông tin vị trí bắt được sẽ là một đối tượng của lớp Location. Mỗi thể đối
tượng Location sẽ chứa vị trí địa lý (GeoPoint) và các thông tin kèm theo: loại
provider, độ chính xác, tốc độ, thời gian.
Các phương thường sử dụng với Location:
getAccuracy(): lấy độ chính xác, trả về kiểu float, đơn vị mét.
getProvider(): lấy tên của provider.
getSpeed(): lấy tốc độ , kiểu float, đơn vị mét/giây.
getTime(): lấy thời gian bắt vị trí, trả về kiểu long, đơn vị mili giây kể từ
ngày 1 tháng 1 năm 1970.
distanceTo(Location dest): tính toán khoảng cách đến một Location khác,
trả về kiểu float, đơn vị mét.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
89
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
VI.3.8 Dùng Observer Template để thông báo cho các Activity
mỗi khi địa điểm hiện tại thay đổi
Sử dụng LocationListener đăng ký với LocationManager, mỗi lần vị trí mới
được cập nhật đối tượng LocationListener sẽ chạy phương thức của nó là
onLocationChanged(Location location).
Mỗi khi vị trí hiện tại mới thay đổi, phải cập nhật sự thay đổi đó ngay trên UI.
Nếu muốn cập nhật trên một Activity cụ thể có thể tùy biến lớp LocationListener để
đưa một tham chiếu của Activity đó vào LocationListener và phương thức
onLocationChanged(Location location) của LocationListener sẽ gọi một phương thức
cập nhật UI ủa Activity đó.
Vấn đề đặt ra là sẽ có nhiều Activity khác nhau cần phải cập nhật khi vị trí hiện
tại thay đổi và mỗi Activity sẽ thay đổi UI một cách khác nhau. Giải pháp là sử dụng
mẫu Observer để xây dựng cơ chế thông báo mỗi khi vị trí thay đổi.
Mẫu Observer:
Trong Java SDK có cung cấp lớp cơ sở Observable và interface Observer.Xây dựng
lớp MyLocationListener implement interface LocationListener và đồng thời kế thừa
lớp Observable để nó trở thàng một Subject thông báo cho các Observer của nó.
Đối với các Activity muốn cập nhật UI mỗi khi vị trí hiện tại thay đổi sẽ
implement interface Observer, override phương thức update() cài đặt các hành động
phù hợp. Mỗi khi Activity khởi tạo sẽ đăng ký nó với MyLocationListener. Mỗi khi vị
trí có thay đổi MyLocationListener sẽ gọi phương thức notifyObservers() trong
onLocationChanged(Location location) và cập nhật các Activity.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
90
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
VI.3.9 Gọi các Activity và truyền dữ liệu giữa chúng
Gọi Activity
Trong Android có hai kiểu gọi Activity thông dụng :
startActivity(Intent intent): Gọi Activity mới, Activity gọi sẽ chuyển sang
trạng thái onPause(). Activity được gọi sẽ tạo mới thông qua onCreate() và
hiển thị lên màn hình. Nếu Activity được gọi kết thúc, Activity đã gọi nó sẽ
thực hiện onResume() và hiển thị lên màn hình.
startActivityForResult(Intent intent,int requestCode): Gọi Activity mới và
chờ kết quả từ Activity được gọi, tham số đưa vào có thêm requestCode để
phân biệt mục đích gọi Activity mới, Activity gọi sẽ chuyển sang trạng thái
onPause(). Activity được gọi sẽ tạo mới thông qua onCreate() và hiển thị lên
màn hình. Nếu Activity được gọi kết thúc, sẽ có trạng thái kết quả được thiết
lập để trả về Activity gọi nó thông qua các phương thức:
o setResult(int resultCode): resultCode cho biết kết quả thực hiện của
Activity được gọi, resultCode có các giá trị hằng
RESULT_OK: bằng -1, kết quả chấp nhận.
RESULT_CANCELED: kết quả bị bỏ qua.
o setResult(int resultCode, data): Thêm dữ liệu vào Intent và gởi cho
Activity đã gọi nó bằng startActivityForResult().
Sử dụng Intent để gọi Activity và truyền dữ liệu giữa các Activity
Khởi tạo đối tượng Intent mới gọi Activity
Intent in=new Intent(activity1.this,Actvity2.class);
startActivity(in);
activity1.this: là Context của Activity hiện tại.
Actvity2.class: class của Activity2
Truyền dữ liệu vào Intent sử dụng Bundle. Bundle chứa một tập dữ liệu có thể
tuyền vào Intent để gởi sang Activity khác. Sau khi đặt dữ liệu vào Bundle, sẽ đặt
Bunble vào Intent để gởi đi. Các phương thức đặt dữ liệu vào Bundle:
putInt (String key, int value)
putIntArray (String key, int[] value)
putIntArray (String key, int[] value)
putIntArray (String key, int[] value)
…
key: là từ khóa dùng để phân biệt dữ liệu và lấy dữ liệu ra ở Activity gởi đến.
Bunble có thể đưa vào tất cả các kiểu dữ liệu cơ sở của Java. Muốn đưa vào kiểu đối
tượng, phải xây dựng một lớp implement interface Parcelable.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
91
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Phương thức đưa đối tượng Parcelable vào Bundle:
putParcelable (String key, Parcelable value)
putParcelableArray (String key, Parcelable[] value)
bun.putParcelableArrayList(String key, ArrayList< Parcelable > value)
Phương thức đưa Bundle vào Intent: intent.putExtras(Bundle extras).
Phương thức lấy Bundle từ Intent: intent.getExtras().
Lấy dữ liệu ra từ Bunble:
getInt (String key)
getIntArray (String key)
getIntArray (String key)
getIntArray (String key)
…
getParcelable (String key)
getParcelableArray (String key)
getParcelableArrayList (String key)
VI.4 Kết quả xây dựng ứng dụng
Tổng kết các chức năng của chương trình đã xây dựng được
Hiển thị bản đồ Google Map, mặc định khu vực Nha Trang, cung cấp chức
năng zoom bằng điều khiển hoặc hai ngón tay.
Hiển thị danh sách thông tin 6 tuyến xe buýt.
Xem thông tin chi tiết tuyến xe, xem tuyến xe trên bản đồ, tìm trạm gần.
Hiển thị danh sách địa điểm phân theo loại địa điểm.
Mỗi danh sách địa điểm phân chia thành các danh sách con.
Tính toán khoảng cách từ địa điểm đến trí hiện tại.
Xem nhanh danh sách địa điểm trên bản đồ.
Cung cấp thông tin chi tiết địa điểm.
Cho phép người dùng đánh dấu địa điểm yêu thích.
Chính sửa thông tin của địa điểm, chọn loại địa điểm.
Chức năng tự hoàn thành tên đường.
Thêm ảnh minh họa cho địa điểm bằng cách: bật máy ảnh của máy để chụp
ảnh, lấy trong máy.
Cập nhật ảnh chính bằng cách: bật máy ảnh của máy để chụp ảnh, lấy trong
máy, lấy từ danh sách ảnh của địa điểm.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
92
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Hiển thị danh sách các tuyến xe buýt gần địa điểm.
Chức năng xem nhanh các trạm gần địa điểm trên bản đồ.
Giao diện xem ảnh, zoom ảnh, thêm và xóa ảnh.
Gọi điện trực tiếp từ giao điện chi tiết địa điểm.
Chức năng chỉ đường nhanh từ giao diện chi tiết địa điểm.
Bắt vị trí hiện tại bằng GPS hoặc mạng.
Tính toán địa chỉ hiện tại, cung cấp thông tin độ chính xác và nguồn lấy vịt
trí hiện tại.
Click vào điểm đánh dấu vị trí hiện tại trên bản đồ để hiển thị thông tin tóm
tắc và chi tiết của vị trí hiện tại.
Thêm địa điểm từ vị trí hiện tại hoặc chọn vị trí trên bản đồ.
Xóa địa điểm.
Click chọn địa điểm trên bản đồ để hiển thị thông tin tóm tắc của địa điểm,
bao gồm khoảng cách đến vị trí hiện tại.
Truy cập nhanh chi tiết địa điểm từ bản đồ.
Chức năng hiển thị đường đi của xe, trạm xe của mỗi tuyến trên bản đồ.
Có thể hiển thị nhiều tuyến cùng lúc.
Chức năng chỉ đường đến địa điểm.
Vẽ kết quả chỉ đường lên bản đồ, chia thành từng bước cung cấp thông tin
hướng dẫn.
Giao diện hiển thị thông tin chi tiết hướng dẫn chỉ đường, có bao gồm thông
tin khoảng cách, thời gian ước lượng toàn bộ và từng bước.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
93
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Giải thích chức năng của chương trình
Giao diện chính:
Trược sang phải vào giao diện danh sách tuyến xe buýt, trượt sang trái vào giao
điện danh sách địa điểm.
Giao diện tuyến xe buýt
Mỗi tuyến xe cung cấp các thông tin: tên tuyến, lộ trình tóm tắc, giá vé, tần
xuất. Click chọn để vào giao diện chi tiết tuyến xe.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
94
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Giao diện chi tiết tuyến xe
Giao diện chi tiết tuyến xe cung cấp các thông tin: tên tuyến, lộ trình tóm tắc,
giá vé, tần xuất, cự ly tuyến, lộ trình chi tiết.
Nút nhấn ‘Xem trên bản đồ’ chuyển qua bản đồ và hiển thị đường đi và các
trạm của tuyến.
Nút nhấn xem các trạm gần để hiển thị danh sách các trạm của tuyến xe gần vị
trí hiện tại trong khoảng cách 300 mét.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
95
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Click vào trạm trên bản đồ hiển thị địa chỉ và các tuyến của trạm
Có thể hiển thị nhiều đường đi, nhiều danh sách trạm của nhiều tuyến cùng
lúc.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
96
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Giao diện danh sách địa điểm
Hàng trên cùng hiển thị danh sách các loại địa điểm theo biểu tượng. Kích vào
để chọn danh sách địa điểm tương ứng. Mỗi danh sách có các danh sách con là địa
điểm được đánh dấu yêu thích và địa điểm của người dùng thêm vào.
Nếu tính được khoảng cách từ người dùng đến địa điểm. Danh sách địa điểm sẽ
được xắp xếp theo thứ tự từ gần đến xa.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
97
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Biểu tượng người có màu xanh sẽ cho biết đó là địa điểm người dùng tự thêm
vào, màu xám là địa điểm có sẵn của hệ thống.
Biểu tượng trái tim màu hồng là địa điểm được đánh dấu yêu thích. Trái tim
màu xám là địa điểm chưa được đánh dấu.
Kích vào mỗi địa điểm sẽ hiển thị chi tiết địa điểm. Kích vào nút bản đổ để
chuyển nhanh sang bản đồ hiển thị danh sách địa điểm hiện tại.
Chi tiết địa điểm
Giao diện chi tiết địa điểm hiển thị các thông tin đầy đủ về địa điểm. Biểu
tượng ở hàng thứ hai cho biết địa điểm thuộc loại nào. Một địa điểm có thể thuộc
nhiều loại. Nút nhấn ở phần địa chỉ có chức năng chỉ đường nhanh. Nút nhấn ở phần
số điện thoại để chuyển nhanh sang phần gọi của điện thoại. Ở phần tuyến xe buýt hiển
thị các tuyến xe buýt gần địa điểm (có trạm cách địa điểm 300m). Danh sách hình ảnh
của địa điểm thiết kế theo dạng trượt. Kích chọn một hình ảnh bất kỳ để chuyển sang
giao diện xem ảnh. Có thể thêm ảnh nhanh trên danh sách ảnh.
Các thông tin của địa điểm có thể sửa trực tiếp bằng cách kích và giữ trong
khoảng 1 giây.
Chọn ảnh chính
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
98
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Có ba cách để lấy ảnh chính cho địa điểm : chọn từ danh sách ảnh đã có của địa
điểm, dùng camera chụp ảnh mới, dùng ảnh có sẵn trong bộ nhớ máy. Sau khi đã chọn
ảnh, chương trình sẽ gọi chức năng crop của hệ thống để lấy phần ảnh phù hợp theo
hình vuông.
Sửa tên địa điểm
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
99
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Các giao diện sửa số điện thoại, sửa mô tả tương tự sửa tên địa điểm.
Sửa loại của địa điểm
Sửa địa chỉ
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
100
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Ứng dụng có khả năng tự nhận dạng tên đường.
Giao diện xem ảnh
Giao diện xem ảnh cung cấp khả năng phóng to thu nhỏ bằng hai ngón tay.
Chuyển ảnh bằng cách trượt trên thanh tên địa điểm hoặc kích vào biểu tượng ‘>’ ở hai
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
101
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
góc. Ngoài ra trên giao diện ảnh cũng cung cấp chức năng xóa ảnh và thêm ảnh mới
bằng menu.
Giao diện bản đồ hiển thị danh sách địa điểm
Kích vào mỗi đánh dấu địa điểm sẽ hiển thị thông tin tóm tắc. Kích vào bản
thông tin địa điểm để chuyển sang chi tiết địa điểm.
Vị trí hiện tại
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
102
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Vị trí hiện tại được đánh dấu bằng biểu tượng màu hồng. Vòng tròn chung
quanh là độ chính xác của vị trí bắt được.
Địa chỉ lấy được bằng cách mã hóa địa lý. Có cho biết vị trí hiện tại bắt được
bằng GPS hay Network.
Thêm địa điểm
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
103
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Có hai cách thêm địa điểm mới : thêm từ vịt trí hiện tại và thêm một điểm chọn
trên bản đồ.
Chỉ đường
Đường màu xanh là con đường gợi ý đi đến mục tiêu. Biểu tượng B là các điểm
phải rẽ. Kích vào để hiển thị thông tin chỉ đường cho điểm rẽ. Kích vào nút chỉ đường
màu hồng để chuyển sang giao diện chi tiết chỉ đường.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
104
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Bản đồ
Có thể cùng lúc hiển thị nhiều thông tin : địa điểm, đường và trạm xe buýt, chỉ
đường … lên bản đồ.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
105
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Chương VII: Tổng kết
VII.1 Ưu khuyết điểm của chương trình đã xây dựng
VII.1.1 Ưu điểm
Chương trình có thể cung cấp nhiều địa điểm ở Nha Trang phục vụ khách du
lịch. Cho phép người sử dụng lưu giữ vị trí các địa điểm yêu thích một cách
nhanh chóng. Sử dụng, cập nhật các thông tin địa điểm theo nhiều cách khá
trực quan.
Cung cấp thông tin các tuyến xe buýt trực quan trên bản đồ giúp người sử
dụng tìm ra tuyến xe buýt phù hợp cho chuyến đi của mình.
Vì là chương trình hoạt động trên thiết bị di động nên sử dụng khá tiện lợi.
VII.1.2 Khuyết điểm
Chương trình yêu cầu kết nối mạng (wifi hoặc 3G) khi sử dụng.
Vẫn còn thiếu sót nhiều chức năng, ví dụ : chia sẻ địa điểm lên các mạng xã
hội…
Chưa có cơ chế cập nhật dữ liệu thông qua mạng, muốn cập nhật dữ liệu
phải cập nhật cả phần mềm.
Chưa có cơ chế sao lưu dữ liệu người dùng, nếu xóa phần mềm, dữ liệu
người dùng sẽ mất.
Chưa cho phép người dùng thêm loại địa điểm mới
VII.2 Hướng đi trong tương lai
Bổ sung dữ liệu.
Tạo loại địa điểm mới định nghĩa bởi người dùng
Xây dựng cơ chế nạp dữ liệu cập nhật thông qua mạng, có thể dùng xml.
Hoặc xây dựng một cơ sở dữ liệu trên máy chủ, phần mềm sẽ hoạt động như
một ứng dụng phía client. Cho phép mở rộng rất nhiều chức năng hữu ích:
bình luận, đánh giá, bài viết, chia sẽ giữa người dùng với nhau… Và có thể
hoạt động như một mạng xã hội.
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
106
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
VII.3 Kết quả đạt được
Thiết kế giao diện trên Android.
Lập trình Java trên nền tảng Android.
Sử dụng Google API Webservice
Sử dụng Google Map
Sử dụng XML
Kiến thức về SQLite
Kiến thức hệ thông thông tin địa lý GIS
Xây dựng được ứng dụng quản lý trên Android
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
107
Ứng dụng tìm kiếm thông tin bản đồ trên thiết bị Android
Tài liệu tham khảo
Các tài liệu sử dụng:
The Android mobile platform - Benjamin Speckmann
Tìm hiểu các Layout cơ bản trong Android - Nguyễn Văn Kiên St
Android Application Development - Perth, Western Australia, Reto Meier
Các đường link tham khảo:
http://www.baomoi.com/The-gioi-nhay-vot-ve-cong-nghe-thongtin/76/5125452.epi
http://www.pcworld.com.vn/articles/quan-ly/chuyenmuc/2011/03/1224392/thoi-dai-hau-pc-va-muc-tieu-cho-nganh-cntt/
http://sinhvienit.net/@tut/co-so-du-lieu/xml/67-bai-1-tim-hieu-cau-truc-vacu-phap-cua-xml.html
http://congdongjava.com/showthread.php?p=8905
http://developer.android.com
http:// vietandroid.com
http://stackoverflow.com
http://www.dofactory.com
http://genk.vn
https://developers.google.com/maps/documentation/webservices/
GVHD: Trần Minh Văn | SVTH: Trần Mạnh Cường
108