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

ĐỀ TÀI : XÂY DỰNG HỆ THỐNG GPS TRACKER TRÊN CÁC THIẾT BỊ DI ĐỘNG

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 (2.6 MB, 83 trang )

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA CÔNG NGHỆ THÔNG TIN
Tel. (84-511) 736 949, Fax. (84-511) 842 771
Website: itf.ud.edu.vn, E-mail:

LUẬN VĂN TỐT NGHIỆP KỸ SƯ
NGÀNH CÔNG NGHỆ THÔNG TIN
MÃ NGÀNH : 05115

ĐỀ TÀI :
XÂY DỰNG HỆ THỐNG GPS TRACKER TRÊN CÁC THIẾT
BỊ DI ĐỘNG
Mã số : 06T3-047
Ngày bảo vệ : 15-16/06/2011

SINH VIÊN : NGÔ VĂN TRUNG
LỚP :
06T3
CBHD :
ThS. TRỊNH CÔNG DUY

ĐÀ NẴNG, 06/2011


LỜI CẢM ƠN
Tôi xin chân thành cảm ơn các thầy cô trong khoa Công nghệ thông tin,
trường Đại học Bách khoa Đà Nẵng đã truyền đạt những kiến thức quý báu
cho tôi trong những năm học vừa qua và nhất là đã tạo điều kiện thuận lợi


cho tôi học tập, thực hiện đề tài tốt nghiệp này.
Đặc biệt, tôi xin chân thành cảm ơn Thầy giáo ThS. Trịnh Công Duy đã
trực tiếp, tận tình giúp đỡ và hướng dẫn chúng tôi trong suốt thời gian
thực hiện đề tài.
Và để có được kết quả như ngày hôm nay tôi rất biết ơn gia đình Ông
Bà, Cha Mẹ và những người thân trong gia đình đã động viên, khích lệ, tạo
mọi điều kiện thuận lợi nhất về vật chất lẫn tinh thần trong suốt quá trình
học tập cũng như quá trình thực hiện đề tài tốt nghiệp này.
Mặc dù đã cố gắng hoàn thành đồ án trong phạm vi và khả năng cho
phép nhưng chắc chắn sẽ không tránh khỏi những thiếu sót. Tôi rất mong
nhận được sự thông cảm, góp ý và tận tình chỉ bảo của quý Thầy Cô và các
bạn.
Một lần nữa xin chân thành cám ơn!
Đà Nẵng, ngày 20 tháng 05 năm 2011
Sinh viên thực hiện
Ngô Văn Trung


LỜI CAM ĐOAN
Tôi xin cam đoan :
1

Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn
trực tiếp của thầy giáo Ths.Trịnh Công Duy

2

Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên
tác giả, tên công trình, thời gian, địa điểm công bố.


3

Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá,
tôi xin chịu hoàn toàn trách nhiệm.
Sinh viên thực hiện,
Ngô Văn Trung


MỤC LỤC
MỞ ĐẦU...........................................................................................................1
.I BỐI CẢNH ĐỀ TÀI.......................................................................................................1
.II MỤC ĐÍCH VÀ Ý NGHĨA..........................................................................................1
.III NHIỆM VỤ THỰC HIỆN...........................................................................................1
.IV PHƯƠNG PHÁP THỰC HIỆN...................................................................................1

CƠ SỞ LÝ THUYẾT.......................................................................................3
.I Giới thiệu về Android....................................................................................................3
.I.1. Tính năng mở của android..................................................................................3
.I.2. Các thành phần cơ bản của Android...................................................................5
Các thư viện hỗ trợ trong android............................................................................6
.I.2.1. Quá trình thực thi một chương trình android..................................................6
.I.2.2. Cấu trúc của một ứng dụng android...............................................................6
.II Nghiên cứu nền tảng android.......................................................................................7
.II.1. Bộ khung của một ứng dụng android................................................................7
.II.1.1. Android Activity..............................................................................................8
.II.1.2. Intent và Broadcast Receiver........................................................................11
.II.1.3. Android Service............................................................................................14
.II.1.4. Content provider..........................................................................................16
.II.1.5. Android SQLite Database............................................................................18
.II.2. Vòng đời của một ứng dụng android..............................................................21

.II.3. Các công cụ phát triển một ứng dụng android................................................23
.II.3.1. Bộ giả lập của androidccvc..........................................................................23
.II.3.2. Những công cụ phát triển Android dành cho Eclipse IDE..........................28
.II.3.3. Dalvik Debug Monitor Service (ddms)........................................................28
.II.3.4. Android Debug Bridge (adb).......................................................................28
.II.3.5. Android Asset Packaging Tool (aapt)..........................................................29
.II.3.6. Android Interface Description Language (aidl)..........................................29
.II.3.7. sqlite3...........................................................................................................29
.II.3.8. Traceview.....................................................................................................29
.II.3.9. mksdcard......................................................................................................29
.II.3.10. dx................................................................................................................29
.II.3.11. activityCreator............................................................................................29
.III Các chế độ bảo mật của một ứng dụng android.......................................................29
.III.1. Truy cập tập tin và các định danh của người dùng.......................................29
.III.2. Các quyền đang được sử dụng.......................................................................30
.III.3. Các quyền trong việc khai báo và có tính bắt buột.......................................31
.III.4. Những quyền bắt buột có trong AndroidManifest.xml..................................33
.III.5. Việc tuân theo các quyền khi quảng bá các intent........................................33
.III.6. Cho phép thực thi các quyền khác.................................................................34
.III.7. Các tài nguyên và quốc tế hóa.......................................................................34
.IV Tìm hiểu về GPS.......................................................................................................36
.IV.1. Khái niệm GPS...............................................................................................36
.IV.2. Phân loại.........................................................................................................37
.IV.3. Sự hoạt động của Gps.....................................................................................37
i


