Tải bản đầy đủ (.doc) (66 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.26 MB, 66 trang )

LỜ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ình
họ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 đồ án
này.
Trong quá trình thực hiện đồ án, mặc dù em đã có nhiều cố gắng nhưng do
hạn chế về thời gian cũng như kinh nghiệm nên đồ án này còn mắc phải những
thiế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

1


LỜI CAM ĐOAN
Để hoàn thành đồ án tốt nghiệp đúng thời gian quy định và đáp ứng được
yê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 trong
phần “Tài liệu tham khảo cùng các diễn đàn, mạng uy tín trên Internet”. Nội


dung đồ án hoàn toàn không sao chép từ các đồ án khác, không vi phạm bản
quyề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 xin
hoà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

2


MỤC LỤC
LỜI CẢM ƠN................................................................................................................. 1
LỜI CAM ĐOAN............................................................................................................. 2
MỤC LỤC...................................................................................................................... 3
....................................................................................................................................... 4
DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT....................................................................5
LỜI MỞ ĐẦU................................................................................................................. 5
CHƯƠNG 1: TÌM HIỂU VỀ ANDROID VÀ CÔNG NGHỆ LẬP TRÌNH ANDROID..........7
1.1.Giới thiệu về hệ điều hành Android.......................................................................7
1.2.Kiến trúc Android..................................................................................................8
1.3.1.AVD (Android Virtual Device).......................................................................12
1.4.Cấu trúc một ứng dụng Android..........................................................................13
1.4.4.Service......................................................................................................... 17
1.5.Lưu trữ dữ liệu....................................................................................................23
1.6.Android Location API và Google Maps...............................................................27
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.2.Google App Engine.............................................................................................38

2.2.1.Giới thiệu.....................................................................................................38
2.2.2.Các thành phần chính của GAE...................................................................39
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.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.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

3


4


DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT
Ký hiệu viết tắt

Diễn giải

GPS

Global Positioning System


GAE
LBS

Google App Engine
Location-based services

API

Application Program Interface

SDK
DVK
ARM
NMEA
QEMU
OHA

Software Development Kit
Dalvik Virtual Machine
Acorn RISC Machine
National Marine Electronics Association
Quick EMUlator
Open Handset Alliance

PaaS

Platform as a service

ADT


Android Development Tool

AVD

Android Virtual Device

LỜI MỞ ĐẦU
Tính cấp thiết của đồ án

5


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éo
theosự bùng nổ các thiết bị di động thông minh có hỗ trợ GPS và các máy tình
hiệ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ắp
thế 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ìm
câ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 cho
những khách hàng ngồi cạnh nhau theo một tiêu chí nào đó,…Các dịch vụ này
mang 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 Google
như hệ điều hành Andoid chạy trên thiết bị di động, dịch vụ điện toán đám mây
GAE phát triển nhanh chóng với dung lượng lưu trữ lớn và khả năng xử lý tính
toá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áy
tí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ản
phẩm chất lượng cả về công nghệ và dịch vụ. Từ những sự phát triển nhanh
chó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ông
nghệ 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ới
mỗ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 đám
mây GAE của Google.

Bố cục của đồ án

6


Chươ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 hay
tablet, được phát triển bởi Open Handset Alliance (OHA). OHA là một liên minh

7


doanh 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 River
Systems.
Android được xây dựng dựa trên Linux kernel với middleware, libraries, các
API được viết bằng C và phần mềm chạy trên một application framework bao
gồ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 developer
viết ứng dụng, chủ yếu viết bằng Java. Hiện tại có hơn 250.000 ứng dụng
Android. 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ìn

tổng quan về kiến trúc Android. Nhân của Android được phát triển dựa vào
Kernel Linux 2.6. Mỗi tầng trong kiến trúc Android hoạt động dựa vào tầng bên
dưới nó.

8



Hì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ình
viên phát triển như Browser, Media,…Android được tích hợp sẵn một số ứng
dụng cần thiết cơ bản như: contacts, browser, camera, Phone,…Tất cả các ứng
dụ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 cho
ngườ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ử
dụng lại các thành phần, mỗi ứng dụng có thể cho phép các ứng dụng khác khả
9


