android & google api
TRANSCRIPT
I. Tổng Quan Về Android OS
Được phát triển bởi Google
Là hệ điều hành mã nguồn mở
cho thiết bị di động
Dựa trên nền tảng Linux
3
Hỗ trợ tối đa các chức
năng của Google
(Google maps,
Google Latitude,
Gmail, Youtube…)
7
Những Điểm Nổi Bật
Công cụ và môi trường
phát triển
• Một môi trường hoàn chỉnh để có thể phát triển các
ứng dụng trên nền tảng Android gồm có:
– Cài Java Development Kit (JDK)
http://www.oracle.com/technetwork/java/javase/do
wnloads/jdk8-downloads-2133151.html
- Công cụ lập trình Android
http://developer.android.com/sdk/index.html
8
Máy Ảo
4/20/2016 9
Trong Eclipse chọn Window –> Android SDK Manager
Check các phiên bản muốn cài đặt sau đó chọn Install
Packages.
II. JSON
JSON (JavaScript Object Notation) : là cú pháp để lưu trữ và
trao đổi thông tin văn bản. Cũng giống như XML.
JSON là nhỏ hơn so với XML, và nhanh hơn và dễ dàng hơn để
phân tích (parse)
4/20/2016 11
Phân Tích Json
Phân tích Json thành đối tượng
Cách làm gồm 3 bước:
• Tạo đối tượng JSONParser
• Parser chuỗi JSON về một JSONObject
• Lấy các giá trị trong jsonObject thông qua các Key
Phân tích Json thành tập đối tượng
Cách làm gồm 3 bước:
• Tạo đối tượng JSONParser
• Parser chuỗi JSON về một JSONArray
• Lấy các giá trị trong jsonObject thông qua các Key
4/20/2016 13
Google Place API
Google Places API là một dịch vụ cung cấp thông tin về các địa điểm
trên toàn thế giới như các địa điểm kinh doanh, vị trí địa lý, hoặc các
địa danh nổi tiếng… bằng cách sử dụng yêu cầu thông qua HTTP
4/20/2016 14
Sử Dụng
API Key:
http://code.google.com/apis/console
4/20/2016 15
Goole Place Autocomplete
Google Places Autocomplete API là một dịch vụ web cung cấp bởi
Google, giúp tự động hoàn chỉnh từ khóa tìm kiếm bằng cách trả về
danh sách các địa điểm kinh doanh, địa chỉ,.. gần với từ khóa nhận
được nhất.
4/20/2016 16
Request
Một yêu cầu của Places Autocomplete là một đường dẫn HTTP URL
có dạng:
https://maps.googleapis.com/maps/api/place/autocomplete/output
?parameters
Trong đó, output có thể có các giá trị:
•json
•xml
Parameters là các tham số được phân biệt nhau bởi dấu &.
Bao gồm các tham số bắt buộc và các tham số không bắt buộc:
4/20/2016 17
Parameters
Tham Số Mô Tả
Input (bắt buộc) từ khóa tìm kiếm
Sensor (bắt buộc) biết yêu cầu được gửi có sử dụng thiết bị định vị để xác
định ví trí gửi yêu cầu không
Key (bắt buộc) API key của ứng dụng
4/20/2016 18
https://maps.googleapis.com/maps/api/place/autocomplete/json?loca
tion=10.823099,106.629664&radius=1000&types=establishment|ge
ocode&key=AIzaSyBfLO4nm9nDdZV4NZGAGlLgTnnoU7ry1Pk
&language=en&sensor=true&input=vo%20van
Response
Kết quả trả về dạng JSON gồm hai phần tử gốc sau:
• status – chứa siêu dữ liệu thể hiện trạng thái của request
• predictions – chứa một danh sách các địa điểm tìm được kèm
theo thông tin từng địa điểm
4/20/2016 19
Status
Status Mô tả
ZERO_RESULTS không tìm thấy kết quả nào phù
hợp
OVER_QUERY_LIMIT quá giới hạn gửi yêu cầu trong một
ngày
REQUEST_DENIED yêu cầu bị từ chối
INVALID_REQUEST yêu cầu không hợp lệ
OK không có lỗi nào xảy ra và có ít
nhất một kết quả được trả về.
4/20/2016 20
Predictions
predictions Mô tả
description tên của kết quả
reference chứa mã duy nhất dùng để lấy thêm
thông tin về địa điểm thông qua một API
khác đó là Place Detail API.
id mã duy nhất để xác định địa điểm này
terms là một mảng chứa từng phần (section)
của kết quả tìm được trong chuỗi
description (value và offset)
matched_substring hai phần tử offset và lengh, dùng để xác
định vị trí và độ dài của đoạn văn bản
(input) trong kết quả tìm được
4/20/2016 21
Request
Một yêu cầu của Places Autocomplete là một đường dẫn HTTP URL có
dạng:
https://maps.googleapis.com/maps/api/place/search/output?parameter
s
Trong đó, output có thể có các giá trị:
•json
•xml
Parameters là các tham số được phân biệt nhau bởi dấu &.
Bao gồm các tham số bắt buộc và các tham số không bắt buộc
4/20/2016 23
Các Tham Số
Tham Số Mô Tả
location (bắt buộc) tâm của khu vực muốn tìm kiếm
Radius (bắt buộc) bán kính khu vực tìm kiếm (m)
Key (bắt buộc) API key của ứng dụng
4/20/2016 24
https://maps.googleapis.com/maps/api/place/search/json?lo
cation=10.823099,106.629664&radius=5000&&types=atm
&key=AIzaSyBfLO4nm9nDdZV4NZGAGlLgTnnoU7ry1P
k&language=en&sensor=true
Response
Kết quả trả về dạng JSON gồm các phần tử gốc
• status,
• html_attributions,
• results
4/20/2016 25
Status
Status Mô tả
ZERO_RESULTS không tìm thấy kết quả nào phù
hợp
OVER_QUERY_LIMIT quá giới hạn gửi yêu cầu trong
một ngày
REQUEST_DENIED yêu cầu bị từ chối
INVALID_REQUEST yêu cầu không hợp lệ
OK không có lỗi nào xảy ra và có ít
nhất một kết quả được trả về.
4/20/2016 26
Html_attributions
Chứa các thông tin về nhà cung cấp phải được hiển thị cho người
dùng.
4/20/2016 27
Results
results Mô tả
name tên của địa điểm.
viciniy các địa điểm lân cận
geometry chứa thông tin về vị trí địa lý của địa
điểm
icon chứa URL của icon cho địa điểm
types[] chứa một mảng các loại địa điểm mô tả
cho các địa điểm.
reference chứa mã duy nhất dùng để lấy thêm
thông tin về địa điểm thông qua một API
khác đó là Place Detail API.
id chứa mã duy nhất để xác định địa điểm
này
4/20/2016 28
Place Detail - Request
https://maps.googleapis.com/maps/api/place/details/output?p
arameters
Output:
• JSON
• XML
Place Detail – Request –
Parameter
• Required:
• key: API key dùng cho trình duyệt
• placeid: duy cho mỗi địa điểm, lấy từ place searches
• reference: duy cho mỗi địa điểm, lấy từ place searches
(deprecated).
• Optional:
• language: ngôn ngữ cho kết quả trả về
• sensor: cho biết yêu cầu được gửi đến từ thiết bị có sử
dụng thiết bị định vị hay không, có giá trị true hoặc
false.
• …
Place Detail – Request –
Parameter
• Ví dụ:
https://maps.googleapis.com/maps/api/place/nearbysearch/jso
n?location=10.849938333333334,106.77168666666667&radi
us=5000&types=hospital&sensor=true&key=AIzaSyAZE2N
Hm-bgBqY6qLorYaNHZeUKV6eLuF4
Place Detail – Request –
Parameter
4/20/2016 34
Kết quả trả về dạng JSON gồm các phần tử gốc:
• Status
• html_attributions,
• Results.
Place Detail – Response
Place Detail – Response
Tham số Mô tả
name Tên của địa điểm.
viciniy
Các địa điểm lân cận, thường thì các
đường phố hoặc vùng lân cận nằm
trong phạm vi các kết quả.
types[]Chứa một mảng các loại địa điểm mô
tả cho các địa điểm.
formated_phone_number Số điện thoại của địa điểm.
formated_address Địa chỉ của địa điểm.
Place Detail – Response
address_components[]
Là một mảng các thành phần địa chỉ, ví dụ: “111 8th
Avenue, New York, NY" bao gồm 3 thành phần "111" (số
nhà), "8th Avenue" (đường), "New York" (thành phố) and
"NY" (tiểu bang). Mỗi address_component bao gồm:
type[] – mảng các loại địa điểm.
long_name – tên đầy đủ của add_component.
short_name – tên viết tắt, ví dụ “Alaska” thành
“AK”.
geometry Chứa location (lat, long) của địa điểm.
Place Detail – Response
urlĐịa chỉ trang thông tin chi tiết của địa điểm (Google Place
Page).
rating Điểm đánh giá của người dùng cho địa điểm (từ 0 đến 5).
reference
Mã dùng để truy vấn đên Details service trong tương lai.
Mã này có thể khác mã reference được sử dụng để yêu cầu
đến Detail service trước đó. Mã này là để cập nhật thêm
thông tin.
id
Chứa mã duy nhất để xác định địa điểm này. id này không
được dùng để lấy thông tin về địa điểm, nhưng có thể
được sử dụng để hợp nhất dữ liệu của một địa điểm. id này
thỉnh thoảng có thể bị thay đổi.
Google Map API
• Google Maps là một dịch vụ bản đồ trực tuyến miễn phí
• Được cung cấp bởi Google
• Hỗ trợ bản đồ: đường sá, bản đồ vệ tinh, hướng dẫn đường đi,
địa điểm,…
• Có thể tích hợp vào website, ứng dụng,…
Google Map API
• 2006, Google giới thiệu công nghệ Google Maps cho
Mobile
• Android platform là một nền tảng hỗ trợ tối đa cho Google
Maps
• Dễ dàng nhúng nó vào ứng dụng của mình một cách dễ
dàng và hiệu quả
4/20/2016 44
Google Map API
Bổ sung một số quyền vào AndroidManifest.xml
Thư viện OpenGL ES version 2
Thành phần google map API:
• Map Objects
– MapFragment
– MapView
• Map Types
• Map Padding
Google Map API
Map Objects
• Trong giao diện,để hiển thị bản đồ ta sử dụng đối tượng
MapFragment hoặc MapView
• GoogleMap xử lý các tác vụ sau tự động:
– Kết nối với dịch vụ Google Map
– Tải bản đồ
– Hiển thị các ô bản đồ lên màn hình thiết bị
– Hiển thị những điều khiển như pan và zoom
– Hồi đáp lại pan và zoom khi di chuyển bản đồ hoặc phóng to thu nhỏ
• Ngoài các xử lý tự động, ta có thể kiểm soát bản đồ như: xử
lý khi chạm lên bản đồ, vẽ các biểu tượng đánh dấu trên bản
đồ
MapFragment
• Đối tượng MapFragment như một container cho bản đồ, và
cung cấp truy cập vào các đối tượng GoogleMap.
<?xml version="1.0" encoding="utf-8"?>
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
• Khai báo một fragment trong giao diện:
MapView
• Giống như một MapFragment, các MapView đóng
vai trò như một container cho bản đồ, xử lý chức năng
bản đồ thông qua các đối tượng GoogleMap.
• Sdụng các lớp này phải thông qua tất cả phương thứctrong chu kỳ sống của Activity - như onCreate (),
onDestroy (), onResume (), và onPause ()
Map types
Các API Google Maps Android cung cấp bốn loại bản
đồ, cũng như một tùy chọn để không có bản đồ ở tất
cả:
• Normal:
Bản đồ đường đặc trưng. Gồm đường
giao thông, một số tính năng nhân tạo,
và đặc điểm tự nhiên quan trọng như
dòng sông,….
• Hybrid:
Bản đồ được chụp từ vệ tinh, có thêm đường
và nhãn được hiển thị như trạm xe bus,đánh dấu địa
điểm…
GoogleMap map;
...
// Sets the map type to be "hybrid"
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
• Chọn loại bản đồ hiển thị:
Chức Năng Cơ Bản
4/20/2016 55
1. Biến GoogleMap
Biến dùng để điều khiển bản đồ, tác động tới giao diện của
bản đồ. Khởi tạo bằng cách:
GoogleMap mMap = ((SupportMapFragment) getSupportFragmentManager().findF
ragmentById(R.id.map)).getMap();
2. Biến LatLng
Biến để lưu tọa độ 1 điểm, gồm kinh độ và vĩ độ
LatLng latlngPhamHung = new LatLng(21.009642, 105.788684);
4/20/2016 56
3. Phóng to, thu nhỏ bản đồ (Zoom in, zoom out)
Bản đồ có độ zoom từ 0->19, số càng lớn thì bản đồ càng phóng
to
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlngPhamHung, 16
));
Chức Năng Cơ Bản
4. Đánh dấu 1 điểm trên bản đồ
Để đánh dấu điểm trên bản đồ và khi người dùng chạm
vào điểm đánh dấu sẽ hiện lên 1 khung nhỏ ghi tên đường
thì làm như sau:
mMap.addMarker(new MarkerOptions().position(latlngPhamHung).title("Phạm Hù
ng"));
Google Directions API
• Để tính toán đường đi giữa hai địa điểm, baogồm cả cách đi (lộ trình), thời gian và khoảngcách ngắn nhất, ta có thể dùng Google Maps API Direction Service
Direction - Request
• http://maps.googleapis.com/maps/api/directions/output?parameters
Output:• JSON• XML
Direction - Request
• Required:
• origin: Địa chỉ hoặc tọa độ địa lý (latitude/longitude) từ
nơi cần tính đường đi (nguồn).
• destination: Địa chỉ hoặc tọa độ địa lý
(latitude/longitude) nơi cần đến (đích).
• sensor:
Direction - Request
• Optional:• mode: Xác định cách thức di chuyển (driving,
walking, bicycling) để tính đường đi cho phù hợp
• language: Ngôn ngữ thể hiện trong kết quả• …
Direction – Request
• Ví dụ:https://maps.googleapis.com/maps/api/directions/json?origin=10.819742431522862,106.62718333303928&destination=10.833911896665953,106.62622578442097&sensor=false
Direction – Response
• Một route bao gồm cả lộ trình đường đi màu xanh ở trên.
• Từ A đến B là một leg, và từ B đến C là một leg.
• Một step là một đoạn đường, trên hình là từ A đến 2.Vo Van Ngan là một step.
Direction – ResponseTên thuộc tính Giá trị và ý nghĩa
status
OK Kết quả trả về hợp lệ
NOT_FOUNDNguồn, đích hoặc một trong các điểm
trung gian không xác định được
ZERO_RESULT Không tìm được đường đi nào
MAX_WAYPOINTS
_EXCEEDED
Có quá nhiều waypoint được cung cấp
trong request. Số waypoint tối đa là 8.
INVALID_REQUEST Request không hợp lệ
OVER_QUERY_LIMITQuá số request bị giới hạn trong một
khoảng thời gian
REQUEST_DENIED Bị từ chối yêu cầu bởi nhà cung cấp
UNKNOWN_ERRORRequest không được xử lý bởi lỗi
server, có thể thử lại sẽ thành công.
routes Là một mảng các “lộ trình” mà server tìm được để đi từ điểm gốc tới đích.
Direction – Response - Routes
Tên thuộc tính Giá trị và ý nghĩa
summaryMột chuỗi mô tả ngắn gọn về lộ trình. Có thể dùng để đặt tên cho
lộ trình.
legs[]
Một mảng chứa những thông tin về một nhánh đi giữa hai địa
điểm trong lộ trình. Một lộ trình nếu không được cung cấp các
waypoint thì chỉ có 1 leg.
waypoint_orderChứa một mảng các waypoint theo thứ tự trong các waypoint
được tính toán trong route.
overview_polylineChứa đối tượng giữ một mảng những points được mã hóa và
levels thể hiện đường đi gần đúng của kết quả.
bounds Đường bao chứa lộ trình (route) trên bản đồ.
copyrights Chuỗi thể hiện bản quyền của lộ trình.
warnings[] Mảng các cảnh báo có thể xảy ra trong lộ trình.
Direction – Response - Legs
Tên thuộc tính Ý nghĩa
steps[]Mảng các step. Mỗi step là một tập các thông tin trên một đoạn
đường trong lộ trình.
distance Tổng khoảng cách trong một leg.
durationTổng thời gian trong một leg. Thời gian này được tính toán dựa
theo travel_mode cung cấp trong request.
start_location Tọa độ điểm bắt đầu trên leg
end_location Tọa độ điểm đích trên leg
start_address Địa chỉ điểm bắt đầu bằng chữ dựa vào start_location
end_address Địa chỉ điểm đích bằng chữ dựa vào end_location
Direction – Response - Steps
Tên thuộc tính Ý nghĩa
html_instructionHướng dẫn đi bằng lời trên đoạn này, đã được định
dạng theo html.
distanceTổng khoảng cách trên một step (đoạn đường). Cũng có
2 thuộc tính con giống distance trong leg.
durationTổng thời gian trong một step. Cũng có 2 thuộc tính con
giống duration trong leg.
start_location Điểm bắt đầu của một step
end_location Điểm kết thúc của một step