.IV.4. Hệ thống vệ tinh Gps......................................................................................37
.IV.4.1. Phần không gian..........................................................................................38
.IV.4.2. Phần kiểm soát............................................................................................38

.IV.4.3. Phần sử dụng...............................................................................................38
.IV.5. Tín hiệu Gps...................................................................................................38
.IV.6. Nguồn lỗi của tín hiệu GPS............................................................................39
.IV.7. Ứng dụng GPS trong dân dụng......................................................................40
.IV.7.1. Ứng dụng trong lĩnh vực giáo dục...............................................................40
.IV.7.2. Ứng dụng gps trong lĩnh vực tài nguyên thiên nhiên..................................41
.IV.7.3. Ứng dụng GPS trong lĩnh vực Dầu & Khí đốt............................................41
.IV.7.4. Ứng dụng GPS trong Cơ quan chính phủ...................................................42

PHÂN TÍCH VÀ THIẾT KẾ CHƯƠNG TRÌNH......................................43
.I KHẢO SÁT, MÔ TẢ BÀI TOÁN...............................................................................43
.I.1. Xây dựng biểu đồ use case...............................................................................43
.I.1.1. Các tác nhân của hệ thống............................................................................43
.I.1.2. Phân tích các Use Case.................................................................................44
.I.2. Biều đồ tuần tự..................................................................................................50
.I.3. Biều đồ lớp........................................................................................................52
.I.3.1. Class gpsdevicesList......................................................................................52
.I.3.2. Class gpsDevices...........................................................................................52
.I.3.3. Class gpsHistory............................................................................................53
.II XÂY DỰNG CƠ SỞ DŨ LIỆU..................................................................................54

CÀI ĐẶT VÀ THỬ NGHIỆM......................................................................57
.I Yêu cầu đối với hệ thống.............................................................................................57
.II Cài đặt Android và Eclipse.........................................................................................58
.II.1. Download Android SDK..................................................................................58
.II.2. Tích hợp Android SDK vào Eclipse................................................................60
.II.3. Android Virtual Devices..................................................................................62
.II.4. Cài đặt chương trình Gps_Tracker..................................................................63
.II.4.1. Cài đặt chương trình trên Emulator............................................................63
.II.4.2. Cài đặt chương trình vào Eclipse................................................................64

.III Kết quả Demo chương trình......................................................................................66
.III.1. Kết quả ở client ( trên thiết bị android).........................................................66
.III.1.1. Màn hình khởi động chương trình..............................................................66
.III.1.2. Màn hình About..........................................................................................67
.III.1.3. Màn hình Login..........................................................................................68
.III.1.4. Màn hình View Map....................................................................................69
.III.2. Kết quả trên server.........................................................................................71
.III.2.1. Giao diện chính của người sử dụng trên server.........................................71
.III.2.2. Thêm mới một thiết bị mới..........................................................................72
.III.2.3. Xem lại history của thiết bị.........................................................................73
.III.2.4. Xem lại đường đi của thiết bị.....................................................................73
.III.2.5. Xem vị trí hiện tại của 1 thiết bị.................................................................74

KẾT LUẬN.....................................................................................................75
.I Kết quả đạt được.........................................................................................................75
.II Hướng phát triển.........................................................................................................75
[1] W. Frank Ableson, Charlie Collins, Robin . Unlocking Android................................1
ii


Mục lục

iii

[2] Mark L. Murphy. Beginning Android..........................................................................1
[3] Mark L. Murphy. The Busy Coder’s Guide to Android Development........................1
[4] ThS. Trịnh Công Duy. Sildes Android.........................................................................1
[5] Trang web : />[6] Trang web: />[7] Và một số diễn đàn android. .......................................................................................1



Mục lục

iv

DANH MỤC HÌNH
HÌNH 1 GIỚI THIỆU ANDROID.................................................................3
HÌNH 2 KIẾN TRÚC ANDROID..................................................................5
HÌNH 3 BIỂU ĐỒ MÔ TẢ ACTIVITY STATE...........................................9
HÌNH 4 SERVICE LIFECYCLE.................................................................15
HÌNH 5 VÍ DỤ CONTENT PROVIDER.....................................................17
HÌNH 6 CÁC TÁC NHÂN CỦA HỆ THỐNG............................................43
HÌNH 7 USE CASE NGƯỜI SỬ DỤNG Ở CLIENT.................................44
HÌNH 8 USE CASE NGƯỜI SỬ DỤNG Ở SERVER................................47
HÌNH 9 BIỂU ĐỒ TUẦN TỰ NGƯỜI DÙNG Ở CLIENT.......................50
HÌNH 10 BIỂU ĐỒ TUẦN TỰ NGƯỜI DÙNG Ở SERVER....................51
HÌNH 11 BIỂU ĐỒ LỚP...............................................................................52
HÌNH 12 CƠ SỞ DỮ LIỆU...........................................................................54
HÌNH 13 CÀI ĐẶT SDK...............................................................................58
HÌNH 14 TÍCH HỢP SDK VÀO ECLIPSE................................................60
HÌNH 15 CREATE VÀ START 1 AVD........................................................63
HÌNH 16 MÀN HÌNH KHỞI ĐỘNG CHƯƠNG TRÌNH.........................66
HÌNH 17 MÀN HÌNH ABOUT....................................................................67
HÌNH 18 MÀN HÌNH LOGIN.....................................................................68
HÌNH 19 MÀN HÌNH VIEW MAP.............................................................69
HÌNH 20 MÀN HÌNH CONFIG..................................................................70
HÌNH 21 GIAO DIỆN CHÍNH CỦA NGƯỜI SỬ DỤNG TRÊN SERVER
.........................................................................................................................71
HÌNH 22 FORM THÊM MỚI MỘT THIẾT BỊ.........................................72
HÌNH 23 TRANG XEM HISTORY CỦA THIẾT BỊ.................................73
HÌNH 24 TRANG XEM LẠI ĐƯỜNG ĐI CỦA THIẾT BỊ......................73