nă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ười
dù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ình
duyệ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 developer
phá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)

10



1.2.3.2.



OpenGL|ES: thư viện đồ họa 2D và 3D



SQLite : quản lý database của ứng dụng



SGL (Scalable Graphics Library): xử lý đồ họa 2D của Android.



FreeType: thư viện font chữ ảnh nhị phân và véc tơ.

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ệu
quả 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ều
khiể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ảo

mật,... như sau:
• Security system
• Memory management
• Process management
• Network stack
• Driver model.
1.3.

AVD và Emulator

Bộ Android SDK của Google đi kèm một bộ mô phỏng thiết bị di động ảo
(android emulator) chạy trên PC. Android emulator bắt trước tất cả đặc tính phần
cứng và phần mềm của một thiết bị thật, trừ việc không thể thực hiện cuộc gọi
thật. Nó cung cấp nhiều cách duyệt và các phím điều khiển, bạn có thể “chạm”
bằng cách dùng con chuột hoặc bàn phím. Nó cũng cung cấp màn hình hiển thị
ứng dụng, cùng với những ứng dụng khác chạy Android.

11


1.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ể customize
skin 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. Trong
mỗi thiết lập, chỉ định một Android platform để chạy emulator và cài đặt những
tù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. Khi
chạ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ỗi
thư 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ụng
QEMU để mô phỏng thiết bị thật. Cách làm này giúp tối ưu sự đúng đắn và chính
xác giữa emulator và thiết bị thật. Cách chạy của emulator là chuyển đổi từ ARM
opcode thành Intel opcode. Cách duy nhất để tăng tốc cho emulator là tăng tốc
CPU 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 ứng
hì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ệc
kiểm tra trên nhiều thiết lập khác nhau bằng cách dùng các AVD.

12


1.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à:

• Activtity
• HTTP
• Intent


Service

• View
• Widget
1.4.1. Activity
Là thành phần quan trọng nhất của một ứng dụng. Hiểu đơn giản thì
Activity như là một môi trường được khởi tạo để người sử dụng tạo ra, hiển thị
các giao diện, thực hiện những công việc mà người sử dụng muốn làm.

13


