Ngày nay với tốc độ công nghệ ngày một tiên tiến hơn, hiện đại hơn kéotheosự bùng nổ các thiết bị di động thông minh có hỗ trợ GPS và các máy tìnhhiệu năng cao kết nối internet mang lại
Trang 1LỜI CẢM ƠN Trong suốt quá trình thực hiện đồ án tốt nghiệp: “Phát triển ứng dụng định vị tín hiệu GPS và lưu trữ dựa trên công nghệ Google App Engine” ngoài sự cố
gắng hết mình của bản thân, trong quá trình làm đồ án em đã nhận được sự giúp
đỡ tận tình từ phía nhà trường, thầy cô gia đình và bạn bè
Em xin gửi lời cảm ơn sâu sắc đến ThS.Nguyễn Thị Tính mặc dù bận nhiều
công việc nhưng đã dành thời gian hướng dẫn và giúp đỡ em tận tình trong quátrình làm đồ án tốt nghiệp
Em xin chân thành cảm ơn các thầy – cô trường Đại học Công nghệ thông tin vàTruyền thông đã truyền đạt những kiến thức quý báu cho em trong suốt quá trìnhhọc tập
Em cũng xin cảm ơn tới gia đình và bạn bè đã luôn quan tâm, động viên, giúp
đỡ và tạo điều kiện cho em để em có điều kiện tốt nhất để hoàn thành đồ ánnày
Trong quá trình thực hiện đồ án, mặc dù em đã có nhiều cố gắng nhưng dohạn chế về thời gian cũng như kinh nghiệm nên đồ án này còn mắc phải nhữngthiếu sót, rất mong được sự góp ý kiến của các thầy cô và các bạn để ứng dụng mà
đồ án đề cập được hoàn thiện hơn
Em xin chân thành cảm ơn!
Thái nguyên, ngày 10 tháng 06 năm 2012
Sinh viên thực hiện
Phạm Thị Thùy Linh
Trang 2LỜI CAM ĐOAN
Để hoàn thành đồ án tốt nghiệp đúng thời gian quy định và đáp ứng đượcyêu cầu của đề tài, bản thân em đã cố gắng tìm hiểu và nghiên cứu, học tập vàlàm việc trong thời gian dài Em đã tham khảo một số tài liệu được nêu trongphần “Tài liệu tham khảo cùng các diễn đàn, mạng uy tín trên Internet” Nộidung đồ án hoàn toàn không sao chép từ các đồ án khác, không vi phạm bảnquyền tác giả Toàn bộ đồ án là do bản thân em nghiên cứu và xây dựng nên
Em xin cam đoan những lời trên là đúng, nếu có thông tin sai lệch em xinhoàn toàn chịu trách nhiệm trước Hội đồng
Thái Nguyên, ngày 10 tháng 06 năm 2012
Sinh viên thực hiện
Phạm Thị Thùy Linh
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT 5
LỜI MỞ ĐẦU 6
CHƯƠNG 1: TÌM HIỂU VỀ ANDROID VÀ CÔNG NGHỆ LẬP TRÌNH ANDROID 8
1.1 Giới thiệu về hệ điều hành Android 8
1.2 Kiến trúc Android 8
1.2.1 Tầng Application 9
1.2.2 Tầng Application framework 9
1.2.3 Tầng Libraries và Runtime Android 10
1.3 AVD và Emulator 11
1.3.1 AVD (Android Virtual Device) 12
1.3.2 Android emulator và những hạn chế 12
1.4 Cấu trúc một ứng dụng Android 13
1.4.1 Activity 13
1.4.2 HTTP 15
1.4.3 Intent 16
1.4.4 Service 17
1.4.5 View 20
1.4.6 Widget 20
1.5 Lưu trữ dữ liệu 23
1.6 Android Location API và Google Maps 27
1.6.1 Android Location API 27
1.6.2 Google Maps 29
1.7 Android Market 30
CHƯƠNG 2: TÌM HIỂU CÔNG NGHỆ GAE CỦA GOOGLE 32
2.1 Công nghệ điện toán đám mây 32
2.1.1 Khái quát 32
2.1.2 Ưu và nhược điểm của điện toán đám mây 33
2.1.3 Cấu trúc và cách thức hoạt động của điện toán đám mây 35
2.1.4 Mô hình điện toán đám mây 36
2.2 Google App Engine 38
Trang 42.2.1 Giới thiệu 38
2.2.2 Các thành phần chính của GAE 39
2.2.3 Lưu trữ dữ liệu 42
CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG ANDROID GHI LẠI DỮ LIỆU CHUYỂN ĐỘNG VÀ LƯU TRỮ TRÊN GAE 47
3.1 Xây dựng ứng dụng Android ghi lại dữ liệu chuyển động 47
3.1.1 Môi trường lập trình Android 47
3.1.2 Yêu cầu phần cứng và cài đặt Eclipse 47
3.1.3 Phân tích thiết kế phần mềm 48
3.1.4 Demo chương trình 56
3.2 Mô hình lưu trữ dữ liệu trên GAE 59
3.2.1 Môi trường chạy GAE 59
3.2.2 Yêu cầu phần cứng và cài đặt Eclipse 60
3.2.3 Phân tích cơ sở dữ liệu 60
3.2.4 Lược đồ cơ sở dữ liệu: 60
3.2.5 Demo chương trình lưu trữ trên GAE 61
KẾT LUẬN 63
TÀI LIỆU THAM KHẢO 64
PHỤ LỤC 65
Trang 5DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT
GPS Global Positioning System
LBS Location-based services
API Application Program Interface
SDK Software Development Kit
DVK Dalvik Virtual Machine
NMEA National Marine Electronics Association
OHA Open Handset Alliance
ADT Android Development Tool
AVD Android Virtual Device
LỜI MỞ ĐẦU
Tính cấp thiết của đồ án
Trang 6Ngày nay với tốc độ công nghệ ngày một tiên tiến hơn, hiện đại hơn kéotheosự bùng nổ các thiết bị di động thông minh có hỗ trợ GPS và các máy tìnhhiệu năng cao kết nối internet mang lại nhiều lợi ích cho người dùng trên khắpthế giới.
Tuy nhiên, các dịch vụ như là người dùng muốn biết vị trí của mình đang
ở đâu,người lái xe muốn trợ giúp tìm cây xăng gần nhất, người rút tiền muốn tìmcây ATM gần nhất, hoặc cao hơn là dịch vụ hỗ trợ hãng bay sếp chỗ ngồi chonhững khách hàng ngồi cạnh nhau theo một tiêu chí nào đó,…Các dịch vụ nàymang tính địa lý và tính thời gian thực, nó đang được sự quan tâm lớn trên thếgiới và còn khá mới ở Việt Nam Hiện nay, các dịch vụ công nghệ của Googlenhư hệ điều hành Andoid chạy trên thiết bị di động, dịch vụ điện toán đám mâyGAE phát triển nhanh chóng với dung lượng lưu trữ lớn và khả năng xử lý tínhtoán với tốc độ cao đã được các tập đoàn về sản xuất các thiết bị di động và máytính hiệu năng cao kết hợp khai thác ứng dụng để đưa đến tay khách hàng các sảnphẩm chất lượng cả về công nghệ và dịch vụ Từ những sự phát triển nhanhchóng và phổ cập của thiết bị di động, đặc biệt là các công nghệ liên quan từ
Google nên em đã chọn đề tài:Phát triển ứng dụng định vị tín hiệu GPS và lưu trữ dựa trên công nghệ Google App Engine làm đồ án tốt nghiệp của mình.
Mục tiêu của đồ án
- Tiếp cận được những xu thế và trình độ nghiên cứu tiên tiến nhất trên thếgiới trong lĩnh vực lưu trữ CSDL đối tượng chuyển động dựa trên côngnghệ Google
- Đồ án sẽ phát triển phần mềm tích hợp trên các thiết bị di động chạy hệđiều hành Android để ghi lại tín hiệu GPS và lịch sử đường đi gắn liền vớimỗi thiết bị Tiếp đó, phần mềm này sẽ định kỳ đẩy những dữ liệu lịch sử
di chuyển này lên một CSDL trung tâm trên nền công nghệ điện toán đámmây GAE của Google
Bố cục của đồ án
Trang 7Chương 1: Tìm hiểu về Android và công nghệ lập trình Android
Chương 2: Tìm hiểu công nghệ GAE của Google
Chương 3: Xây dựng ứng dụng Android ghi lại dữ liệu chuyển động và lưu trữ
trên GAE
CHƯƠNG 1: TÌM HIỂU VỀ ANDROID VÀ CÔNG NGHỆ LẬP
TRÌNH ANDROID 1.1 Giới thiệu về hệ điều hành Android
Android là hệ điều hành dành cho các thiết bị di động như smartphones haytablet, được phát triển bởi Open Handset Alliance (OHA) OHA là một liên minh
Trang 8doanh nghiệp gồm 83 thành viên tập trung phát triển các tiêu chuẩn cho thiết bị
di động.Các thành viên bao gồm: Google, HTC, Sony, Dell, Intel, Motorola,Qualcomm, Texas Intruments, Samsung, LG, T-Mobile, Nvidia và Wind RiverSystems
Android được xây dựng dựa trên Linux kernel với middleware, libraries, cácAPI được viết bằng C và phần mềm chạy trên một application framework baogồm những thư viện tương thích với Java dựa trên Apache Harmony Android sửdụng DVM (Dalvik Virtual Machine) với phương pháp biên dịch just-in-time đểchạy code Java đã được biên dịch Android có một cộng đồng những developerviết ứng dụng, chủ yếu viết bằng Java Hiện tại có hơn 250.000 ứng dụngAndroid Android Market là một kho ứng dựng online của Google, người dùng
có thể download ứng dụng trên đó
1.2 Kiến trúc Android
Kiến trúc Android gồm 4 phần chính, mô hình dưới đây sẽ cho ta cái nhìntổng quan về kiến trúc Android Nhân của Android được phát triển dựa vàoKernel Linux 2.6 Mỗi tầng trong kiến trúc Android hoạt động dựa vào tầng bêndưới nó
Trang 9Hình 1.1: Kiến trúc Android
1.2.1 Tầng Application
Đây là lớp trên cùng của kiến trúc Android Là các ứng dụng mà lập trìnhviên phát triển như Browser, Media,…Android được tích hợp sẵn một số ứngdụng cần thiết cơ bản như: contacts, browser, camera, Phone,…Tất cả các ứngdụng đều sẽ được viết bằng ngôn ngữ Java
1.2.2 Tầng Application framework
Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp chongười phát triển khả năng xây dựng ứng dụng rất phong phú Người phát triển cótoàn quyền sử dụng các thiết bị phần cứng hay ứng dụng chạy ở nền… để tạo raứng dụng theo ý mình Kiến trúc ứng dụng được thiết kế để đơn giản hóa việc sử
Trang 10năng sử dụng các thành phần này Điều này giống với kỹ thuật cho phép ngườidùng đặt lại các thành phần.Google xây dựng cho các developer để phát triển cácứng dụng của họ trên Android chỉ bằng cách gọi các API.
Dưới đây là các ứng dụng của hệ thống và dịch vụ:
View UI - để xây dựng layout của ứng dụng bao gồm: list view, text
field, button, dialog, form grid, textbox, và thậm chí nhúng cả trìnhduyệt web
Content Providers cho phép các ứng dụng truy xuất dữ liệu từ ứng
dụng khác, hay chia sẻ dữ liệu
Resource Managercung cấp truy cập tới tài nguyên không phải mã
nguồn như là các tập tin xâu, đồ họa, hay layout
Notification Manager: cho phép tất cả các ứng dụng hiển thị thông
báo của mình trên hệ điều hành
Activity Maanager được dùng để quản lý vòng đời của các ứng
dụng và điều hướng các activity
1.2.3 Tầng Libraries và Runtime Android
1.2.3.1 Libraries
Là các thư viện được viết bằng ngôn ngữ C/C++ sẽ được các developerphát triển ứng dụng android thông qua tầng Android Framework Có thể kể rađây một số thư viện quen thuộc với các lập trình viên như:
Hệ thống thư viện C: là dẫn xuất của hệ thống thư viện C chuẩn
cho thiết bị nhúng trên nền Linux
Media Libraries: mở rộng từ PacketVideo’s OpenCORE Hỗ trợ
nhiều định dạng âm thanh ,video và hình ảnh phổ biến: MPEG4,H.264, MP3, AAC, AMR, JPG, and PNG
Surface Manager: quản lý việc hiển thị và kết hợp đồ họa 2D và
3D
LibWebCore: dùng webkit engine cho việc render trình duyệt mặc
định của HDH Android browser và cho dạng web nhúng (nhưHTML nhúng)
Trang 11 OpenGL|ES: thư viện đồ họa 2D và 3D
SQLite : quản lý database của ứng dụng
1.2.3.2 Runtime Android
Gồm một tập hợp các thư viện Java Core
Máy ảo Dalvik thực thi các file định dạng dex (Dalvik Excutable)
Mỗi ứng dụng Android chạy trên tiến trình riêng của máy ảo Dalvik.Dalvik được viết để chạy nhiều máy ảo cùng một lúc một cách hiệuquả trên cùng một thiết bị
1.2.4 Kernel Linux :
Android dựa trên Kernel Linux version 2.6 bởi nó cung cấp các trình điềukhiển các thiết bị phần cứng(driver), quản lý tiến trình, quản lý tài nguyên, bảomật, như sau:
Trang 121.3.1 AVD (Android Virtual Device)
Để kiểm tra ứng dụng dễ dàng, emulator có một chỗ để thiết lập cấu hình gọi
là AVD Những AVD giúp bạn thay đổi cấu hình phần cứng để có thể test trên nhiều thiết bị khác nhau
Emulator cũng đi kèm nhiều tiện ích để debug như console để log output của ứng dụng ra ngoài, mô phỏng việc gửi SMS hoặc gọi điện thoại
Android emulator là ứng dụng dựa trên QEMU, cung cấp một thiết bị di động
ảo ARM nơi mà bạn có thể chạy những ứng dụng Android Bạn có thể chọn phiên bản của hệ thống Android bằng cách thiết lập AVD, cũng có thể customizeskin và key mapping Khi chạy emulator ở thời điểm thực thi, ta có thể dùng những câu lệnh khác nhau để điều khiển hành vi của emulator
Để sử dụng emulator, bạn phải tạo một hoặc nhiều thiết lập AVD Trongmỗi thiết lập, chỉ định một Android platform để chạy emulator và cài đặt nhữngtùy chọn phần cứng và emulator skin mà bạn muốn dùng Khi chạy emulator, bạn
sẽ chọn AVD muốn load
Mỗi AVD có bộ nhớ riêng của nó Ví dụ như user data, SD card Khichạy emulator với thiết lập AVD, nó tự động load user data và SD card từ thưmục của AVD đó Mặc định, emulator lưu user data, SD card và cache trong mỗithư mục AVD
1.3.2 Android emulator và những hạn chế
Như đã đề cập ở trên, Android emulator chạy ARM opcode Nó sử dụngQEMU để mô phỏng thiết bị thật Cách làm này giúp tối ưu sự đúng đắn và chínhxác giữa emulator và thiết bị thật Cách chạy của emulator là chuyển đổi từ ARMopcode thành Intel opcode Cách duy nhất để tăng tốc cho emulator là tăng tốcCPU chạy emulator Vì lý do đó, một máy tính nhanh hơn bị chi phối bởi tốc độcủa single core hơn là số core mà nó có
Để kiểm tra những ứng dụng đồ họa cao như games và những hiệu ứnghình ảnh, cách tốt nhất là sử dụng thiết bị thật Còn emulator sẽ giúp ích cho việckiểm tra trên nhiều thiết lập khác nhau bằng cách dùng các AVD
Trang 131.4 Cấu trúc một ứng dụng Android
Để có thể xây dựng các ứng dụng trên hệ điều hành Android thì trước tiên phải tìm hiểu các giao diện lập trình ứng dụng API của hệ điều hành này Các API cơ bản của Android là:
Trang 14Hình 1.2: Vòng đời của một Activity
Dựa vào lược đồ trên, thấy được có 3 vòng lặp quan trọng sau:
Vòng đời toàn diện (Entire Lifetime): Diễn ra từ lần gọi onCreate(Bundle)
đầu tiên và kéo dài tới lần gọi onDestroy() cuối cùng
Vòng đời thấy được (Visible Lifetime): Diễn ra từ khi gọi onStart() và kéo
dài tới khi gọionStop() Ở vòng đời này, activity được hiển thị trên màn hinhnhưng có thế không tương tác với người dùng ở trên nền Các phương thứconStart(0 và onStop() có thể được gọi nhiều lần
Vòng đời trên nền (Foreground Lifetime): Diễn ra từ khi gọi onResume(0
và kéo dài tới khi gọi onPause() Ở vòng đời này, activity nằm trên mọi activitykhác và tương tác được với người dùng 1 activity có thể liên tục thay đổi giữa 2trạng thái paused và resumed, chẳng hạn khi thiết bị sleep hay 1 intent mới đượcđưa tới
- onStart(): được gọi khi các Activity muốn hiển thị cho người dùng,
- onResume(): được gọi khi mà Activity bắt đầu tương tác với người dùng
- onStop(): được gọi khi Activity không còn hiển thị cho người sử dụng khi
Activity khác đã được khởi động và chiếm chỗ của Activity này
- onDestroy(): hàm cuối cùng bạn gọi khi muốn kết thúc Activity, gọi hàm
này khi Activity của bạn đã hoàn thành hoặc hệ thống tạm thời hủy Activity củabạn có mục đích
Các activity được quản lí dưới dạng các activity stack - First-In-Last-Out:Khi một activity mới được khởi tạo, nó sẽ được đưa lên trên cùng stack, cácactivity khác muốn chạy trên nền (foreground) trở lại thì cần phải chờ tới khiActivity mới này kết thúc
Một Activity có 4 trạng thái:
Trang 15 Active hay Running: Khi một activity đang chạy trên màn hình.
Paused: Khi một activity vẫn đang chạy trên màn hình nhưng đang bị
một activity trong suốt (transparent) hay không chiếm toàn màn hình
hiển thị phía trên Tuy vẫn lưu trữ dữ liệu, nhưng các paused activity
này sẽ bị hệ thống bắt chấm dứt khi đang thiếu bộ nhớ trầm trọng
Stopped: Khi 1 activity bị che khuất hoàn toàn bởi 1 activity khác.
Tuy vẫn lưu trữ dữ liệu, nhưng các stopped activity này sẽ thườngxuyên bị hệ thống bắt chấm dứt để dành chỗ cho các tiến trình khác
Killed hay Shut down: Khi 1 activity đang paused hay stopped, hệ
thống sẽ xóa activity ấy ra khỏi bộ nhớ
1.4.2 HTTP
Là các lớp, hàm hỗ trợ việc kết nối đến internet và tải các nội dung về máy
xử lý để lấy thông tin.Trong khóa luận này có sử dụng một số lớp để phục vụviệc gửi yêu cầu và nhận dữ liệu trả về từ Servlet
HttpEntity: được dẫn xuất từ lớp org.apache.http.HttpEntity, là một đối
tượng được gửi đi kèm cùng với các thông điệp HTTP, nó có thể được tìm thấytrong các thông điệp gửi yêu cầu (request) hoặc các thông điệp trả về (response)
HttpResponse: được dẫn xuất từ lớp org.apache.http.HttpResponse, là đối
tượng trả về của HTTP.
HttpClient: được dẫn xuất từ lớp org.apache.http.client.HttpClient, là một
giao diện cho một người dùng HTTP HttpClient đóng gói tất cả các đối tượng
cần thiết để thực hiện các yêu cầu HTTP
HttpPost: được dẫn xuất từ lớp org.apache.http.client.methods.HttpPost,
đây là phương thức chính để gửi các yêu cầu đến Server và nhận lại các luồng dữliệu về từ Servlet
1.4.3 Intent
Trang 16Là dẫn xuất từ lớp: android.content.Intent;
Nó như là một nền tảng để truyền tải các thông báo từ nơi muốn gửi đến nơinhận, là mối liên lạc giữa các Activity cần truyền thông lẫn nhau Các Intentđược tạo ra có hai phần mang thông tin chính là:
- Hành động (action): các hành động nói chung sẽ được thực hiện.
- Dữ liệu (data): các dữ liệu để thực hiện hành động.
Ngoài ra Intent còn một số thuộc tính phụ quan trọng như:
- Thể loại (category): cho phép thêm thông tin vào các hành động để thực
thi
- Loại (type): chỉ định một kiểu rõ ràng của dữ liệu Intent.
- Thành phần: chỉ định rõ ràng tên của một lớp thành phần để sử dụng
Intent
- Bổ sung (extras): đây là một Bundle của các thông tin bổ sung Nó được
sử dụng để cung cấp các thông tin mở rộng cho các thành phần
Các giải pháp sử dụng Intent:
- Intent rõ ràng (Explicit Intent): đã chỉ định các thành phần (bằng các
phương thức như setComponent() hoặc setClass()), nó cung cấp chính xác đếncác lớp cần dữ liệu Intent mang đến để xử lý
- Intent ẩn (Implicit Intent): không chỉ định rõ thành phần nào sẽ chạy dữ
liệu mang theo của Intent, tuy nhiên nó bao gồm đầy đủ thông tin cho hệ thống
để xác định thành phần đang sẵn sang nào tốt nhất sẽ chạy Intent đó
Ví dụ: trong đồ án này có sử dụng một Intent để gửi thông tin giữa haiActivity Activity thứ nhất sẽ kết thúc, gọi Activity thứ hai khởi động, đồng thờitruyền dữ liệu bổ sung theo để Activity thứ hai xử lý
1.4.4 Service
Một service là một thành phần của ứng dụng, thể hiện mong muốn ứng dụngthực hiện các hành động trong khi không tương tác với người dùng hoặc cungcấp chức năng cho các ứng dụng khác sử dụng Nói một cách đơn giản, service làcác tác vụ (task) chạy ngầm dưới hệ thống nhằm thực hiện một nhiệm vụ nào đó Mỗi class Service phải chứa thẻ <service> được khai báo trong file
Trang 17AndroidManifext.xml Services có thể được bắt đầu bởi Context.startService()
và Context.bindservice()
Cũng như các đối tượng của ứng dụng khác, services chạy trên luồng(Thread) của tiến trình chính Có nghĩa là nếu service của bạn dự định chạy cáchành vi có cường độ lớn hoặc các hành vi có thể gây nghẽn mạch, nó sẽ tự sinh
ra luồng (Thread) của chính nó để làm thực hiện các tác vụ được đặc tả trongService
Service không phải là một tiến trình độc lập Đối tượng Service không chạytrên tiến trình (process) của riêng nó (trừ khi có một yêu cầu đặt biệt), Servicechạy trên tiến trình của chương trình
Service không phải là một luồng (thread)
Service có chứa 2 đặc trưng cơ bản sau:
Là một chức năng để ứng dụng thông báo với hệ thống về việc mà nó muốnthực hiện ở phía dưới nền (ngay cả khi người dùng không tương tác trực tiếp tớiứng dụng).Điều này tương ứng với việc gọi phương thức Context.startservice(),
nó sẽ yêu cầu hệ thống lên lịch cho service để chạy cho đến khi bị chính servicehay người nào đó dừng nó lại
Là một chức năng cho phép ứng dụng để cung cấp các chức năng của nó chocác ứng dụng khác Điều đó tương ứng với việc gọi Context.bindService(), chophép một long-standing connection được tạo ra để service có thể tương tác vớinó
Khi một Service được tạo ra, việc hệ thống cần làm là tạo ra thành phần vàgọi hàm onCreate() và bất kỳ lệnh callback thích hợp nào trên luồng chình Nóphụ thuộc vào Service thi hành hành vi thích hợp nào, chẳng hạn tạo luồng thứhai để thực hiện tiến trình
Vòng đời của 1 Service
Có 2 lý do để một service được chạy bởi hệ thống Bằng cách gọi phươngthức Context.startService() và Context.bindService().Nếu người dùng gọiphương thức Context.startService() thì hệ thống sẽ nhận về một đối tượng service(tạo mới nó và gọi hàm onCreate() nếu cần thiết) và sau đó lại gọi phương thức
Trang 18onStartCommand(Intent, int ,int) với các biến được cung cấp bởi client Servicemới được tạo ra này sẽ chạy cho tới khi có lệnh gọi phương thứcContext.stopService() hoặc stopSelf() Dù cho một service có được start baonhiêu lần đi nữa thì nó sẽ bị tắt ngay khi phương thức Context.stopService() hoặcphương thức stopSelf() được gọi Service có thể dùng phương thức stopSelf(int)
để đảm bảo rằng service sẽ không được tắt cho đến khi Intent đã khởi tạo nóđược xử lý
Hình 1.3: Lược đồ vòng đời của 1 Service
Dựa theo hình trên, 1 service được bắt đầu bởi phương thức startService() làservice dùng để thực hiện các tác vụ ngầm dưới nền, service được bắt đầu bởiphương thức bindService() là service được dùng để cung cấp các chức năng chocác chương trình khác
Trang 19Có hai lớp broadcast quan trọng cần xét đến:
Broadcasts bình thường (Normal broadcasts): Được gửi bởi context.sendBroadcast tới các receivers hoàn toàn không theo 1 trật tự nào, dẫntới đôi khi tồn tại cùng 1 lúc nhiều receivers khác nhau Tuy nhanh nhưng khôngthể trao đổi kết quả nhận về giữa các receivers với nhau
Broadcasts có thứ tự (Ordered broadcasts): Được gửi bởiContext.sendOrderedBroadcast() tới từng receiver một Như vậy, kết quả nhận vềcủa 1 receiver có thể trở thành input của 1 receiver khác, hay có thể ngay lập tứcdừng việc broadcast tới các receiver khác Trật tự chạy các receivers được quyếtđịnh bởi thuộc tính android: priority trong intent-filter tương ứng
1.4.5 View
Đây là một gói chuyên cung cấp các đối tượng được sử dụng để hiện thị,tổchức và tương tác giữa thiết bị và người sử dụng, hay nói cách khác, nó cung cấpgiao diện tương tác giữa thiết bị và người sử dụng
Là dẫn xuất từ lớp: android.View.* ;
Thực đơn(Menu): giao diện để kết nối các mục trong thực đơn Theo mặc định,
mọi Activity hỗ trợ một thực đơn lựa chọn hành động hoặc các lựa chọn Bạn cóthể thêm các mục vào thực đơn này và xử lý cách hành động nháy chuột trên mục
mà bạn vừa bổ sung Cách đơn giản nhất để thêm các mục là thêm một đoạn mãXML vào thực đơn, còn cách đơn giản nhất để xử lý sự kiện khi chọn mục làdùng phương thức onOptionsItemSelected(MenuItem) và onContextItemSelected(MenuItem) Nó cung cấp một số phương thức chính sau
cho người lập trình
1.4.6 Widget
Widget là một gói bao gồm các đơn vị giao diện người sử dụng (UI) chomàn hình ứng dụng và có thể thiết kế hoàn toàn theo ý mình Để tạo ra mộtWidget của mình, phải thừa kế từ lớp View để hiển thị và tương tác, ngoài ra cònphải sử dụng cấu trúc XML để thiết kế Dưới đây là danh sách các tệp sẽ cần tạo
ra để thực thi Widget:
Trang 20- Tệp java thực thi; đây là nơi để chạy, điều khiển các trạng thái, kịch bản
của Widget Nếu đã thiết kế đối tượng từ tệp XML, thì sau đó vẫn phải dùng hàmkhởi tạo để lấy ra các giá trị, thuộc tính mà được thiết kế trong tệp XML
- Tệp định nghĩa XML: mọi tệp XML trong res/values nhanh chóng định
nghĩa các phần tử XML cho Widget của bạn và các thuộc tính mà nó hỗ trợ Cácứng dụng khác sẽ sử dụng các thuộc tính này để thực thi mục đích của nó
- Cấu trúc XML: một tệp XML trong /res/layout/ sẽ xác định cách bố trí
các Widget
Ví dụ:
- Cấu trúc một tệp dịnh nghĩa XML:
Hình 1.4: Cấu trúc tệp XML định nghĩa các giá trị
- Cấu trúc XML để hiện thị một nút bấm(Button):
Trang 21Hình 1.5: Cấu trúc tệp XML
Tiếp theo chúng ta sẽ đi sâu hơn nghiên cứu về một số Widget phổ biến vàđược sử dụng nhiều trong đề tài này:
nó không cho phép người sử dụng có thể sửa văn bản đó
- Một tệp XML cho phép hiển thị cấu trúc một TextView:
Hình 1.6: XML hiển thị một TextView
- Một tệp XML cho phép hiển thị cấu trúc Button
Hình 1.7: Tệp XML cấu trúc Button
- Một tệp java thực thi một hành động nào đó khi có sự kiện nháy chuột vào
Button:
Trang 22Hình 1.8: Tệp java kết nối và thực thi hành động nháy chuột
- Do Button được kế thừa từ đối tượng TextView, nên nó mang hầu hết cácphương thức cơ bản của TextView
vào nó để thực thi mộ số hành động nào đó, tuy nhiên nó có một đặc tínhđặc biêt, đó là cho phép sử dụng một tệp hình ảnh để hiển thị cho Button
đó Khi khai báo ImageButton luôn phải khai báo đường dẫn tới ảnh hiển
thị được để trong thư mục /drawable.
- Một tệp XML để thiết lập cấu trúc ImageButton:
Trang 23kì thông tin nào trong preferences bằng từ khóa có kiểu String và kiểu dữ liệunguyên thủy (boolean, String…)
Preferences có thể dùng cho activity độc lập hay được chia sẻ giữa cácactivity của một ứng dụng Và tương lai, Preference có thể được chia sẻ giữa cácứng dụng với nhau
Bên cạnh việc sử dụng Preferences để lưu trữ dữ liệu thì cũng còn mộtcách đơn giản khác để thực hiện công việc lưu trữ dữ liệu là sử dụng tập tin.Android cung cấp 2 mô hình để truy cập tập tin:
Một cho các tập tin được đóng gói sẵn cho ứng dụng
Một dành cho tập tin được tạo trên thiết bị thực thi ứng dụng đó
Đối với dữ liệu tĩnh, chẳng hạn danh sách các từ dùng để kiểm tra chính
tả Cách đơn giản nhất để thực hiện điều đó là lưu vào một tập tin, và tập tin nàyphải được đặt trong thư mục res/raw của project Nhờ vậy, tập tin sẽ được đặttrong tập tin APK của ứng dụng như một nguồn tài nguên cơ bản
Ngoài 2 phương pháp trên, Android còn hỗ trợ hệ quản trị cơ sở dữ liệuquan hệ SQLite để quản lý dữ liệu lớn và có quan hệ phức tạp Nhờ vậy, ngườilập trình có thể thực hiện quản lý dữ liệu một cách dễ dàng, linh hoạt hơn
Khi lập trình trên di động hay các thiết bị có dung lượng bộ nhớ hạn chế,người ta thường dùng SQLite SQLite là một hệ quản trị cơ sở dữ liệu nhúngđược hiện thực từ chuẩn SQL-92 Giống với cái tên của nó, SQLite chiếm dunglượng nhỏ (khoảng 275KB) nên việc truy xuất dữ liệu được nhanh chóng, khôngchiếm dụng quá nhiều tài nguyên hệ thống Do SQLIte là phần mềm mã nguồn
mở nên nó không bị giới hạn tác quyền Vì lý do đó mà SQLite được nhiều hãng
sử dụng (Adobe, Apple, Google, Sun, Symbian) và các dự án mã nguồn mở(Mozila, PHP, Python)
Đặc biệt, đối với Android, SQLite rất thích hợp để tạo cơ sở dữ liệu chocác ứng dụng trên nền Android Từ khi SQLite có giao diện SQL thì nó càngđược sử dụng dễ dàng và thông dụng hơn
Trang 24Sqlite tuy nhẹ hơn so với các hệ cơ sở dữ liệu khác nhưng cũng khôngkhác biệt nhiều SQLite cũng sử dụng ngôn ngữ truy vấn SQL (SELECT,INSERT, DELETE…), thích hợp cho các ứng dụng trên điện thoại, đặc biệt làứng dụng trên hệ điều hành Android vì Android Runtime có thể chứa cả SQLite
mà không cần phải chia nhỏ ra
SQLite có một hệ thống câu lệnh SQL đầy đủ với các triggers,transactions Các câu truy vấn cũng như các hệ cơ sở dữ liệu khác SQLite nhưbản thu nhỏ của so với các hệ CSDL khác, vì vậy nó không thể có đầy đủ các chứnăng trên chiếc điện thoại di động của bạn
SQLite là một lựa chọn thích hợp dành cho ứng dụng trên hệ điều hànhAndroid Ngoài dung lượng lưu trữ nhỏ gọn, SQLite còn cho phép sử dụngUnicode, kiểu dữ liệu không được cài đặt trong một số phiên bản Android
SQLite được hiện thực từ tiêu chuẩn SQL-92 của một ngôn ngữ SQLnhưng vẫn còn chứa một số khiếm khuyết
Tuy SQLite hỗ trợ triggers nhưng bạn không thể viết trigger cho view.Hoặc SQLite không hỗ trợ lệnh ALTER TABLE, do đó, bạn không thể thực hiệnchỉnh sửa hoặc xóa cột trong bảng
SQLite không hỗ trợ ràng buộc khóa ngoại , các transactions lồng nhau,phép kết right outer join, full outer join
SQLite sử dụng kiểu dữ liệu khác biệt so với hệ quản trị cơ sở dữ liệutương ứng Bạn có thể insert dữ liệu kiểu string vào cột kiểu integer mà khônggặp phải bất kỳ lỗi nào
Vài tiến trình hoặc luồng có thể truy cập tới cùng một cơ sở dữ liệu Việcđọc dữ liệu có thể chạy song song, còn việc ghi dữ liệu thì không được phép chạyđồng thời
Ngoài các khiếm khuyết trên thì Sqlite cung cấp cho người dùng gần nhưđầy đủ các chưng năng mà một hệ cơ sở dữ liệu cần có như tạo database; tạobảng; thêm, xóa, sửa dữ liệu
Trang 25SQLite Manager là công cụ hiệu quả hỗ trợ cho việc xây dựng cơ sở dữ liệu cho ứng dụng Android đó là SQLite Manager, một add-on miễn phí của trìnhduyệt
Sử dụng SQLite Manager để quản lí cơ sở dữ liệu Android:
Tạo database mới :
Vào menu Database/ New Database
Tạo bảng mới:
Tại Database vừa tạo, nhấp chuột phải chọn Create table Thiết lậpcác giá trị thích hợp
Xử lý dữ liệu:
Chọn bảng cần nhập và chọn tab Browse & Search
Nút Add: Thêm dữ liệu
Nút Duplicate: Nhân đôi dữ liệu
Nút Edit: Chỉnh sửa dữ liệu
Nút Delete: xóa dữ liệu
Thực thi câu truy vấn:
Chọn tab Execute SQL, Nhập câu lệnh SQL vào khung Enter SQL vàchọn Run SQL
Kết quả sẽ được trình bày ở khung phía dưới Nếu câu SQL có lỗi sẽ đượchiển thị tại ô Last Error
Tùy chỉnh Database: Chọn tab DB Settings và thiết lập các giá trị nhưmong muốn
Import Database vào ứng dụng Android
Sau khi tạo CSDL bằng SQLite Manager,chọn menu File/Export Database.Lưu file sql vừa tạo vào máy
Để import database vào ứng dụng, người lập trình cần :
Build and Run chương trình Android
Trang 26Khởi động máy ảo xong, chọn nút DDMS ở góc trên bên phải chương trìnhEclipse để xem cấu trúc file.
Vào thư mục chứa database có dường dẫn như sau :
/data/data/your.app.package/databases/your-db-name
Sau đó chọn nút import và chọn tập tin database Lưu ý : Phải đổi tên file từ
*.sql thành * trước khi import vào chương trình
1.6 Android Location API và Google Maps
Phần trên đã giới thiệu một số thành phần cơ bản trong lập trình Android,trong mục này sẽ trình bày các lớp, các giao diện được sử dụng cho việc thu tínhiệu từ hệ thống GPS
Ứng dụng cơ bản định vị trên bản đồ là những ứng dụng thu hút các thiết bịmobile cho người sử dụng Bạn có thể xây dựng những khả năng này bên trong
ứng dụng của bạn sử dụng các lớp trong gói android.location và thư viện mở
rộng GoogleMaps
1.6.1 Android Location API
Gói android.location chứa các lớp nó định nghĩa các định vị android cơ
GpsStatus.NmeaListener: Sử dụng để nhận tín hiệu từ GPS theo chuẩn NMEA
(National Marine Electronics Association)
LocaltionListener được sử dụng để nhận thông báo từ LocaltionManagerkhi định vị được thay đổi
Các lớp :
chỉ, cài đặt của một chuỗi mô tả địnhvị
chuẩn ứng dụng để chọn cung cấp định
Trang 27hóa địa lý và mã ngược
thái hiện thời của một vệ tinh GPS
thái hiện thời của máy GPS
địa lý được gửi tại một thời gian cụthể (một điểm)
truy cập để sử dụng các dịch vụ của hệthống định vị
tượng cung cấp định vị
Dịch vụ dựa định vị ( Location-based services )
Hầu hết các thiết bị android cho phép xác định vị trí hiện thời.Nó có thểthông qua thiết bị GPS.Thông qua mạng wifi.Android cung cấp gói
“android.location” nó cũng cấp API để xác định vị trí hiện thời Lớp
LocationManager cung cấp việc truy cập tới dịch vụ định vị.Thiết bị android
phải cung cấp một vài dịch vụ mà chúng ta có thể chọn một trong số đó Để lựa
chọn linh hoạt sao cho định vị tốt nhất là sử dụng đối tượng “Criteria” trong nó
có thể định nghĩa làm thế nào để lựa chọn được Bạn có thể đăng kí một
“LocationListener” với ‘LocationManager’ và sẽ nhận định kì cập nhật về vị trí
địa lí Lớp ‘LocationProvider’ là lớp cha của các cung cấp định vị khác nó cho
biết thông tin về vị trí hiện thời
Hơn nữa, khi yêu cầu một ví dụ cụ thể từ hệ thống thì phương thức
getSystemService() được gọi Một ứng dụng sẽ có một LocationManager, ứng
dụng có thể thực hiện những việc sau
Đăng ký/hủy đăng ký cập nhật định kỳcủavị trí hiện tại của người dùng từmột nhà cung cấp vị trí (quy định hoặc theo các tiêu chuẩn hoặc tên)
Trang 28 Đăng ký/hủy đăng ký cho một Intent bị loại bỏ nếu thiết bị đi kèm trongmột khoảng cách nhất định(quy định bởi bán kính tính bằng mét).
Forward and reverse Geocoding
Lớp ‘Geocoder’ cho phép xác định toạ độ địa lí (kinh độ, vĩ độ) cho một vịtrí và có thể là từ các địa chỉ đưa ra các tọa độ địa lí Những tiến trình được biếtnhư là quá trình mã hóa địa lí thuận và ngược
1.6.2 Google Maps
Đây chính là thành phần chính hiển thị bản đồ cho người sử dụng
thấy.Google cung cấp trong gói “com.google.android.maps” là thư viện cho
phép sử dụng Google Map trong Android Google Maps không là một phần của chuẩn nền mã nguồn mở nền tàng android và nó yêu cầu một khóa thêm vào để
sử dụng chúng Khóa này có thể đặc tả trong hiển thị nó sẽ sử dung hiển thị trên bản đồ
Để sử dụng Google Maps trong ứng dụng của bạn cần để thêm vào thư viện
sử dụng câu lệnh trong file AndroidManifest.xml Project tạo ra nó tự động nếu bạn chọn một phiên bản Google API
<uses library android:required = "true"android:name =
"com.google.android.maps" </uses-library>
Để dễ dàng hơn khi tăng khả năng ứng dụng google map, các nhà cungcấp Google đã đưa ra một thư viện mở rộng nó bao gồm gói: Các lớp của các gói
com.google.android.maps được xây dựng tải về, dựng hình, và bộ nhớ đệm của
Maps, cũng như một loạt các tùy chọn hiển thị và điều khiển
Trang 29Lớp “MapController” có thể sử dụng để tương tác với “MapView” bởi di chuyển nó Một “Geopoint” dùng miêu tả vị trí thông qua kinh độ và vĩ độ và lớp
“Overlay” có thể sử dụng để vẽ trên bản đồ, các vị trí đánh dấu.
<com.google.android.maps.MapViewandroid:id="@+id/map"
Nói chung, lớp MapView cung cấp một bao bọc xung quanh Google
MapsAPI cho phép ứng dụng của bạn thao tác dữ liệu Google Maps thông qua các phương thức, và nó cho phép bạn làm việc với dữ liệu bản đồ
Thực tế Maps không phải là một phần của thư viện Android tiêu chuẩn, do đó, nó
có thể không có mặt trên một số thiết bị Android-powered Tương tự như vậy,các thư viện Maps bên ngoài không được bao gồm trong thư viện Android tiêuchuẩn được cung cấp trong SDK Vì vậy, bạn có thể phát triển bằng cách sử dụng
các lớp của gói com.google.android.maps, thư viện Maps bên ngoài được tạo sẵn
cho bạn như là một phần của các API của Google add-on cho Android SDK
1.7 Android Market
Android Market là một kho phần mềm online được phát triển bởi Google dành cho các thiết bị Android Một ứng dụng được gọi là “Market” được cài sẵn trên hầu hết các thiết bị Android và cho phép người dùng truy cập và download ứng dụng được tải lên bởi những developer khác 12/2010, có khoảng 200.000 games, ứng dụng và widget trên Android Market.4/2011, Google thông báo có hơn 3 tỉ ứng dụng Android được cài và cuối 6/2011 có khoảng 6 tỉ lượt cài ứng
Trang 30dụng từ Android Market Bản thân hệ điều hành này được cài trên 130 triệu thiết bị.
Google đã tham gia vào Android Market bằng cách đưa ra những ứng dụng của riêng họ, bao gồm Google Voice cho Google Voice service, Sky Map
để xem các ngôi sao, Finance cho finance service, Maps Editor cho MyMaps service, Places Directory cho Local Search, Google Goggles tìm kiếm hình ảnh, Gesture Search cho những chữ viết tay và số để tìm kiếm nội dung trên điện thoại, Google Translate, Google Shopper, Listen cho podcast và My Tracks một ứng dụng hiện nay được khá nhiều người sử dụng 8/2010, Google giới thiệu Voice Actions cho Android, cái cho phép người dùng tìm kiếm, viết tin nhắn và gọi điện bằng giọng nói
Người dùng cũng có thể cài ứng dụng từ kho lưu trữ của tổ chức thứ 3 nhưAmazon Appstore hay cài trực tiếp từ APK file
Trang 31CHƯƠNG 2: TÌM HIỂU CÔNG NGHỆ GAE CỦA GOOGLE 2.1 Công nghệ điện toán đám mây
2.1.1 Khái quát
Ngày nay, đối với các công ty, doanh nghiệp có thể quản lý được nguồn
dữ liệu an toàn, ban đầu các doanh nghiệp phải đầu tư, tính toán rất nhiều loại chiphí như chi phí cho phần cứng, phần mềm, mạng, chi phí cho quản trị viên, chiphí bảo trì, sửa chữa, … Ngoài ra họ còn phải tính toán khả năng mở rộng, nângcấp thiết bị; phải kiểm soát việc bảo mật dữ liệu cũng như tính sẵn sàng cao của
kỳ đâu thông qua hệ thống Internet
Vì vậy, điện toán đám mây là môi trường tính toán dựa trên internet mà ở
đó tất cả phần mềm, dữ liệu, tài nguyên được cung cấp cho máy tính và các thiết
bị khác theo nhu cầu (tương tự như mạng điện)
Trang 32Hình 2.1: Điện toán đám mây
Một số các nhà cung cấp dịch vụ điện toán đám mây:
Google App Engine của Google:
WindowsAzure của Microsoft
Amazone Webservice của Amazone.com
Sun Cloud của Sun
2.1.2 Ưu và nhược điểm của điện toán đám mây
2.1.2.1 Ưu điểm:
Tính linh động: Người dùng có thể thoải mái lựa chọn các dịch vụ phù
hợp với nhu cầu của mình, cũng như có thể bỏ bớt những thành phần màmình không muốn
Giảm bớt phí: Người dùng không chỉ giảm bớt chi phí bản quyền mà còn
giảm phần lớn chi phí cho việc mua và bảo dưỡng máy chủ
Tạo nên sự độc lập: Với điện toán đám mây, phần mềm, dữ liệu có thể
được truy cập và sử dụng từ bất kì đâu, trên bất kì thiết bị nào mà khôngcần phải quan tâm đến giới hạn phần cứng cũng như địa lý
Trang 33 Tăng cường độ tin cậy: Dữ liệu trong mô hình điện toán đám mây được
lưu trữ 1 cách phân tán tại nhiều cụm máy chủ tại nhiều vị trí khác nhau.Điều này giúp tăng độ tin cậy, độ an toàn của dữ liệu mỗi khi có sự cốhoặc thảm họa xảy ra
Bảo mật: Việc tập trung dữ liệu từ nhiều nguồn khác nhau sẽ giúp các
chuyên gia bảo mật tăng cường khả năng bảo vệ dữ liệu của người dùng,cũng như giảm thiểu rủi ro bị ăn cắp toàn bộ dữ liệu
Bảo trì dễ dàng: Mọi phần mềm đều nằm trên server, lúc này, người dùng
sẽ không cần lo lắng cập nhật hay sửa lỗi phần mềm nữa Và các lập trìnhviên cũng dễ dàng hơn trong việc cài đặt, nâng cấp ững dụng của mình
2.1.2.2 Nhược điểm:
Tính riêng tư: Các thông tin người dùng và dữ liệu được chứa trên điện
toán đám mây có đảm bảo được riêng tư, và liệu các thông tin đó có bị sửdụng vì một mục đích nào khác?
Tính sẵn dùng: Liệu các dịch vụ đám mây có bị “treo” bất ngờ, khiến cho
người dùng không thể truy cập các dịch vụ và dữ liệu của mình trongnhững khoảng thời gian nào đó khiến ảnh hưởng đến công việc?
Mất dữ liệu: Một vài dịch vụ lưu trữ dữ liệu trực tuyến trên đám mây bất
ngờ ngừng hoạt động hoặc không tiếp tục cung cấp dịch vụ, khiến chongười dùng phải sao lưu dữ liệu của họ từ “đám mây” về máy tính cánhân Điều này sẽ mất nhiều thời gian Thậm chí một vài trường hợp, vìmột lý do nào đó, dữ liệu người dùng bị mất và không thể phục hồi được
Tính di động của dữ liệu và quyền sở hữu: Một câu hỏi đặt ra, liệu người
dùng có thể chia sẻ dữ liệu từ dịch vụ đám mây này sang dịch vụ của đámmây khác? Hoặc trong trường hợp không muốn tiếp tục sử dụng dịch vụcung cáp từ đám mây, liệu người dùng có thể sao lưu toàn bộ dữ liệu của
họ từ đám mây? Và làm cách nào để người dùng có thể chắc chắn rằng cácdịch vụ đám mây sẽ không hủy toàn bộ dữ liệu của họ trong trường hợpdịch vụ ngừng hoạt động