HÌNH 25 TRANG XEM VỊ TRÍ HIỆN THỜI CỦA MỘT THIẾT BỊ.....74


MỞ ĐẦU
.I

BỐI CẢNH ĐỀ TÀI

Trong nhu cầu thực tế của cuộc sống, việc quản lý và xác định vị trí các thông tin của
người sử dụng đối với các lĩnh vực mình cần quản lý ngày càng lớn. Ví dụ như việc quản lý
các loại hang hóa đang được vận chuyển, quản lý con cái, quản lý tiến trình, lộ trình của
một dịch vụ vận chuyển nào đó như EMS, DHL.
Với sự phát triễn của các thiết bị di động. Đặt biệt là thiết bị di động chạy trên hệ điều
hành Android của google. Android đã thu hút được sự chú ý của giới công nghệ khắp toàn
cầu khi đứa con của Google sẽ sử dụng giấy phép mã nguồn mở. Đó là một sản phẩm kết
tinh từ ý tưởng của Khối Liên minh thiết bị cầm tay mở do Google dẫn đầu, gồm 34 thành
viên với các công ty hàng đầu về công nghệ và di động toàn cầu như Qualcomm, Intel,
Motorola, Texas Instruments và LG Electronics, các nhà mạng như T-Mobile, Sprint Nextel,
NTT DoCoMo và China Mobile. Các nhà phát triển có thể sử dụng miễn phí bộ Android
Software Development Kit (SDK) để xây dựng các ứng dụng của mình.
Android là một lĩnh vực còn khá mới ở Việt Nam, do đó để phục vụ cho nhu cầu thực tế
trên và tìm hiểu công nghệ của Android, em đã chọn đề tài “ Gps – Tracker “

.II MỤC ĐÍCH VÀ Ý NGHĨA
Luận văn nhằm mục đích xây dựng một chương trình chạy trên hệ điều hành Android để
cung cấp địa chỉ hiện thời của người sử dụng lên Server. Người quản lý các thiết bị đó ở
server có thể đăng nhập để xem vị trí hiện tại của thiết bị mình đang quản lý ở tại vị trí nào,
có thể xem lại lịch trình, đường đi của thiết bị đó.

.III NHIỆM VỤ THỰC HIỆN

Cần thực hiện hai bước:


Bước 1: Xây dựng chương trình cho client ( các thiết bị di động sử dụng hệ điều
hành android)



Bước 2: Xây dựng một web server để hiển thì các thông tin cho người quản lý.

.IV PHƯƠNG PHÁP THỰC HIỆN
Nghiên cứu các vấn đề lý thuyết cơ sở của andoid
Tìm hiều về api google map để xây dựng hệ thống gps_tracker dựa vào Api này của
google
Xây dựng chương trình trên android để thu thập và cập nhật dữ liệu cho server.
Xây dựng trang web sử dụng nền tảng Joomla để hiển thị các thông tin cập được cập
nhật
Nghiên cứu plugin google map của joomla để vẽ bản đồ và đường đi của các thiết bị
1


CHƯƠNG 1

CƠ SỞ LÝ THUYẾT
.I

Giới thiệu về Android

Hình 1 Giới thiệu android
Android là tên một nền tảng mở cho thiết bị di động của Google (gồm hệ điều hành –

[linux base], middleware và một số ứng dụng cơ bản). Androind sẽ đương đầu với một số hệ
điều hành dành cho thiết bị di dộng khác đang hâm nóng thị trường như Windows Mobile,
Symbian và dĩ nhiên là cả OS X (iPhone).
Android đã thu hút được sự chú ý của giới công nghệ khắp toàn cầu khi đứa con của
Google sẽ sử dụng giấy phép mã nguồn mở. Đó là một sản phẩm kết tinh từ ý tưởng của
Khối Liên minh thiết bị cầm tay mở do Google dẫn đầu, gồm 34 thành viên với các công ty
hàng đầu về công nghệ và di động toàn cầu như Qualcomm, Intel, Motorola, Texas
Instruments và LG Electronics, các nhà mạng như T-Mobile, Sprint Nextel, NTT DoCoMo
và China Mobile. Các nhà phát triển có thể sử dụng miễn phí bộ Android Software
Development Kit (SDK) để xây dựng các ứng dụng của mình

.I.1.

Tính năng mở của android

Android được xây dựng để cho phép các nhà phát triển để tạo ra các ứng dụng di động
hấp dẫn tận dụng tất cả một chiếc điện thoại đã cung cấp. Nó được xây dựng để được thực
sự mở. Ví dụ, một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại như thực
hiện cuộc gọi, gửi tin nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà
phát triển để tạo ra phong phú hơn và nhiều hơn nữa những kinh nghiệm cố kết cho người
dùng. Android được xây dựng trên mở Linux Kernel. Hơn nữa, nó sử dụng một máy ảo tuỳ
chỉnh được thiết kế để tối ưu hóa bộ nhớ và tài nguyên phần cứng trong một môi trường di
động. Android là mã nguồn mở, nó có thể được liberally mở rộng. Nền tảng này sẽ tiếp tục
Ngô Văn Trung, Lớp: 06T3

3