Hì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 hinh
nhưng có thế không tương tác với người dùng ở trên nền. Các phương thức
onStart(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 activity
khá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 2
trạng thái paused và resumed, chẳng hạn khi thiết bị sleep hay 1 intent mới được
đưa tới.

Activity có một số phương thức chính :

14


- onCreate(): được gọi khi mà Activity được gọi lần đầu tiên. Đây là nơi để
thiết lập các giá trị tĩnh. Chạy sau nó luôn là onStart().
- onRestart(): được gọi sau khi Activity đã dừng lại và sau đó sẽ tiếp tục
được bắt đầu lại. Chạy sau nó luôn là onStart().
- 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ủa
bạ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ác
activity khác muốn chạy trên nền (foreground) trở lại thì cần phải chờ tới khi
Activity mới này kết thúc.
Một Activity có 4 trạng thái:
• Active hay Running: Khi một activity đang chạy trên màn hình.
• Paused: Khi một activity vẫn đang chạy trên màn hình nhưng đang bị
một activity trong suốt (transparent) hay không chiếm toàn màn hình
hiển thị phía trên. Tuy vẫn lưu trữ dữ liệu, nhưng các paused activity
này sẽ bị hệ thống bắt chấm dứt khi đang thiếu bộ nhớ trầm trọng.
• Stopped: Khi 1 activity bị che khuất hoàn toàn bởi 1 activity khác.
Tuy vẫn lưu trữ dữ liệu, nhưng các stopped activity này sẽ thường
xuyên bị hệ thống bắt chấm dứt để dành chỗ cho các tiến trình khác.
• Killed hay Shut down: Khi 1 activity đang paused hay stopped, hệ

thống sẽ xóa activity ấy ra khỏi bộ nhớ.

15


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ấy
trong 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
Là 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ơi
nhậ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.

16


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 đến
cá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 hai
Activity. Activity thứ nhất sẽ kết thúc, gọi Activity thứ hai khởi động, đồng thời
truyề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ụng
thực hiện các hành động trong khi không tương tác với người dùng hoặc cung
cấp chức năng cho các ứng dụng khác sử dụng. Nói một cách đơn giản, service là
các tác vụ (task) chạy ngầm dưới hệ thống nhằm thực hiện một nhiệm vụ nào đó.
Mỗi class Service phải chứa thẻ <service> được khai báo trong file
AndroidManifext.xml. Services có thể được bắt đầu bởi Context.startService()
và Context.bindservice()
Cũng như các đối tượng của ứng dụng khác, services chạy trên luồng
(Thread) của tiến trình chính. Có nghĩa là nếu service của bạn dự định chạy các
hành vi có cường độ lớn hoặc các hành vi có thể gây nghẽn mạch, nó sẽ tự sinh

ra luồng (Thread) của chính nó để làm thực hiện các tác vụ được đặc tả trong
Service.
Service không phải là một tiến trình độc lập. Đối tượng Service không chạy
trên tiến trình (process) của riêng nó (trừ khi có một yêu cầu đặt biệt), Service
chạy trên tiến trình của chương trình.
Service không phải là một luồng (thread).
Service có chứa 2 đặc trưng cơ bản sau:
Là một chức năng để ứng dụng thông báo với hệ thống về việc mà nó muốn
thực hiện ở phía dưới nền (ngay cả khi người dùng không tương tác trực tiếp tới

17


ứng dụng).Điều này tương ứng với việc gọi phương thức Context.startservice(),
nó sẽ yêu cầu hệ thống lên lịch cho service để chạy cho đến khi bị chính service
hay người nào đó dừng nó lại.
Là một chức năng cho phép ứng dụng để cung cấp các chức năng của nó cho
các ứng dụng khác. Điều đó tương ứng với việc gọi Context.bindService(), cho
phép một long-standing connection được tạo ra để service có thể tương tác với
nó.
Khi một Service được tạo ra, việc hệ thống cần làm là tạo ra thành phần và
gọi hàm onCreate() và bất kỳ lệnh callback thích hợp nào trên luồng chình. Nó
phụ thuộc vào Service thi hành hành vi thích hợp nào, chẳng hạn tạo luồng thứ
hai để thực hiện tiến trình.
Vòng đời của 1 Service
Có 2 lý do để một service được chạy bởi hệ thống. Bằng cách gọi phương
thức Context.startService() và Context.bindService().Nếu người dùng gọi
phương thức Context.startService() thì hệ thống sẽ nhận về một đối tượng service
(tạo mới nó và gọi hàm onCreate() nếu cần thiết) và sau đó lại gọi phương thức
onStartCommand(Intent, int ,int) với các biến được cung cấp bởi client. Service

mới được tạo ra này sẽ chạy cho tới khi có lệnh gọi phương thức
Context.stopService() hoặc stopSelf(). Dù cho một service có được start bao
nhiêu lần đi nữa thì nó sẽ bị tắt ngay khi phương thức Context.stopService() hoặc
phương thức stopSelf() được gọi. Service có thể dùng phương thức stopSelf(int)
để đảm bảo rằng service sẽ không được tắt cho đến khi Intent đã khởi tạo nó
được xử lý.

18


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ởi
phương thức bindService() là service được dùng để cung cấp các chức năng cho
các chương trình khác.
BroadcastReceiver
Là lớp nhận về các intents được gửi bởi sendBroadcast(). Có thể tạo instance
cho lớp này bằng 2 cách: hoặcvới Context.registerReceiver() hay thông qua tag
<receiver> trong file AndroidManifest.xml.
Có 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ẫn
tới đôi khi tồn tại cùng 1 lúc nhiều receivers khác nhau. Tuy nhanh nhưng không
thể 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ởi
Context.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ức

19



dừ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ấp
giao 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)



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) cho
màn hình ứng dụng và có thể thiết kế hoàn toàn theo ý mình. Để tạo ra một
Widget 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òn
phả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:
- 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àm
khở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.

20


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):

