Trong đó ta thấy nổi bật nhất hiện nay đó là công nghệ di động,các ứng dụng trên di động.Từ ý nghĩa trên nhóm đã quyết định nghiên cứu và xây dựng một ứng dụng ápdụng công nghệ đi động đ
Trang 1KHÓA LUẬN TỐT NGHIỆP
NGHIÊN CỨU GOOGLE MAP API VÀ XÂY DỰNG ỨNG DỤNG TRÊN ANDROID
Trang 2cũng ngày càng tăng, đặc biệt là nhu cầu về việc sử dụng công nghệ hỗ trợ cho cuộcsống hằng ngày Nắm bắt được nhu cầu đó mà các công ty không ngừng đổi mới, tạo ranhiều công nghệ hơn Trong đó ta thấy nổi bật nhất hiện nay đó là công nghệ di động,các ứng dụng trên di động.
Từ ý nghĩa trên nhóm đã quyết định nghiên cứu và xây dựng một ứng dụng ápdụng công nghệ đi động để đơn giản hóa việc tìm đường, tra cứu thông tin trên bản đồ.Với ứng dụng này người sử dụng có thể dễ dàng biết được vị trí của mình, cũng nhưtìm đường đi và địa điểm một cách nhanh chóng và chính xác tại bất kỳ nơi nào Ứngdụng đặc biệt thích hợp với khách du lịch vì chỉ cần cài đặt ứng dụng trên chiếc điệnthoại của mình là có thể sử dụng được
Khóa luận “Nghiên cứu Google Map Api và xây dựng ứng dụng trên
Android” bao gồm 8 chương:
Chương 1: Giới thiệu: Giới thiệu khái quát về khóa luận và mục đích của khóa
luận
Chương 2: Tổng quan hệ điều hành Android.
Chương 3: Kiến trúc và thành phần hệ điều hành Android.
Chương 4: Google Map API & các dịch vu Google Map trên Anroid.
Chương 5: Giới thiệu phần mềm MapPro.
Chương 6: Phân tích thiết kế hệ thống.
Chương 7: Thiết kế giao diện.
Chương 8: Đánh giá kết quả và kết luận.
Trang 3giúp đỡ rất nhiều từ quý thầy cô Trước hết, nhóm xin gửi lời tri ân sâu sắc nhất đếnquý thầy cô khoa Công nghệ phần mềm, cũng như quý thầy cô của các khoa và bộ môntrường Đại học Công nghệ thông tin - ĐHQG HCM đã nhiệt tình truyền đạt kiến thức
và các kinh nghiệm thực tế, đặc biệt là Thầy PGS.TS Vũ Thanh Nguyên và Thầy TrầnAnh Dũng, người đã hết sức quan tâm và nhiệt tình hướng dẫn nhóm hoàn thành bàikhóa luận này
Cuối cùng, nhóm xin gửi lời chúc sức khỏe và thành công đến quý thầy cô trườngĐại học Công nghệ thông tin
Mặc dù nhóm đã rất cố gắng nhưng trong quá trình làm khóa luận sẽ không tránhkhỏi những thiếu sót Rất mong nhận được sự góp ý quý báu của quý thầy cô và bạn bè
để khóa luận được hoàn chỉnh hơn
Thành phố Hồ Chí Minh, ngày 31 tháng 12 năm 2011
Nhóm thực hiện
Nguyễn Minh Tuấn – Trương Duy
Trang 4
Trang 5
Trang 6
LỜI MỞ ĐẦU
LỜI CẢM ƠN
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN
MỤC LỤC
DANH SÁCH BẢNG BIỂU
DANH MỤC HÌNH VẼ
Chương 1 GIỚI THIỆU 1
1.1 Giới thiệu đề tài 1
1.2 Mục tiêu đề tài 2
Chương 2 TỔNG QUAN HỆ ĐIỀU HÀNH ANDROID 3
2.1 Khái niệm 3
2.2 Đặc điểm 4
2.2.1 Tính mở 4
2.2.2 Tính ngang hàng của các ứng dụng 4
2.2.3 Phá vỡ rào cản phát triển ứng dụng 5
2.2.4 Dễ dàng và nhanh chóng xây dựng ứng dụng 5
2.3 Ưu và nhược điểm của Android so với các hệ điều hành khác 5 Chương 3 KIẾN TRÚC VÀ THÀNH PHẦN ANDROID 7 3.1 Kiến trúc của nền tảng Android 7 3.1.1 Kiến trúc tổng quát 7
3.1.2 Hệ điều hành 7
3.1.3 Thư viện và các giao diện lập trình ứng dụng 7
3.2 Các thành phần của ứng dụng 12 3.2.1 Hoạt động (Activity) 13
3.2.2 Service 16
Trang 73.2.7 Tập tin khai báo (manifest) 20
3.2.8 Bộ lọc Intent 22
3.3 Công cụ hỗ trợ lập trình Android 23 3.3.1 Tổng quan 23
3.3.2 Tạo máy ảo trên android 25
3.3.3 Xuất bản phần mềm chạy trên android 26
Chương 4 GOOGLE MAP API VÀ CÁC DỊCH VỤ GOOGLE MAP TRÊN ANDROID 30 4.1 Đăng ký API Key từ Google Maps 31 4.1.1 Giới thiệu 31
4.1.2 Lấy mã MD5 32
4.1.3 Lấy key Google Maps API 33
4.2 Các tham số truy cập trong Google Maps 33 4.2.1 Các tham số chung 33
4.2.2 Chế độ tìm kiếm 35
4.2.3 Vị trí 36
4.2.4 Hiển thị bản đồ 37
4.2.5 Dẫn đường 37
4.2.6 Quản lý thông tin đầu ra 38
4.3 File thông tin KML 39 4.3.1 Placemark 39
4.3.2 Đường đi (Path) 40
4.3.3 Truy xuất thông tin dữ liệu từ file KML 42
4.4 Một số API phổ biến của Google Maps trên Android 51 4.4.1 Lớp GeoPoint 51
4.4.2 OverlayItem & ItemizedOverlay 52
4.4.3 Lớp MapController 56
4.4.4 MapView & MapActivity 60
Trang 85.2 Kiến trúc phần mềm 72
5.2.1 Phần mềm cài đặt trên điện thoại 725.2.2 Hệ thống máy chủ 72
Chương 6 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 74
6.1 Sơ đồ Use-Case tổng quát 74
Chương 7 THIẾT KẾ GIAO DIỆN 86
7.1 Thiết kế giao diện86
7.1.1 Danh sách màn hình 867.1.2 Mô tả chi tiết từng màn hình 86
Chương 8 ĐÁNH GIÁ KẾT QUẢ VÀ KẾT LUẬN 96
8.1 Đánh giá luận văn 96
8.2 Đánh giá ứng dụng 96
8.2.1 Kết quả đạt được 968.2.2 Hạn chế 97
8.3 Hướng phát triển 97
8.4 Kết luận 97
TÀI LIỆU THAM KHẢO 98
Trang 9Bảng 4.2: Các tham số truy xuất vị trí 37
Bảng 4.3: Các phương thức trong lớp GeoPoint 51
Bảng 4.4: Các thành phần lớp OverlayItem 54
Bảng 4.5: Các phương thức lớp OverlayItem 55
Bảng 4.6: Phương thức khởi tạo lớp ItemizedOverlay 55
Bảng 4.7: Các phương thức tạo lớp ItemizedOverlay 56
Bảng 4.8: Các phương thức lớp MapController 60
Bảng 4.9: Phương thức khởi tạo lớp MapView 65
Bảng 4.10: Các phương thức lớp MapView 68
Bảng 4.11: Các phương thức lớp MapActivity 70
Bảng 4.12 Các phương thức lớp MyLocationOverlay 71
Bảng 6.1: Danh sách actor 75
Bảng 6.2: Danh sách use-case 75
Bảng 7.1: Danh sách các màn hình 86
Trang 10Hình 1.1: Một số công nghệ bản đồ hiện nay 1
Hình 2.1: Một số điện thoại sử dụng Android 3
Hình 3.1: Nhân Linux trên Android 7
Hình 3.2: Thư viện lập trình ứng dụng trên Android 8
Hình 3.3: Khung ứng dụng trên Android 11
Hình 3.4: Các ứng dụng trên Android 12
Hình 3.5 Vòng đi của một hoạt động 15
Hình 3.6: Sơ đồ chuyển trạng thái của Service 17
Hình 3.7: Tạo máy ảo 25
Hình 3.8: Khởi tạo máy ảo 26
Hình 3.9: Xuất bản phần mềm trên Android 27
Hình 3.10: Nhập thông số cần thiết 27
Hình 3.11: Thiết lập tên cho file apk 28
Hình 3.12: Nhập password 29
Hình 4.1: Hình ảnh nhìn từ vệ tinh trên Google Maps 30
Hình 4.2: Ví dụ chế độ hiển thị trên bản đồ 61
Hình 5.1: Kiến trúc phần mềm MapPro 73
Hình 6.1: Sơ đồ use-case tổng quát 74
Hình 6.2: Biểu đồ tuần tự cho chức năng tìm kiếm địa điểm 81
Hình 6.3: Biểu đồ tuần tự cho chức năng tìm kiếm đường đi 82
Hình 6.4: Biểu đề tuần tự cho chức năng tìm kiếm theo địa chỉ và hiển thị vị trí hiện tại 83
Hình 6.5: Biểu đồ lớp chi tiết cho tìm kiếm địa điểm 84
Hình 6.6: Biểu đồ lớp chi tiết cho tìm kiếm đường đi 84
Hình 6.7: Biểu đồ lớp chi tiết cho tìm kiếm theo địa chỉ và vị trí hiện tại 85
Hình 7.1: Màn hình chính 87
Hình 7.2: Màn hình bản đồ 88
Hình 7.3: Màn hình menu địa điểm 89
Hình 7.4: Màn hình nhập vị trí 90
Hình 7.5: Màn hình hiển thị địa điểm trên danh sách 91
Hình 7.6: Màn hình hiển thị địa điểm trên bản đồ 92
Hình 7.7: Màn hình nhập thông tin dẫn đường 93
Hình 7.8: Màn hình thông tin dẫn đường trên danh sách 94
Hình 7.9: Màn hình thông tin dẫn đường trên bản đồ 95
Trang 11Chương 1 GIỚI THIỆU 1.1 Giới thiệu đề tài
Ngày nay với sự phát triển mạnh mẽ của công nghệ bản đồ thì việc tìm kiếmthông tin cũng như định vị trên bản đồ ngày càng dễ dàng dàng hơn Không những thếviệc ứng dụng công nghệ này trên thiết bị di động cũng là một xu hướng tất yếu Trênthực tế đã có nhiều hãng phần mềm hỗ trợ công nghệ này, chúng ta không khó nhận ra
đó là các ứng dụng như: Bing Maps của hãng phần mềm Microsoft, Yahoo! Maps củahãng phần mềm Yahoo, Trendsmap của mạng xã hội twitter…Trong đó đáng chú ýnhất là Google Maps của hãng phần mềm tìm kiếm hàng đầu thế giới là Google Khôngnhững hỗ trợ đầy đủ các dạng bản đồ như: Earth, Satellite, Traffic, Weather….mà còn
hỗ trợ bản đồ trên Android
Hình 1.1: Một số công nghệ bản đồ hiện nay
Giống như công nghệ bản đồ, công nghệ di động trên các smartphone cũng khôngkém phần sôi động với sự tham gia của các hãng lớn như: RIM, Nokia, Samsung,Apple, Google, Microsoft… Không chỉ là một chiếc điện thoại bình thường, cácsmartphone còn có thể hoạt động giống như một chiếc máy tính mini với nhiều côngnghệ hiện đại được tích hơp như: GPS, Web, E-mail, Office…
Trang 12Nhận thấy xu hướng phát triển đó nhóm đã có ý tưởng kết hợp hai công nghệ nàyvới nhau để tạo ra một ứng dụng tìm kiếm và dẫn đường trên hệ điều hành Android vớitên “MapPro”.
“MapPro” là một ứng dụng bản đồ dựa trên Map APIs trên thiết bị Android củaGoogle Maps
1.2 Mục tiêu đề tài
Tìm hiểu các vấn đề xung quanh Google Map APIs và các dịch vụ mà GoogleMaps hỗ trợ đặc biệt là các ứng dụng trên Android Tìm hiểu hệ điều hành và cách xâydựng trên hệ đều hành Android
Áp dụng kiến thức tìm hiểu được xây dựng hệ thống chạy trên hệ điều hànhAndroid để giải quyết các vấn đề sau:
Tìm kiếm thông tin xung quanh vị trí hiện tại như: ATM, nhà hàng, khách sạn,trường học, nhà sách…, tìm kiếm theo địa chỉ được cho sẵn
Tìm kiếm địa điểm và địa chỉ trên bản đồ
Hướng dẫn đường đi
Tính toán lộ trình và thời gian đường đi
Định vị người dùng
Trang 13Chương 2 TỔNG QUAN HỆ ĐIỀU HÀNH ANDROID 2.1 Khái niệm
Hình 2.2: Một số điện thoại sử dụng Android
Android được phát triển bởi tập đoàn Google, phiên bản đầu tiên ra đời năm
2008 Được xây dựng trên một nền tảng mở, và một bộ thư viện đa năng, mạnh mẽ vớinguyên lý mở, Android đã nhanh chóng được cộng đồng lập trình viên di động hưởngứng mạnh mẽ Nền tảng Android tích hợp nhiều tính năng nổi bật:
Android là một hệ điều hành nhân Linux, đảm bảo sự tương tác với các phầncứng, quản lý bộ nhớ, điều khiển các tiến trình tối ưu cho các thiết bị di động
Bộ ứng dụng khung cho phép sử dụng lại và thay thế các thành phần riêng lẻ
Máy ảo Dalvik được tối ưu cho các thiết bị di động, chạy các ứng dụng lậptrình trên ngôn ngữ Java
Các thư viện cho phát triển ứng dụng mã nguồn mở bao gồm SQLite, WebKit,OpenGL và trình quản lý đa phương tiện
Hỗ trợ các chuẩn đa phương tiện phổ biến, thoại trên nền GSM, BluetoothEDGE, 3G và Wifi
Trang 14 Hỗ trợ Camera, GPS, la bàn, máy đo gia tốc…
Bộ phát triển ứng dụng SDK đầy đủ gồm thiết bị giả lập, công cụ sửa lỗi, tíchhợp với Eclipse SDK
Android cung cấp một tập hợp đầy đủ các phần mềm cho thiết bị di động baogồm: hệ điều hành, các khung ứng dụng và các ứng dụng cơ bản
2.2 Đặc điểm
2.2.1 Tính mở
Android được xây dựng từ dưới đi lên cho phép người phát triển tạo các ứngdụng di động hấp dẫn với đầy đủ các điểm mạnh của các thiết bị cầm tay hiện có.Android hoàn toàn mở, một ứng dụng có thể gọi tới bất kể một chức năng lõi của điệnthoại như tạo cuộc gọi, gửi tin nhắn hay sử dụng máy ảnh, cho phép người phát triểntạo phong phú hơn, liên kết hơn các tính năng cho người dùng Android được xây dựngtrên nhân Linux mở Thêm nữa, nó sử dụng một máy ảo mà đã được tối ưu hóa bộ nhớ
và phần cứng với môi trường di động Android là một mã nguồn mở, nó có thể được
mở rộng để kết hợp tự do giữa các công nghệ nổi trội Nền tảng này sẽ tiếp tục pháttriển bởi cộng đồng phát triển để tạo ra các ứng dụng di động hoàn hảo
2.2.2 Tính ngang hàng của các ứng dụng
Với Android, không có sự khác nhau giữa các ứng dụng điện thoại cơ bản vớiứng dụng của bên thứ ba Chúng được xây dựng để truy cập như nhau tới một loạt cácứng dụng và dịch vụ của điện thoại Với các thiết bị được xây dựng trên nền tảngAndroid, người dùng có thể đáp ứng đầy đủ các nhu cầu mà họ thích Chúng ta có thểđổi màn hình nền, kiểu gọi điện thoại, hay bất kể ứng dụng nào Chúng ta thậm chí cóthể hướng dẫn điện thoại chỉ xem những ảnh mình thích
Trang 152.2.3 Phá vỡ rào cản phát triển ứng dụng
Android phá vỡ rào cản để tạo ứng dụng mới và cải tiến Một người phát triển cóthể kết hợp thông tin từ trang web với dữ liệu trên điện thoại cá nhân – chẳng hạn nhưdanh bạ, lịch hay vị trí trên bản đồ – để cung cấp chính xác hơn cho người khác VớiAndroid, người phát triển có thể xây dựng một ứng dụng mà cho phép người dùng xem
vị trí của những người bạn và thông báo khi họ đang ở vị trí lân cận Tất cả được lậptrình dễ dàng thông qua sự hỗ trợ của MapView và dịch vụ định vị toàn cầu GPS
2.2.4 Dễ dàng và nhanh chóng xây dựng ứng dụng
Android cung cấp bộ thư viện giao diện lập trình ứng dụng đồ sộ và các công cụ
để viết các ứng dụng phức tạp Ví dụ, Android có thể cho phép người phát triển biếtđược vị trí của thiết bị và cho phép các thiết bị giao tiếp với nhau để có thể tạo nênmạng xã hội chia sẻ ngang hàng rộng khắp Thêm nữa, Android còn bao gồm một bộcông cụ đầy đủ giúp cho việc phát triển trở nên dễ dàng
2.3 Ưu và nhược điểm của Android so với các hệ điều hành khác
Android Google Android là nền tảng mở, cho
phép người dùng có thể tùy biến nền
tảng theo ý thích, hơn nữa lại có một
Liên minh thiết bị cầm tay mở hậu
thuẫn, Google Android đang là đối thủ
xứng tầm của iPhone của Apple
sợ vi phạm bản quyền vớiiPhone), giao diện không bắtmắt, khả năng hỗ trợ bộ nhớkém iPhone, không đồng bộđược với máy tính Hi vọngtrong thời gian tới Google sẽsớm khắc phục những nhượcđiểm này
Trang 16(Linux, Windows hay Mac OS) do chạy
trên máy ảo Java Thư viện ngày càng
hoàn thiện, dễ dàng cho người lập trình
Window
s Mobile
Có thư viện API khá giống với API trên
Win32, các công cụ hỗ trợ lập trình đầy
đủ với Visual Studio, điều này làm cho
những người phát triển trên Win32
không mất công tìm hiểu lại các API và
các công cụ lập trình
Sự có mặt của iPhone vàAndroid là hai trở ngại lớn vớiWindows Mobile Hai nền tảngnày đang hoàn thiện và đượcngười dùng rất ưa chuộng
iPhone Màn hình cảm ứng đa điểm: iPhone
sử dụng hoàn toàn bằng cảm ứng và
không sử dụng các nút Với iPhone ta
có thể điều khiển trên màn hình kể cả
việc trượt của các ngón tay Ta có thể
phóng to ảnh bằng cách trượt hai ngón
tay ra xa và thu nhỏ bằng cách ngược
lại
Bộ cảm nhận gia tốc: Những phản ứng
nhanh chóng của bộ cảm nhận gia tốc
thay đổi độ phân giải màn hình từ dọc
sang ngang tự động khi ta đặt điện thoại
nằm ngang Điều này làm sinh động
thêm cho các trò chơi Âm thanh, hình
ảnh hoàn hảo
Không gửi được tin nhắn đaphương tiện (MMS) và IM(Instant Messaging), thiếu bộnhớ mở rộng Việc lập trình trêncho iPhone phải thực hiện trên
hệ điều hành Mac, do đó khôngphải ai cũng có thể lập trình choiPhone Hơn thế, nếu muốn đưachương trình ra máy thật ngườilập trình phải trả một khoản phílập trình, điều này làm giảm tínhcạnh tranh so với các đối thủkhác
Bảng 2.1: So sánh các hệ điều hành
Trang 17Chương 3 KIẾN TRÚC VÀ THÀNH PHẦN ANDROID
3.1 Kiến trúc của nền tảng Android
Hình 3.3: Nhân Linux trên Android
Android sử dụng nhân Linux 2.6 làm nhân cho các dịch vụ hệ thống như bảo mật,quản lý bộ nhớ, quản lý tiến trình (xử lý tiến trình, đa luồng), ngăn xếp mạng và trìnhđiều khiển thiết bị (giao tiếp USB, giao tiếp hồng ngoại, không đây, v.v…) NhânLinux này cũng có vai trò như một lớp trừu tượng giữa phần cứng và phần mềm
3.1.3 Thư viện và các giao diện lập trình ứng dụng
Android có một thư viện khá phong phú cung cấp sẵn để người lập trình có thể sửdụng Hình sau là sơ đồ tóm tắt về hệ thống thư viện này
Trang 18Hình 3.4: Thư viện lập trình ứng dụng trên Android
3.1.3.1 Android runtime
Android có một tập các thư viện nòng cốt để cung cấp hầu hết các chức năng sẵn
có trong thư viện cốt lõi của ngôn ngữ lập trình Java Android Runtime: Bao gồm máy
ảo Dalvik và các thư viện Android
Các thư viện cơ bản: Các ứng dụng Android được phát triển trên môi trường Java,nhưng Dalvik lại không phải là một Java VM Các thư viện cơ bản của Android cungcấp hầu hết các chức năng có trong thư viện cơ bản của Java cũng như là thư viện riêngcủa Android
Máy ảo Dalvik: Dalvik là máy ảo để chạy các ứng dụng trên Android, đã được tối
ưu để đảm bảo rằng một thiết bị có thể chạy được nhiều Instance một cách hiệu quả
Nó dựa vào nhân Linux để thực hiện đa luồng và quản lý bộ nhớ cấp thấp
3.1.3.2 Bộ thư viện
Android cung cấp một số các APIs cho phát triển ứng dụng Danh sách các API
cơ bản sau được cung cấp bởi tất cả các thiết bị trên nền Android:
Trang 19 android.util: Gói tiện ích cơ bản bao gồm nhiều lớp mức thấp như là cáclớp quản lý (List, Stack…) lớp xử lý chuỗi, lớp xử lý XML.
android.os: Gói hệ điều hành cung cấp truy cập đến các dịch vụ cơ bản như
là chuyển tin nhắn, thông tin chéo, đồng hồ và gỡ lỗi
android.graphics: Cung cấp các lớp đồ họa mức thấp thực hiện các chứcnăng đồ họa, màu, vẽ cơ bản
android.text: Công cụ hiển thị và xử lý văn bản
android.database: Cung cấp các lớp mức thấp bắt buộc cho việc điềukhiển cursor khi làm việc với các cơ sở dữ liệu
android.content: Các giao tiếp lập trình nội dung được dùng để quản lýtruy cập dữ liệu và xuất bản bằng cách cung cấp các dịch vụ thao tác với tàinguyên, Content Provider, và các gói
android.view: View là lớp giao diện người dùng cơ bản nhất Tất cả giaodiện người dùng được tạo ra đều phải sử dụng một tập các View để cung cấpcho các thành phần tương tác người dùng
android.widget: Xây dựng dựa trên gói View Những lớp widget nhữngthành phần giao diện được tạo sẵn được sử dụng để tạo nên giao diện ngườidùng Các widget bao gồm danh sách, nút bấm, hộp nhập, các kiểu trình bày(layout)
com.google.android.maps: Bộ API mức cao cung cấp truy cập đến điềukhiển bản đồ sẵn trong Android từ ứng dụng được xây dựng Bao gồm cả lớp
MapView cũng như Overlay và MapController để tương tác với bản đồ bêntrong ứng dụng
Trang 20 android.app: Một gói thư viện bậc cao, cung cấp truy cập đến dữ liệu củaứng dụng Gói ứng dụng cũng bao gồm lớp Activity và Service là thành phần
cơ bản của mọi ứng dụng Android
android.provider: Để tạo thuận lợi cho người phát triển truy cập đến cácContent Provider tiêu chuẩn (như là dữ liệu danh bạ), gói cung cấp (Provider)bao gồm các lớp cho phép truy cập đến cơ sở dữ liệu chuẩn trong tất cả cácbản phân phối Android
android.telephony: Các API điện đàm cung cấp khả năng tương tác trựctiếp với tầng điện thoại trong các thiết bị, cho phép tạo, nhận, theo dõi cáccuộc gọi, tình trạng các cuộc gọi và tin nhắn SMS
android.webkit: Gói WebKit cung cấp các API để làm việc với các nộidung Web-based bao gồm một lơp WebView để tạo ra giao diện web, nhúngtrong ứng dụng và một trình quản lý cookie
Cùng với các API của Android, còn có một tập các thư viện C/C++ như:
OpenGL: Thư viện dùng để tạo ra các đồ họa 3D dựa vào chuẩn OpenGLES
1.0 API
FreeType: Hỗ trợ xử lý bitmap và font vector.
GGL: Thư viện cơ bản, dùng để cung cấp các engine đồ họa 2D.
Libc: Thư viện C chuẩn, được tối ưu cho các thiết bị Linux-based.
SQLite Engine: Cơ sở dữ liệu quan hệ gọn nhẹ, dùng để lưu trữ dữ liệu của
ứng dụng
SSL: Hỗ trợ sử dụng giao thức mã hóa Secure Sockets Layer trong bảo mật
truyền thông Internet
Trang 21Ngoài các thư viện chuẩn của Android, để đáp ứng tiêu chí phù hợp với nhiềuthiết bị khác nhau, Android còn có thể có các API phụ thuộc thiết bị như
android.location, android.media, android.opengl, android.hardware,
android.bluetooth, android.net.wifi, và android.telephony
3.1.3.3 Khung ứng dụng trên Android
Hình 3.5: Khung ứng dụng trên Android
Kiến trúc của Android khuyến khích khái niệm thành phần sử dụng lại, cho phépcông bố và chia sẻ các Activity, Service, dữ liệu, với các ứng dụng khác với quyền truycập được quản lý bởi khai báo
Cơ chế đó cho phép người lập trình tạo ra một trình quản lý danh bạ hoặc trìnhquay số điện thoại mà có các thành phần người khác có thể tạo mới giao diện và mởrộng chức năng thay vì tạo lại chúng
Những dịch vụ sau là những dịch vụ kiến trúc cơ bản nhất của tất cả các ứngdụng, cung cấp một framework cho mọi mọi phần mềm được xây dựng:
Actitvity Manager: Điều khiển vòng đời của các Activity bao gồm cả quản lý
các tầng Activity
Views: Được sử dụng để tạo lập các giao diện người dùng cho các Activity.
Notification Mamager: Cung cấp một cơ chế cố định và quy củ cho việc gửi
các thông báo đến người dùng
Content Provider: Cho phép ứng dụng chia sẻ dữ liệu giữa các ứng dụng.
Trang 22 Resource Manager: Hỗ trợ các thành phần không thuộc mã nguồn như là
chuỗi ký tự, đồ họa được đặt bên ngoài
3.1.3.4 Ứng dụng
Hình 3.6: Các ứng dụng trên Android
Đây là lớp trên cùng của kiến trúc nền tảng Android Android sẽ hoạt động vớimột bộ các ứng dụng bao gồm ứng dụng thư điện tử, gửi tin nhắn, lịch, bản đồ, trìnhduyệt web, danh bạ v.v… Tất cả các ứng dụng được viết bằng ngôn ngữ Java Các ứngdụng này có thể được cung cấp sẵn hoặc được phát triển bởi những lập trình viên
Các thành phần này không nhất thiết phải có mặt đầy đủ trong ứng dụng Chúng
ta có thể xem các thành phần nào được sử dụng trong ứng dụng bằng việc xem khaibáo trong file AndroidManifest.xml
Trang 233.2.1.2 Vòng đời của hoạt động
Các hoạt động trong hệ thống được quản lý bởi một cấu trúc dữ liệu ngăn xếp.Khi có một hoạt động được khởi tạo, nó được đẩy vào trong ngăn xếp, chuyển sangtrạng thái thực thi và hoạt trộng trước đó sẽ chuyển sang trạng thái chờ Hoạt động nàychỉ trở lại trang thái kích hoạt khi mà hoạt động vừa khởi tạo kết thúc việc thực thi.Một Activity có 3 trạng thái chính:
Active hoặc running khi nó ở trên nhất màn hình và nhận tương tác ngườidùng
Paused khi Activity không còn là trọng tâm trên màn hình nhưng vẫn hiệnthị trước người dùng
Stopped khi một Activity hoàn toàn bị che khuất, nó sẽ rơi vào trạng tháiStopped Tuy nhiên, nó vẫn còn lưu trữ toàn bộ thông tin trạng thái Và nóthường bị hệ thống đóng lại khi có tình trạng thiếu bộ nhớ
Trang 24Khi chuyển giữa các trạng thái, ứng dụng sẽ gọi các hàm callback ứng với cácbước chuyển:
void onCreate(Bundle savedInstanceState)
Vòng đời của một hoạt động có thể được thể hiện trong những quá trình sau:
Trang 25Hình 3.7 Vòng đi của một hoạt động
Toàn bộ thời gian sống của một hoạt động bắt đầu từ lời gọi đầu tiên tới phươngthức onCreate(Bundle) tới lời gọi phương thức onDestroy() Trong quá trình này,một hoạt động sẽ khởi tạo lại tất cả các tài nguyên cần sử dụng trong phương thức
onCreate() và giải phóng chúng khi phương thức onDestroy() được thực thi
Thời gian sống có thể nhìn thấy của một hoạt động bắt đầu từ lời gọi tới phươngthức onStart(), cho tới khi phương thức onStop() của nó được thực thi Toàn bộ cáctài nguyên đang được sử dụng bởi hoạt động vẫn tiếp tục được lưu giữ, người dùng cóthể thấy giao diện nhưng không tương tác được với hoạt động do trong qua trình nàyhoạt động không ở trạng thái chạy tiền cảnh
Trang 26Thời gian sống tiền cảnh của một hoạt động là quá trình bắt dầu từ khi có lời gọitới phương thức onResume() và kết thúc bằng lời gọi tới phương thức onPause().Trong thời gian này, hoạt động chạy ở tiền cảnh và có thể tương tác với người dùng.
3.2.2 Service
3.2.2.1 Khái niệm
Một dịch vụ (service) là các đoạn mã được thực thi ngầm bởi hệ thống mà người
sử dụng không thấy được Mỗi service đều được mở rộng từ lớp cơ sở là service tronggói android.app Có thể kết nối tới hoặc kích hoạt một Service thông qua interface
mà Service đưa ra.Ví dụ như một chương trình chơi nhạc, sẽ có vài hoạt động cho phépngười dùng duyệt danh sách các bài hát và lựa chọn bài nào để phát Tuy nhiên, chứcnăng chơi nhạc không được thiết kế như một hoạt động bởi chúng ta sẽ muốn chuyểnqua cửa sổ khác, như khi soạn tin nhắn thì bài nhạc vẫn tiếp tục được chơi Trongtrường hợp này, ứng dụng chơi nhạc sẽ khởi tạo một dịch vụ bằng cách sử dụngphương thức Context.startService().
Một ứng dụng có thể dễ dàng thực hiện liên kết tới một dịch vụ đang chạy (thậmchí khởi động nếu nó chưa thực thi) bằng phương thức Context.bindService() Khi
đó dịch vụ này sẽ cung cấp cho ứng dụng cơ chế để giao tiếp với chúng thông qua giaodiện gọi là IBinder (đối với dịch vụ chơi nhạc có thể cho phép dừng hoặc chuyển quabài nhạc kế tiếp)
3.2.2.2 Vòng đời của một dịch vụ
Vòng đời của một dịch vụ được hiểu là quá trình hoạt động từ khi nó được tạo racho tới khi bị loại khỏi hệ thống Có hai cách thức để một dịch vụ có thể được chạytrong hệ thống:
Trang 27Khi hệ thống có lời gọi tới phương thức Context.startService() Trongtrường hợp này, dịch vụ sẽ được thực hiện liên tục cho tới khi hệ thống gọi phươngthức Context.stopService().
Khi các ứng dụng gọi phương thức Context.bindService() để tạo kết nối vớidịch vụ (dịch vụ sẽ được khởi tạo nếu tại thời điểm đó nó đang không hoạt động) Ứngdụng sẽ nhận được một đối tượng IBinder do dịch vụ trả lại để có thể gọi các phươngthức Callback phù hợp để truy cập tới các trạng thái của dịch vụ Nếu do lời gọi
Context.bindService() mà dịch vụ được khởi tạo thì nó sẽ được thực thi cho tới khinào kết nối trên (tức là đối tượng IBinder) vẫn còn tồn tại
Hình 3.8: Sơ đồ chuyển trạng thái của Service
Trang 283.2.3 Bộ nhận quảng bá (Broadcast receivers)
3.2.3.1 Khái niệm
Bộ nhận quảng bá là một thành phần không làm gì cả nhưng nó nhận và phản hồilại các thông báo quảng bá Nhiều quảng bá có nguồn gốc từ mã hệ thống, ví dụ thôngbáo thay đổi múi giờ, pin yếu, ảnh đã chụp hay thay đổi ngôn ngữ Các ứng dụng cóthể khởi động quảng bá, ví dụ để các ứng dụng khác biết rằng dữ liệu đã được tải vềxong trên thiết bị và sẵn sàng sử dụng
Một ứng dụng có thể có bất kỳ số lượng bộ nhận quảng bá nào để nhận nhữngthông báo quan trọng với nó Tất cả các bộ nhận quảng bá được kế thừa từ lớp
BroadcastReceiver
Bộ nhận quảng bá không có giao diện Tuy nhiên, chúng có thể khởi động mộthoạt động để đáp lại thông tin mà nó nhận được, hay chúng có thể sử dụngNotificationManager để thông báo người dùng biết Các thông báo có thể được sự chú
ý của người dùng theo các cách các nhau như là sáng màn hình, rung thiết bị, bật âmthanh nào đấy… Thông thường, chúng đặt thông báo trên thanh trạng thái, nơi ngườidùng có thể nhận được thông báo
3.2.4 Content Provider
3.2.4.1 Khái niệm
Các ứng dụng có thể lưu trữ dữ liệu của mình trong các tập tin hoặc sử dụng cơ
sở dữ liệu SQLite sẵn có v.v… Content Provider có chức năng cung cấp một tập hợpcác phương thức cho phép một ứng dụng có thể lưu trữ và lấy dữ liệu được quản lý bởicontent provider đó
Content Provider là một đặc trưng riêng của Android, nhờ đó mà các ứng dụng cóthể chia sẻ dữ liệu với nhau một cách dễ dàng
Trang 293.2.5 Các thành phần kích hoạt (các Intent)
Content provider được kích hoạt khi chúng được gọi từ một ContentResolver Bathành phần khác (hoạt động, dịch vụ và bộ nhận quảng bá) được kích hoạt bởi thôngđiệp không đồng bộ từ các intent Một intent là một đối tượng có kiểu Intent chứa nộidung của thông điệp Với các hoạt động và dịch vụ, nó gọi tên hành động được yêu cầu
và xác định URI của dữ liệu tác động tới ở giữa Ví dụ, nó có thể truyền tải một yêucầu cho một hoạt động hiển thị một ảnh cho người dùng hay cho phép người dùng sửavăn bản Với bộ nhận quảng bá, đối tượng Intent gọi tên của hành động được thôngbáo Ví dụ, bộ nhận quảng bá có thể thông báo các phần nó quan tâm là nút chụp ảnh
đã được bấm
Có vài phương thức cho việc kích hoạt mỗi thành phần:
Một hoạt động được khởi chạy thông qua một đối tượng Intent
Context.startActivity() hay Activity.startActivityForResult(). Hoạtđộng đáp lại có thể theo dõi intent được tạo ra đó bằng phương thức getIntent() vàcập nhật thông qua phương thức setIntent(Intent) Android gọi phương thức
onNewIntent() để bỏ qua các intent đến trước nó
Một hoạt động thường bắt đầu hoạt động khác Nếu nó muốn trả lại kết quả hoạtđộng nó đã khởi chạy, nó sẽ gọi phương thức startActivityForResult() thay chophương thức startActivity() Ví dụ, nếu nó khởi chạy một hoạt động mà cho phépngười dùng lấy một ảnh, nó có thể muốn lấy kết quả của ảnh được chọn Kết quả đượctrả về trong một đối tượng Intent thông qua phương thức onActivityResult()
Một dịch vụ được bắt đầu thông qua một đối tượng Intent là
Context.startService(). Android gọi phương thức onStart() của dịch vụ vàthông qua đối tượng Intent của nó
Trang 30Tương tự, một intent có thể thông qua Context.bindService() để thiết lập mộtkết nối liên tục giữa các thành phần và dịch vụ đích Dịch vụ nhận đối tượng Intent qualời gọi onBind() (nếu dịch vụ chưa được chạy, bindService() có thể chọn bắt đầunó) Cho ví dụ, một hoạt động có thể thiết lập kết nối với dịch vụ chơi nhạc đề cập ởphần trước để nó có thể cung cấp cho người dùng giao diện sử dụng để điều khiển chơilại Hoạt động sẽ gọi bindService để thiết lập kết nối và sau đó gọi phương thức đãđịnh nghĩa bởi dịch vụ để áp dụng chơi lại ca khúc.
Một ứng dụng có thể khởi tạo một quảng bá thông qua đối tượng Intent bằngphương thức như Context.setBroadcast(), Context.setOrderedBroadcast() và
Context.sendStickyBroadcast() Android chuyển những intent tới tất cả các bộnhận quảng bá nào quan tâm bằng việc gọi phương thức onReceive() của nó
3.2.6 Ngắt một thành phần
Một hoạt động có thể bị ngắt thông qua việc gọi phương thức finish() Mộthoạt động có thể tắt một hoạt động khác (hoạt động đó được khởi động với lời gọi
startActivityForResult() bằng việc gọi finishActivity()
Để ngắt một dịch vụ chúng ta có thể sử dụng phương thức stopSelf(), hoặcbằng cách gọi Context.stopService().
Content provider được kích hoạt chỉ khi nó đáp lại yêu cầu từ mộtContentResolver Bộ nhận quảng bá được kích hoạt chỉ khi nó đáp lại một thông điệpquảng bá Chúng ta không cần thiết phải tắt các thành phần này
3.2.7 Tập tin khai báo (manifest)
Trước khi có thể khởi chạy một ứng dụng thành phần, nó phải xem ứng dụng baogồm những thành phần nào Thêm nữa, các ứng dụng khai báo các thành phần của nó
Trang 31trong một tập tin khai báo để đóng gói lại vào trong gói Android (tập tin apk chứa các
mã nguồn, tập tin và tài nguyên)
Tập tin này có cấu trúc của tập tin XML và luôn có tên là AndroidManifest.xml
trong mọi ứng dụng Tập tin này thực hiện một số chức năng như thêm và khai báo cácthành phần của ứng dụng, tên các thư viện ứng dụng cần liên kết tới (ngoài thư việnchuẩn của Android) và xác định các quyền cho ứng dụng
Tuy nhiên, nhiệm vụ chính của tập tin khai báo là khai báo các thành phần củaứng dụng Một hoạt động có thể được khai báo như sau:
<?xml version="1.0" encoding="utf-8"?>
<manifest >
<application >
<activity android:name="com.example.project.FreneticActivity" android:icon="@drawable/small_pic.png"
và nhãn được hiển thị cho người dùng
Các thành phần khác được khai báo theo cách tương tự: <service> dịch vụ,
<receiver> bộ nhận quảng bá và <provider> content provider Các hoạt động, dịch
vụ và content provider có thể cùng được khai báo trong tập tin khai báo hoặc có thểđược tạo tự động trong mã (như đối tượng BroadcastReceiver) và được đăng ký với hệthống bằng cách gọi Context.registerReceiver().
Trang 33Bộ lọc thứ hai được khai báo để hoạt động có thể thực thi trên một kiểu dữ liệuđặc biệt.
Một thành phần có thể có bao nhiêu số bộ lọc intent tùy thích, mỗi một cái lạiđược khai báo khác nhau cho các khả năng Nếu nó không có một bộ lọc nào, nó có thểđược được kích hoạt bởi các intent khác gọi đến
Để tạo và đăng ký một bộ nhận quảng bá trong mã nguồn, bộ lọc intent tạo thẳngmột đối tượng giống đối tượng IntentFilter Tất cả các bộ lọc khác đều được cài đặttrong tập tin khai báo
3.3 Công cụ hỗ trợ lập trình Android
3.3.1 Tổng quan
Bộ công cụ phát triển phần mềm Android SDK gồm nhiều công cụ trợ giúp choviệc phát triển ứng dụng di động trên nền tảng Android Thành phần quan trọng nhấtcủa bộ công cụ này là trình giả lập Android và bộ plug-in phát triển ứng dụng Androidtrên Eclipse ADT, bên cạnh đó bộ SDK cũng bao gồm các công cụ khác cho việc gỡrối, đóng gói và cài đặt ứng dụng trên trình giả lập và trên thiết bị
Trình giả lập Android: Thực chất đây là một chương trình mô phỏng một thiết
bị di động ảo trên máy tính Chúng ta có thể sử dụng bộ giả lập này để thiết kế gỡ rối
Trang 34và kiểm tra ứng dụng của mình như trên thiết bị trước khi đưa chương trình vào thiết bịthật.
Android Development Tools Plugin (cho Eclipse): viết tắt là ADT, Plugin này
hỗ trợ cho việc tạo và gỡ rối các ứng dụng và sử dụng môi trường phát triển tích hợpEclipse trở nên dễ dàng hơn
Trình gỡ rối Dalvik Debug Monitor Service (DDMS): giúp quản lý các tiến
trình trong bộ giả lập hoặc thiết bị và trợ giúp việc gỡ rối ứng dụng Có thể sử dụngcông cụ này để hủy các tiến trình, chọn một tiến trình cụ thể để gỡ rối, sinh các dữ liệutruy vết, xem bộ nhớ heap và thông tin về các luồng, chụp ảnh màn hình của trình giảlập
Android Debug Bridge (adb): Công cụ này cho phép cài đặt các tập tin apk trên
bộ giả lập hoặc thiết bị, đồng thời hỗ trợ truy cập hai đối tượng này từ cửa sổ dònglệnh
Android Asset Packaging Tool (aapt): Công cụ để tạo tập tin apk chứa các mã
nhị phân và tài nguyên của một ứng dụng Android
Sqlite3: Đây là công cụ để truy cập các tập tin dữ liệu SQLite được tạo ra và sử
dụng bởi một ứng dụng Android
Dx: Đây là công cụ biên dịch các tập tin class thành mã bytecode chạy trên máy
ảo Dalvik (lưu trữ dưới dạng tập tin dex)
Mksdcard: Giúp tạo một tập tin ảnh lưu trữ dữ liệu mà ta có thể sử dụng trên bộ
giả lập, để mô phỏng sự có mặt của một thẻ nhớ ngoài (như thẻ SD)
Android Virtual Devices (AVD): Cho phép chúng ta có thể tạo cấu hình thiết bị
ảo, mô phỏng các đặc điểm của bộ giả lập Android Với mỗi cấu hình, ta có thể xácđịnh nền tảng cho nó chạy, tùy chỉnh phần cứng hay giao diện sử dụng Mỗi tùy chỉnh
Trang 353.3.2 Tạo máy ảo trên android
Bước 1: Chọn Project, Android SDK and AVD Manager
Hình 3.9: Tạo máy ảo
Virtual Devices: dùng để thiết lập máy ảo, tùy theo nhu cầu về chương trình mà
chúng ta thiết lập các máy ảo khác nhau Trong đó phân biệt làm hai nhóm là máy ảo
để chạy Android và máy ảo chạy Google APIs
Installed packages: các gói packages hỗ trợ máy áo mà chúng ta đã cài đặt Available packages: tùy chọn các gói packages mà bạn muốn sử dụng để thiết
lập máy ảo chẳng hạn android 2.2 hoặc googleAPIs –API level 8 Chúng ta phải cài cácgói packages mới khởi tạo được máy ảo
Bước 2: Chọn New để khởi tạo máy ảo
Trang 36Hình 3.10: Khởi tạo máy ảo
Tùy theo nhu cầu của người lập trình mà tạo các máy ảo cấu hình khác nhau Ởđây chúng ta thiết lập một máy ảo chạy trên nên Android 2.2 với ứng dụng GoogleAPIs - API level 8
Chọn Create AVD sau đó nhập vào máy ảo vừa mới tạo và chọn Start Như vậy
chúng ta đã có một máy ảo để phục vụ cho việc lập trình
3.3.3 Xuất bản phần mềm chạy trên android
Bước 1: Nhấp phải chuột vào project muốn tạo file, chọn Android Tools > Export Signed Application Package Trên màn hình sẽ xuất hiện Export Android
Application, ở khung này chúng ta chọn project để export ra file apk Nếu project
không có lỗi nào chúng ta chọn Next sang màn hình kế tiếp.
Trang 37Hình 3.11: Xuất bản phần mềm trên Android
Đây là lần đầu, nên chúng ta chọn Create new keystore với các thông tin chính:
Location: thư mục để lưu keystore mới, lưu ý khi save tên keystore tên file
phai có dạng [tên file].keystore
Password và Confirm: tạo password và xác nhận lại nó.
Sau đó chọn Next sang màn hình kế tiếp
Bước 2:
Hình 3.12: Nhập thông số cần thiết
Trang 38Ở màn hình này chúng ta thiết lập các thông số cần thiết cho việc lấy mã MD5 để
đăng ký trên trang chủ Google Maps Api, sau khi nhập 5 ô đầu tiên chúng ta nhấn Next
để hoàn tất việc tạo một keystore riêng để chạy trên máy thật
Bước 3:
Hình 3.13: Thiết lập tên cho file apk
Ở đây chúng ta thiết lập tên và thư mục cho file apk cần xuất ra, sau khi chọnxong nhấn Finish để kết thúc
Bước 4: Chúng ta tiến hành lấy mã MD5 và đăng ký trên trang Google Map với
file mappro.keystore và những thông tin vừa mới tạo, sau khi lấy Key mới, chúng tathay thế Key cũ đang dùng trên trong chương trình
Bước 5: Một lần nữa chúng ta lại tiến hành bước 1 nhưng khi tới màn hình
keystore selection, chúng ta lựa chọn Use Existing keytore, chọn lại mappro.keytore
đã tạo ở bước 1 và nhập password vào
Bước 6: Tiếp tục điền password đã đăng ký khi khởi tạo ở bước 2.
Trang 39Hình 3.14: Nhập password
Sau khi nhập xong chúng ta chọn Next.
Bước 7: Như bước 3, vậy chúng ta đã có một file apk hoàn chỉnh Chép file apk
vừa mới tạo ra vào máy ảo và tiến hành chạy trên nó
Trang 40Chương 4 GOOGLE MAP API VÀ CÁC DỊCH VỤ GOOGLE MAP TRÊN
ANDROID
Trong thế giới web ngày nay, các giải pháp bản đồ là một thành phần không thểthiếu Chúng ta sử dụng chúng để thấy vị trí của mọi vật, để tìm vị trí của một địa chỉ,
để lấy về thông tin dẫn đường, và làm nhiều thứ khác Hầu hết thông tin có một vị trí,
và nếu vật nào đó có một vị trí thì nó có thể hiển thị trên một bản đồ
Có một số công ty cung cấp các giải pháp về bản đồ như Yahoo! Maps và BingMaps, nhưng phổ biến nhất vẫn là Google Maps Thực tế theo trangprogrammableweb.com, google maps là API phổ biến nhất trên internet Theo thống kêcủa trang này tháng 5/2010, 43% là sử dụng Google Maps API
Hình 4.15: Hình ảnh nhìn từ vệ tinh trên Google Maps
Phần này sẽ trình bày chi tiết về API của Google Maps cũng như sử dụng và đăng
ký dịch vụ này trên di động cụ thể là trên android