tiến triển như cộng đồng nhà phát triển công việc cùng nhau để xây dựng các ứng dụng di
động sáng tạo.

Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng của bên
thứ ba. Họ tất cả có thể được xây dựng để có thể truy cập bằng khả năng của một người
cung cấp cho người sử dụng điện thoại với một dải rộng các ứng dụng và dịch vụ. Với các
thiết bị xây dựng trên Hệ điều hành Android, người dùng có thể hoàn toàn thích ứng với
điện thoại đến lợi ích của họ. Họ có thể trao đổi trên màn hình của điện thoại, những phong
cách của dialer, hoặc bất kỳ ứng dụng. Họ thậm chí có thể hướng dẫn điện thoại của họ để
sử dụng hình ảnh ưa thích của họ xem các ứng dụng để xử lý xem tất cả các hình ảnh.
Android phá bỏ rào cản để xây dựng các ứng dụng mới và sáng tạo. Ví dụ, một nhà phát
triển có thể kết hợp thông tin từ các trang web với dữ liệu trên điện thoại di động của một
cá nhân – ví dụ như địa chỉ liên hệ của người dùng, lịch, hoặc vị trí địa lý – để cung cấp
một trải nghiệm người dùng có liên quan hơn. Với Android, một nhà phát triển có thể xây
dựng một ứng dụng cho phép người dùng xem vị trí của bạn bè của họ và được cảnh báo khi
họ đang có trong vùng phụ cận cho họ một cơ hội để kết nối.
Nền tảng Android cho phép xây dựng các ứng dụng dựa vào các tính chất sau:
- Khung ứng dụng (application framework): cho phép dùng lại và thay thế các thành
phần.
- Máy ảo Dalvik: tùy chọn cho các di động.Cơ chế hoạt động của nó tương tự như máy
ảo Java nhưng nó thực thi dex (dalvik executable) bytecode nhờ công cụ dx chuyển đổi mã
bytecode thành dex bytecode.
- Trình duyệt được tích hợp (integrated browser): dựa trên công cụ nguồn mở WebKit.
- Đồ họa: được trang bị bởi các thư viện 2D thông thường, đồ họa 3D dựa trên sự đặc tả
của OpenGL ES 1.0 (để máy chạy nhanh hơn có thể tùy chọn phần cứng).
- Cơ sở dữ liệu SQLite: dùng cho cấu trúc bộ lưu trữ dữ liệu.
- Môi trường truyền thông: cung cấp tiếng, hình ảnh thông dụng, và một số định dạng
ảnh như MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF.
- Môi trường phát triển đầy đủ: chứa một thiết bị mô phỏng, các công cụ phát hiện lỗi,
bộ nhớ, hiện trạng thực thi, và một phần mềm cài đặt dùng IDE Eclipse.
Ngoài ra còn hỗ trợ các ứng dụng tích hợp các công nghệ mới hiện nay như hệ thống
truyền thông di động toàn cầu GMS, Bluetooth, EDGE, 3G, WiFi, Camera, GPS, compass,
và accelerometer (các công nghệ này khi dùng còn phụ thuộc vào thiết bị).


Ngô Văn Trung, Lớp: 06T3

4


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động

.I.2.

Các thành phần cơ bản của Android

Biểu đồ dưới đây thể hiện các thành phần chính của hệ điều hành Android:

Hình 2 Kiến trúc android
Bên trong Android bao gồm một nhân Linux, tiếp đến là các thư viện, chúng là lớp nằm
trên nhân, trên nữa là các framework và cuối cùng là những lớp ứng dụng.
Lớp thư viện chính là nơi để thực hiện các đoạn mã cho các thực thể như bộ xử lý đa
phương tiện dùng xem/ghi lại âm thanh và hình ảnh, nhân của trình duyệt Web, tiến trình
biên dịch kiểu chữ, và bộ máy cơ sở dữ liệu SQLite.
Quá trình thực thi của Android cũng được thực hiện tại lớp thư viện này.
Nằm trên thư viện chính là các framework, đó là tập hợp các dịch vụ có thể dùng lại
được và những thành phần chung phục vụ cho các ứng dụng. Ví dụ, một loại framework là
thành phần cung cấp nội dung cho bất kỳ dịch vụ nào có liên quan đến việc lưu trữ và truy
xuất dữ liệu. Giao diện ứng dụng trong SQLite chính là một thí dụ cụ thể về trình cung cấp
nội dung này.
Các ứng dụng chạy ở lớp trên cùng của hệ điều hành với một bộ các nhân ứng dụng bao
gồm thư điện tử, lịch làm việc, trình duyệt web...Khi nhà phát triển viết một ứng dụng dành
cho Android, ta thực hiện các đoạn mã trong môi trường Java. Sau đó, các đoạn mã này sẽ
được biên dịch sang các bytecode của Java, tuy nhiên để thực thi được ứng dụng này trên

Android thì nhà phát triển phải thực thi một công cụ có tên là dx. Đây là công cụ dùng để
chuyển đổi bytecode sang một dạng gọi là dex bytecode. "Dex" là từ viết tắt của "Dalvik
executable" đóng vai trò như cơ chế ảo thực thi các ứng dụng Android.

Ngô Văn Trung, Lớp 06T3

5


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động

Các thư viện hỗ trợ trong android
Android chứa một tập các thư viện C/C++ được dùng bởi các thành phần khác nhau của
hệ thống Android. Các đặc tính này được nhận ra bởi các nhà phát triển qua các mẫu ứng
dụng Android. Một số thư viện chính được liệt kê dưới đây:
- Thư viện hệ thống C: có nguồn gốc thực thi từ thư viện hệ thống chuẩn C (libc), được
điều chỉnh cho phù hợp đối với các thiết bị nhúng vào Linux.
- Quản lý bề mặt (Surface Manager): quản lý việc truy cập cách hiển thị hệ thống con và
việc ghép liền nét các tầng đồ họa 2D và 3D từ nhiều ứng dụng
- Các thư viện môi trường truyền thông: dựa trên OpenCORE của PacketVideo, các thư
viện này cung cấp việc phát và ghi lại của các định dạng tiếng và hình thông dụng, cũng khá
hay như các tập tin hình ảnh tĩnh, chứa MPEG4, H.264, MP3, AAC, AMR, JPG, PNG.
- LibWebCore: một bộ duyệt web hiện đại cung cấp nguồn cho cả hai trình duyệt –trình
duyệt web của Android và một khung nhìn web có thể được nhúng vào.
- SGL: phần dưới của công cụ đồ họa 2D.
- Các thư viện 3D: một sự thực thi dựa trên các giao diện ứng dụng OpenGL ES 1.0; thư
viện này dùng cả phần cứng 3D khá mạnh cũng như phần mềm tạo vạch 3D tùy chọn ở mức
cao.
- FreeType: sự biểu diễn kiểu chữ của bitmap và vector.
- SQLite: Một công cụ cơ sở dữ liệu có dung lượng nhỏ với sự tương tác về dữ liệu khá