Hì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:
 TextView: hiển thị một đoạn văn bản cho người sử dụng có thể nhìn thấ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:

21



Hình 1.6: XML hiển thị một TextView
 Button: có thể ấn vào, nháy vào để thực thi một hành động nào đó.
- 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:

Hì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ác
phương thức cơ bản của TextView.
 ImageButton: cũng giống như Button, ImageButton cho phép ấn, nháy
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

22


đó. 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:

Hình 1.9: XML ImageButton
- Một tệp java để thực thi hành động khi nháy chuột vào ImageButton:

Hình 1.10: Tệp java thực thi
 ListView: để hiện thị các mục theo một danh sách, cho phép lựa chọn

từng mục để thực thi hành động.
1.5.

Lưu trữ dữ liệu
Android có nhiều cách để lưu trữ dữ liệu. Một cách đơn giản nhất là sử

dụng hệ thống preferences. Android cho phép các activity và ứng dụng lưu trữ
preferences theo dạng cặp từ khóa và giá trị, nằm giữa các lần gọi một activity.
Mục đích chính là để lưu trữ thông tin cấu hình chi tiết mà người dùng hiệu
chỉnh, chẳng hạn trang web người dùng xem gần đây nhất. Bạn có thể lưu trữ bất
kì thông tin nào trong preferences bằng từ khóa có kiểu String và kiểu dữ liệu
nguyên thủy (boolean, String…)
Preferences có thể dùng cho activity độc lập hay được chia sẻ giữa các
activity 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.

23


Bên cạnh việc sử dụng Preferences để lưu trữ dữ liệu thì cũng còn một
cá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ày
phải được đặt trong thư mục res/raw của project. Nhờ vậy, tập tin sẽ được đặt
trong 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ệu
quan hệ SQLite để quản lý dữ liệu lớn và có quan hệ phức tạp. Nhờ vậy, người

lậ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.
 Hệ quản trị cơ sở dữ liệu SQLite
Khi lập trình trên di động hay các thiết bị có dung lượng bộ nhớ hạn chế,
người ta thường dùng SQLite. SQLite là một hệ quản trị cơ sở dữ liệu nhúng
được hiện thực từ chuẩn SQL-92. Giống với cái tên của nó, SQLite chiếm dung
lượng nhỏ (khoảng 275KB) nên việc truy xuất dữ liệu được nhanh chóng, không
chiếm dụng quá nhiều tài nguyên hệ thống. Do SQLIte là phần mềm mã nguồn
mở nên nó không bị giới hạn tác quyền. Vì lý do đó mà SQLite được nhiều hãng
sử dụng (Adobe, Apple, Google, Sun, Symbian) và các dự án mã nguồn mở
(Mozila, PHP, Python).
Đặc biệt, đối với Android, SQLite rất thích hợp để tạo cơ sở dữ liệu cho
các ứng dụng trên nền Android. Từ khi SQLite có giao diện SQL thì nó càng
được sử dụng dễ dàng và thông dụng hơn.
Sqlite tuy nhẹ hơn so với các hệ cơ sở dữ liệu khác nhưng cũng không
khác biệt nhiều. SQLite cũng sử dụng ngôn ngữ truy vấn SQL (SELECT,
INSERT, DELETE…), thích hợp cho các ứng dụng trên điện thoại, đặc biệt là
ứng dụng trên hệ điều hành Android vì Android Runtime có thể chứa cả SQLite
mà không cần phải chia nhỏ ra.

24


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ành
Android. Ngoài dung lượng lưu trữ nhỏ gọn, SQLite còn cho phép sử dụng
Unicode, kiểu dữ liệu không được cài đặt trong một số phiên bản Android.
 Đặc trưng của SQLite

SQLite được hiện thực từ tiêu chuẩn SQL-92 của một ngôn ngữ SQL
như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ện
chỉ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ệu
tương ứng. Bạn có thể insert dữ liệu kiểu string vào cột kiểu integer mà không
gặ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ạo
bảng; thêm, xóa, sửa dữ liệu.
 SQLite Manager
SQLite 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ình
duyệt.

25


×