tốt, hỗ trợ cho tất cả các ứng dụng để thực hiện việc lưu trữ dữ liệu.

.I.2.1.

Quá trình thực thi một chương trình android

Android chứa một tập các thư viện chính cung cấp hầu hết các chức năng sẵn có trong
ngôn ngữ lập trình Java.
Mỗi ứng dụng Android chạy trên chính tiến trình của nó, với chính thực thể của máy ảo
Dalvik. Dalvik được viết với mục đích là một thiết bị có thể chạy hiệu quả trên nhiều máy
ảo. Máy ảo Dalvik thực thi các tập tin trong Dalvik Executable(.dev), định dạng này được
tùy chọn theo dấu bộ nhớ tối thiểu. Máy ảo phải được đăng ký, sau đó mới có thể chạy các
định dạng dex. Định dạng này được tạo ra bởi công cụ “dx”, công cụ này chuyển đổi từ
file .class thành file .dex. Máy ảo Dalvik dựa vào nhân Linux để tạo các chức năng như tạo
luồng và quản lý bộ nhớ cấp độ thấp.

.I.2.2.

Cấu trúc của một ứng dụng android

Các nhà phát triển có toàn quyền truy cập đến cùng các khung giao diện ứng dụng từ các
ứng dụng lõi. Kiến trúc ứng dụng được thiết kế nhằm đơn giản việc dùng lại các thành
phần, bất cứ ứng dụng nào đều có thể đưa ra các dặc tính của nó và các ứng dụng khác bất
kì sau đó đều có thể dùng lại những đặc tính này (tùy thuộc vào các ràng buộc an toàn đòi
hỏi từ khung ứng dụng). Người dùng được quyền thay thế các thành phần nếu cùng cơ chế
này.

Ngô Văn Trung, Lớp 06T3

6



Xây dựng hệ thống Gps_Tracker trên các thiết bị di động
Ở dưới các ứng dụng là tập các dịch vụ và hệ thống, hay nói cách khác thì khung ứng
dụng bao gồm các thành phần thông dụng sau:
- Có rất nhiều các thành phần có thể mở rộng của Views : có thể được dùng để tạo một
ứng dụng, gồm các list, grid, textbox, button, và ngay cả việc nhúng vào một trình duyệt
web.
- Trình cung cấp nội dung (Content Providers) : cho phép các ứng dụng truy cập dữ liệu
từ các ứng dụng khác (như Contacts), hay để chia sẻ chính dữ liệu của ứng dụng đó.
- Trình quản lý tài nguyên (Resourse Manager) : cung cấp sự truy cập đến các tài nguyên
không có mã hóa như các string riêng lẻ, đồ họa, các tập tin layout.
- Trình quản lý thông báo (Notification Manager) : cho phép tất cả các ứng dụng hiển thị
các cảnh báo thông dụng trên thanh trạng thái.
- Trình quản lý hoạt động (Activity Manager) : quản lý vòng đời của các ứng dụng và
cung cấp một sự điều hướng thông dụng để khi thực thi Android có thể nhận biết được danh
sách các hoạt động cần được tạo ra trong một ứng dụng.
Ngoài ra còn có một số dịch vụ khác như Package Manager, Window Manager,
Telephony Manager, Location Manager, XMPP Service.

.II Nghiên cứu nền tảng android
.II.1. Bộ khung của một ứng dụng android
Để tạo nên một ứng dụng android thì bao gồm nhiều thành phần. Các thành phần này
được chia làm 6 loại cơ bản sau:


Activity: là nền của 1 ứng dụng. Khi khởi động 1 ứng dụng Android nào đó thì
bao giờ cũng có 1 main Activity được gọi, hiển thị màn hình giao diện của ứng
dụng cho phép người dùng tương tác.




Service: thành phần chạy ẩn trong Android. Service sử dụng để update dữ liệu,
đưa ra các cảnh báo (Notification) và không bao giờ hiển thị cho người dùng
thấy.



Content provider: kho dữ liệu chia sẻ. Content Provider được sử dụng để quản
lý và chia sẻ dữ liệu giữa các ứng dụng.



Intent: nền tảng để truyền tải các thông báo. Intent được sử dụng để gửi các
thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc mong

Ngô Văn Trung, Lớp 06T3

7


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động
muốn. VD: khi mở 1 trang web, thì gửi 1 intent đi để tạo 1 activity mới hiển thị
trang web đó.


Broadcast Receiver: thành phần thu nhận các Intent bên ngoài gửi tới. VD: khi
viết 1 chương trình thay thế cho phần gọi điện mặc định của Android, khi đó cần
1 BR để nhận biết các Intent là các cuộc gọi tới.




Notification: đưa ra các cảnh báo mà không làm cho các Activity phải ngừng
hoạt động.

Trong đó Activity, Service, Broadcast Receiver và Content Provider mới là những thành
phần chính cấu thành nên ứng dụng Android, bắt buộc phải khai báo trong AndroidManifest.

.II.1.1.

Android Activity

Các Activity là hoạt động cơ bản nhất trong 4 khối xây dựng nên một ứng dụng Adroid.
Một Activity là luôn luôn là một màn hình đơn trong ứng dụng. Mỗi Activity thực thi như
một lớp đơn được dẫn xuất từ lớp cơ sở Activity. Lớp này sẽ hiển thị giao diện người dùng
chứa các Views và phản hồi lại những sự kiện. Hầu hết các ứng dụng đều có nhiều màn
hình. Ví dụ, một đoạn tin nhắn ứng dụng có khả năng hiển thị trên một màn hình sẽ chỉ ra
một danh sách của các contacts để gởi tin nhắn, màn hình thứ hai dùng để viết tin nhắn theo
các contact đã chọn, các màn hình khác dùng để xem lại các tin nhắn hoặc thay đổi chế độ
thiết lập. Mỗi màn hình sẽ được thực thi như là một Activity. Di chuyển tới một màn hình
hiển thị khác khác với màn hình hiện hành bằng cách bắt đầu một hoạt động mới, nhưng
màn hình hiện hành phải thực hiện xong các Activity của nó (điều này có nghĩa là giao diện
ứng dụng của Activity phải được hoàn thành). Trong một số trường hợp một hoạt động có
thể trả về một giá trị cho hoạt động liền trước - ví dụ, một hoạt động đó cho phép người
dùng chọn một hình ảnh sẽ trả về hình ảnh được chọn từ đối tượng gọi.
Hệ điều hành Android quản lý Activity theo dạng stack: khi một Activity mới được khởi
tạo, nó sẽ được xếp lên đầu của stack và trở thành running activity, các Activity trước đó sẽ
bị tạm dừng và chỉ hoạt động trở lại khi Activity mới được giải phóng.
Một Activity gồm có 4 trạng thái sau:



Active (running): Activity đang hiển thị trên màn hình (foreground).



Paused: Activity vẫn hiển thị (visible) nhưng không thể tương tác. VD: một
activity mới xuất hiện hiển thì giao diện đè lên trên activity cũ, nhưng giao diện
này nhỏ hơn giao diện của activity cũ, do đó ta vẫn thấy được 1 phần giao diện
của activity cũ nhưng lại không thể tương tác với nó.



Stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop

Ngô Văn Trung, Lớp 06T3

8


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động


Killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên
tắc ưu tiên. Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng
và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và
phục hồi lại trạng thái trước đó.

Biểu đồ mô tả activity state:

Hình 3 Biểu đồ mô tả activity state

Có 3 looper chính mà bạn có thể quan tâm để giám sát các Activity của mình:


Toàn bộ thời gian sống của một hoạt động xảy ra giữa lần gọi đầu tiên
onCreat(Bundle) và lần gọi cuối cùng onDestroy() (giữa phương thức khởi tạo và
xóa bỏ của một Activity). Một hoạt động khởi tạo tất cả các trạng thái “toàn cục”
trong onCreat(), và giải phóng tất cả mọi tài nguyên còn lại trong onDestroy().

Ngô Văn Trung, Lớp 06T3

9


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động
Cho ví dụ, nếu có một luồng thread đang chạy trên nền nhằm tải dữ liệu từ mạng,
nó có thể bắt đầu thread trong onCreate() và sau đó dừng thread trong
onDestroy().


Thời gian sống chính của một hoạt động xảy ra giữa một lần gọi onStart() đến
khi xuất hiện một cuộc gọi tương ứng đến onStop(). Trong suốt thời gian này
người dùng có thể nhìn thấy Activity này trên màn hình, và tương tác trực tiếp
với nó. Giữa hai phương thức bạn có thể duy trì nguồn tài nguyên, điều đó là điều
cần thiết để hiển thị Activity đến người sử dụng. Cho ví dụ, bạn có thể đăng ký
một IntentReceiver tại onStart() để giám sát các thay đổi ảnh hưởng đến giao diện
mà bạn đang tạo ra, và khi bạn không đăng ký trên onStop() thì người dùng không
duy trì được giao diện mà bạn đang hiển thị theo ý muốn của họ. Các phương
thức onStart() và onStop() có thể đã được gọi nhiều lần, khi Activity là trực quan
hay ẩn đi đối với người sử dụng.




Tiền cảnh thời gian sống của một Activity xảy ra giữa một cuộc gọi
onResume() trước khi có một cuộc gọi tương ứng đến onPause(). Trong suốt thời
gian này Activity này ở phía trước của tất cả những hoạt động khác và ảnh hưởng
đến người sử dụng. Một Activity có thể thường xuyên xảy ra giữa lúc những
trạng thái hồi phục lại và tạm dừng – cho ví dụ khi thiết bị đang nghỉ, khi đó là
kết quả của một Activity đã được sinh ra, từ một intent mới đã được tạo – vì thế
đoạn mã trong những phương thức này khá gọn nhẹ.

Toàn bộ vòng đời của một Activity đều được định nghĩa bởi những phương thức của
Activity. Tất cả các phương thức này đều riêng biệt, bạn có thể ghi đè lên chúng cho phù
hợp khi Activity thay đổi trạng thái. Tất cả mọi Activity đều thực thi onCreate(Bundle) để
thực hiện thiết lập lúc ban đầu, đôi lúc Activity sẽ cũng thực thi onPausse() giữ các thay
đổi của dữ liệu và mặt khác phải chuẩn bị để ngừng tương tác với người dùng. Cũng có
nhiều hoạt động cũng thực thi onFreeze() và thực hiện việc lấy lại trạng thái tương ứng
trong onCreate(Bundle). Những phương thức khác có thể thực thi khi cần. Bạn nên luôn
luôn gọi lớp cha Activity khi thực thi những phương thức này.

public class Activity extends ApplicationContext {
protected void onCreate(Bundle icicle);
protected void onStart();

Ngô Văn Trung, Lớp 06T3

10


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động


protected void onRestart();
protected void onResume();
protected void onFreeze(Bundle outIcicle);
protected void onPause();
protected void onStop();
protected void onDestroy();
}

.II.1.2.

Intent và Broadcast Receiver

.1 Khái niệm intent
Theo định nghĩa của Google, Intent là một miêu tả về một hoạt động cần được thực hiện.
Còn nói một cách đơn giản và dễ hiểu hơn, Intent là một cơ cấu cho phép truyền thông điệp
giữa các thành phần của 1 ứng dụng và giữa các ứng dụng với nhau.
.2 Các thuộc tính của intent


Action: là hành động được thực hiện, vd : ACTION_VIEW, ACTION_MAIN



data: là dữ liệu sẽ được xử lý trong action, thường được diễn tả là một Uri
(Uniform Resource Identifier)



Ví dụ:
 ACTION_VIEW content://contacts/people/1 hiển thị thông tin người dùng

với mã danh là 1.
 ACTION_DIAL content://contacts/people/1 – Hiển thị màn hình gọi đến
người có mã danh là 1.
 ACTION_DIAL tel:123 - Hiển thị màn hình gọi với số gọi là 123.



Category:

bổ

sung

thêm

thông

tin

cho

action

của

Intent.

VD:

CATEGORY_LAUNCHER thông báo sẽ thêm vào Launcher như là một ứng

dụng top-level.
Ngô Văn Trung, Lớp 06T3

11


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động


Type: chỉ rõ kiểu của data.



component: chỉ rõ thành phần sẽ nhận và xử lý intent. Khi thuộc tính này được
xác định thì các thuộc tính khác sẽ trở thành thuộc tính phụ.



Extras: mang theo đối tượng Bundle chứa các giá trị bổ sung.

.3 Phân loại intent
Intent được chia ra làm 2 loại:


Explicit Intents: intent đã được xác định thuộc tính component, nghĩa là đã chỉ
rõ thành phần sẽ nhận và xử lý intent. Thông thường intent dạng này sẽ không bổ
sung thêm các thuộc tính khác như action, data. Explicit Intent thương được sử
dụng để khởi chạy các activity trong cùng 1 ứng dụng.




Implicit Intents: Intent không chỉ rõ component xử lý, thay vào đó nó bổ sung
thông tin trong các thuộc tính. Khi intent được gửi đi, hệ thống sẽ dựa vào những
thông tin này để quyết định component nào thích hợp nhất để xử lý nó.



VD:
ACTION_DIAL tel:123 thông thường sẽ được hệ thống giao cho activity Phone
Dialer mặc định của Android xử lý.

.4 Một số action thường dùng trong intent


ACTION_ANSWER - mở Activity để xử lý cuộc gọi tới, thường là Phone
Dialer của Android.



ACTION_CALL - mở 1 Phone Dialer (mặc định là PD của Android) và ngay lập
tức thực hiện cuộc gọi dựa vào thông tin trong data URI.



ACTION_DELETE - mở Activity cho phép xóa dữ liệu mà địa chỉ của nó chứa
trong data URI.



ACTION_DIAL - mở 1 Phone Dialer (mặc định là PD của Android) và điền

thông tin lấy từ địa chỉ chứa trong data URI.

Ngô Văn Trung, Lớp 06T3

12


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động


ACTION_EDIT - mở 1 Activity cho phép chỉnh sửa dữ liệu mà địa chỉ lấy từ
data URI.



ACTION_SEND - mở 1 Activity cho phép gửi dữ liệu lấy từ data URI, kiểu của
dữ liệu xác định trong thuộc tính type.



ACTION_SENDTO - mở 1 Activity cho phép gửi thông điệp tới địa chỉ lấy từ
data URI.



ACTION_VIEW - action thông dụng nhất, khởi chạy activity thích hợp để hiển
thị dữ liệu trong data URI.




ACTION_MAIN - sử dụng để khởi chạy 1 Activity.

.5 Intent Filter
Activity, Service và BroadCast Receiver sử dụng Intent Filter để thông báo cho hệ thống
biết các dạng Implicit Intent mà nó có thể xử lý. Nói cách khác, Intent Filter là bộ lọc
Intent, chỉ cho những Intent được phép đi qua nó.
Intent Filter mô tả khả năng của component định nghĩa nó. Khi hệ thống bắt được 1
Implicit Intent (chỉ chứa 1 số thông tin chung chung về action, data và category...), nó sẽ sử
dụng những thông tin trong Intent này, kiểm tra đối chiếu với Intent Filter của các
component các ứng dụng, sau đó quyết định khởi chạy ứng dụng nào thích hợp nhất để xử
lý Intent bắt được. Nếu có 2 hay nhiều hơn ứng dụng thích hợp, người dùng sẽ được lựa
chọn ứng dụng mình muốn.

Ngô Văn Trung, Lớp 06T3

13


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động

VD:

android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.CALL_BUTTON"/>

<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

.II.1.3.

Android Service

Service là 1 trong 4 thành phần chính trong 1 ứng dụng Android ( Activity, Service,
BroadcastReceiver, ContentProvider) thành phần này chạy trong hậu trường và làm những
công việc không cần tới giao diện như chơi nhạc, download, xử lí tính toán…
Một Service có thể được sử dụng theo 2 cách:


Nó có thể được bắt đầu và được cho phép hoạt động cho đến khi một người nào
đó dừng nó lại hoặc nó tự ngắt. Ở chế độ này, nó được bắt đầu bằng cách gọi
Context.startService() và dừng bằng lệnh Context.stopService(). Nó có thể tự
ngắt bằng lệnh Service.stopSelf() hoặc Service.stopSelfResult(). Chỉ cần một
lệnh stopService() để ngừng Service lại cho dù lệnh startService() được gọi ra
bao nhiêu lần



Service có thể được vận hành theo như đã được lập trình việc sử dụng một
Interface mà nó định nghĩa. Các người dùng thiết lập một đường truyền tới đối
tượng Service và sử dụng đường kết nói đó để thâm nhập vào Service. Kết nối
này được thiết lập bằng cách gọi lệnh Context.bindService() và được đóng lại

Ngô Văn Trung, Lớp 06T3


14


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động
bằng cách gọi lệnh Context.unbindService(). Nhiều người dùng có thể kết nối tới
cùng một thiết bị. Nếu Service vẫn chưa được khởi chạy, lệnh bindService() có
thể tùy ý khởi chạy nó. Hai chế độ này thì không tách biệt toàn bộ. Bạn có thể kết
nối với một Service mà nó đã được bắt đầu với lệnh startService().
Biểu đồ mô tả Service lifecycle

Hình 4 Service lifecycle
Giống như một Activity, một Service cũng có các phương thức chu kỳ thời gian mà bạn
có thể cài đặt để kiểm soát những sự thay đổi trong trạng thái của nó. Những những phương
thức của Service thì ít hơn là của Activity – chỉ có 3- và chúng thì được sử dụng rộng rãi,
không được bảo vệ.
void onCreate()
void onStart(Intent intent)
void onDestroy()


Entire lifetime của một Service diễn ra giữa thời gian onCreate() được gọi ra và
thời gian mà onDestroy() trả lại. Giống như một Activity, một Service lại tiết

Ngô Văn Trung, Lớp 06T3

15


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động
hành cài đặt ban đầu ở onCreate(), và giải phóng tát cả các tài nguyên còn lại ở

onDestroy().


Active lifetime của một Service bắt đầu bằng một lệnh tới onStart(). Đây là
phương thức được chuyển giao đối tượng Intent mà đã được thông qua để tới
startService().



Không có callback tương đương nào cho thời điểm service dừng lại, không có
phương thức onstop(). Các phương thức onCreate() và onDestroy() được gọi cho
tất cả các Service dù chúng có được bắt đầu bằng Context.startService() hoặc
Context.bindService() hay không. Tuy nhiên thì, onStart() chỉ được gọi ra đối với
các Service bắt đầu bằng startService().Nếu một Service cho phép những Service
khác kết nối với nó thì sẽ có thêm các phương thức callback dành cho Service đó
để thực hiên.

.II.1.4.

Content provider

Một Content Provider cung cấp một tập chi tiết dữ liệu ứng dụng đến các ứng dụng khác.
Thường được sử dụng khi chúng ta muốn tạo cơ sở dữ liệu dưới dạng public ( các ứng dụng
khác có thể truy xuất).
Dữ liệu thường được lưu trữ ở file hệ thống, hoặc trong một SQLite database.
Đơn giản để các bạn có thể hình dung như : Danh bạ, Call log, cấu hình cài đặt...trên điện
thoại là dữ liệu dưới dạng Content Provider.
Content Provider hiện thực một tập phương thức chuẩn mà các ứng dụng khác có thể truy
xuất và lưu trữ dữ liệu của loại nó điều khiển.
Tuy nhiên, những ứng dụng không thể gọi các phương thức trực tiếp. Hơn thế chúng dùng

lớp Content Resolver và gọi những phương thức đó.
Một Content Resolver có thể giao tiếp đến nhiều content provider; nó cộng tác với các
provider để quản lý bất kỳ giao tiếp bên trong liên quan.

Ngô Văn Trung, Lớp 06T3

16


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động

Ví dụ một ứng dụng nhỏ để lấy tất cả thông tin cấu hình load lên list view.

Hình 5 Ví dụ content provider.

Ngô Văn Trung, Lớp 06T3

17


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động

.II.1.5.

Android SQLite Database

Android sử dụng SQLite làm nền tảng database cho việc truy xuất và khai thác dữ liệu,
SQLite vốn là Hệ CSDL quan hệ đơn giản dễ dùng và gọn nhẹ, nên được sử dụng trên rất
nhiều nền tảng di động.
Cách tạo và sử dụng cơ sở dữ liệu SQLite. Ví dụ tạo một cơ sở dữ liệu đơn giản user

gồm 2 trường ID và name, ngoài ra còn có các thao tác thêm, sửa, xóa.


Tạo cơ sở dữ liệu:
 Đầu tiên 1 class DBAdapter để xử lý tất cả các thao tác liên quan đến
CSDL.

public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";

private DatabaseHelper mDbHelper;
private SQLiteDatabase mDB;

private static final String DATABASE_CREATE = "create table users
(_id integer primary key autoincrement, "
+ "name text not null);";
private static final String DATABASE_NAME = "Database_Demo";
private static final String DATABASE_TABLE = "users";
private static final int DATABASE_VERSION = 2;

private final Context mContext;



Tạo

1

lớp


bên

trong

DBAdapter

được

extend

từ

lớp

SQLiteOpenHelper, override 2 phương thức onCreate() và onUpgrade() để quản
lý việc tạo CSDL và version của CSDL đó

Ngô Văn Trung, Lớp 06T3

18


Xây dựng hệ thống Gps_Tracker trên các thiết bị di động

private static class DatabaseHelper extends SQLiteOpenHelper{

public DatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}


@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
Log.i(TAG, "Upgrading DB");
db.execSQL("DROP TABLE IF EXISTS users");
onCreate(db);
}
}



Mở cơ sở dữ liệu

public DBAdapter open()
{
mDbHelper = new DatabaseHelper(mContext, DATABASE_NAME, null,
DATABASE_VERSION);

Ngô Văn Trung, Lớp 06T3

19



×