You are on page 1of 39

BÞ CÔNG TH¯¡NG

TR¯âNG Đ¾I HâC CÔNG NGHIÈP TP. HCM


KHOA CÔNG NGHÈ ĐIÈN TĀ

KHÓA LU¾N TÞT NGHIÈP


Đề tài:
TÌM HIÄU HÈ ĐIÂU HÀNH ANDROID VÀ XÂY DĀNG ĄNG
DĀNG TÌM Đ¯âNG ĐI

GVHD : ThS. TR¾N HàNG VINH


SVTH : PH¾M THà H¯¡NG MSSV: 14016211
NGUYÆN THà THU THĂY MSSV: 14058751
CHUYÊN NGÀNH : ĐIÈN TĀ MÁY TÍNH
HÈ ĐÀO T¾O : CHÍNH QUY
NIÊN KHÓA : 2014-2018

Thành phß Há Chí Minh, tháng 05 năm 2018


LâI Mä Đ¾U

Ngày nay với sự phát triển không ngừng cÿa xã hội thì nhu cầu cÿa con người
cũng ngày càng tăng, đặc biệt là nhu cầu về việc sử dụng công nghệ hỗ trợ cho
cuộc sống hằng ngày. Nắm bắt được nhu cầu đó mà các công ty không ngừng đổi
mới, tạo ra nhiều công nghệ hơn. Trong đó ta thấy nổi bật nhất hiện nay đó là công
nghệ di động, các āng dụng trên di động.

Bên cạnh đó việc lập trình nên những āng dụng trên website cũng phát triển
không ngừng và không giới hạn cho sự sang tạo cÿa con người đối với cuộc
sống cÿa chính họ.Tuy nhiên để nó có thể phổ biến thì trước hết nó phải có
ích và dễ dàng sử dụng,giá cả hợp lý để người ta có thể sử dụng nó một cách
hiệu quả nhất.

Khóa luận < Tìm hiÅu Android và xây dāng ąng dāng tìm đ°ãng đi = với
mục đích nghiên cāu và xây dựng một āng dụng áp dụng công nghệ đi động để
đơn giản hóa việc tìm đường và các địa điểm lân cận như ATM, trạm xăng và ngân
hàng. Với āng dụng này người sử dụng có thể dễ dàng biết được vị trí cÿa mình,
cũng như tìm đường đi và địa điểm một cách nhanh chóng và chính xác tại bất kỳ
nơi nào.
LâI CÀM ¡N

Trong quá trình thực hiện bài khóa luận này, nhóm đã may mắn nhận được sự
giúp đỡ rất nhiều từ quý thầy cô. Trước hết, nhóm xin gửi lời tri ân sâu sắc nhất
đến quý thầy cô khoa Công nghệ Điện tử, cũng như quý thầy cô cÿa các khoa và
bộ môn trường Đại học Công nghiệp Tp.HCM đã nhiệt tình truyền đạt kiến thāc và
các kinh nghiệm thực tế, đặc biệt là Thầy Trần Hồng Vinh, người đã hết sāc quan
tâm và nhiệt tình hướng dẫn nhóm hoàn thành bài khóa luận này.

Cuối cùng, nhóm xin gửi lời chúc sāc khỏe và thành công đến quý thầy cô
khoa Công nghệ Điện tử trường Đại học Công nghiệp Tp.HCM.

Mặc dù nhóm đã rất cố gắng Tuy nhiên với kiến thāc cũng như kinh nghiệm
còn hạn chế trong quá trình làm khóa luận sẽ không tránh khỏi những thiếu
sót. Rất mong nhận được sự góp ý quý báu cÿa quý thầy cô và bạn bè để khóa
luận được hoàn chỉnh hơn.

Thành phố Hồ Chí Minh, ngày 31 tháng 12 năm 2011

Nhóm thực hiện

NguyÇn Thá Thu Thăy – Ph¿m Thá H°¢ng


NH¾N XÉT CĂA GIÀNG VIÊN H¯àNG DẪN

Bộ môn : Điện Tử Máy Tính


Giảng viên hướng dẫn : ThS. Trần Hồng Vinh

………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………

TP. Hồ Chí Minh, ngày……, tháng 06 năm 2018


Xác nhận cÿa giảng viên hướng dẫn
NH¾N XÉT CĂA GIÁO VIÊN PHÀN BIÈN

………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
……………………………………………………………………………….............
.....................................................................................................................................

TP. Hồ Chí Minh, ngày……, tháng 06 năm 2018


Xác nhận cÿa giảng viên phản biện
MĀC LĀC

CH¯¡NG 1 : GIàI THIÈU ....................................................................................8


1.1 Giái thiÉu đà tài ...............................................................................................8
1.2 Māc tiêu đà tài .................................................................................................9
CH¯¡NG 2 :TâNG QUAN V ANDROID.......................................................10
2.1 Tãng quan và Android..................................................................................10
2.1.1 Khái niÉm Android .................................................................................10
2.1.2 Tính năng c¢ bÁn căa Android..............................................................10
2.1.3 KiÁn trúc Android ......................................................................................10
2.1.3.1 Linux kernel (nhân Linux) .................................................................10
2.1.3.2 Libraries ...............................................................................................11
2.1.3.3 Android runtime ..................................................................................11
2.1.3.4 Application framework .......................................................................11
2.1.3.5 Applications ..........................................................................................12
2 .2 Các khái niÉm c¢ bÁn trong l¿p trình ąng dāng Android .......................12
2.2.1 Các thành ph¿n căa mßt ąng dāng ...................................................12
2.2.1.1 Activity ..................................................................................................12
2.2.1.2 Service ...................................................................................................13
2.2.1.3 Broadcast receivers.............................................................................13
2.2.1.4 Content providers ...............................................................................13
2.3 Vòng đãi các thành ph¿n .............................................................................16
2.4 Công cā phát triÅn ........................................................................................21
CH¯¡NG 3: TâNG QUAN V GOOGLE MAP API ......................................21
3.1 Tãng quan và Google Maps API..................................................................21
3.2 Mßt sß ąng dāng có thÅ xây dāng tÿ viÉc sā dāng Google Maps API .....22
3.3 Cách đăng kí và sā dāng Google maps API ...............................................23
3.3.1 Cách đăng ký 1 API KEY ......................................................................23
3.3.2 Láp phă (Overlays) căa Google Map API ...........................................24
CH¯¡NG 4: THIÀT KÀ VÀ XÂY DĀNG CH¯¡NG TRÌNH .......................29
4.1 Giái thiÉu mßt sß kỹ thu¿t sā dāng trong ąng dāng .................................29
4.1.1 HiÅn thá bÁn đá ........................................................................................29
4.1.2 Đánh vá vá trí hiÉn t¿i ng°ãi dùng ..........................................................30
4.1.3 Tìm kiÁm nhÿng đáa điÅm xung quanh ng°ãi dùng............................31
4.1.4 Tính khoÁng cách và thãi gian giÿa đáa điÅm bắt đ¿u và đáa điÅm kÁt
thúc ....................................................................................................................32
4.2 Xây dāng ąng dāng ......................................................................................32
CH¯¡NG 5: KÀT QUÀ VÀ KÀT LU¾N ...........................................................37
5.1 KÁt quÁ đ¿t đ°ÿc...........................................................................................37
5.2 H¿n chÁ ..........................................................................................................37
5.3 H°áng phát triÅn...........................................................................................38
5.4 KÁt lu¿n ..........................................................................................................38
TÀI LIỆU THAM KHẢO......................................................................................................................... 39
CH¯¡NG 1 : GIàI THIÈU

1.1 Giái thiÉu đà tài

Ngày nay với sự phát triển mạnh mẽ cÿa công nghệ bản đồ thì việc tìm kiếm
thông tin cũng như định vị trên bản đồ ngày càng dễ dàng dàng hơn. Không những
thế việc āng dụng công nghệ này trên thiết bị di động cũng là một xu hướng tất
yếu. Trên thực tế đã có nhiều hãng phần mềm hỗ trợ công nghệ này, chúng ta
không khó nhận ra đó là các āng dụng như: Bing Maps cÿa hãng phần mềm
Microsoft, Yahoo! Maps cÿa hãng phần mềm Yahoo, Trendsmap cÿa mạng xã hội
twitter…Trong đó đáng chú ý nhất là Google Maps cÿa hãng phần mềm tìm kiếm
hàng đầu thế giới là Google. Không những hỗ trợ đầy đÿ các dạng bản đồ như:
Earth, Satellite, Traffic, Weather….mà còn hỗ trợ bản đồ trên Android.

Hình 0: Mßt sß công nghÉ bÁn đá hiÉn nay

Giống như công nghệ bản đồ, công nghệ di động trên các smartphone cũng
không kém phần sôi động với sự tham gia cÿa các hãng lớn như: RIM, Nokia,
Samsung, Apple, Google, Microsoft… Không chỉ là một chiếc điện thoại bình
thường, các smartphone còn có thể hoạt động giống như một chiếc máy tính mini
với nhiều công nghệ hiện đại được tích hơp như: GPS, Web, E-mail, Office…

Nhận thấy xu hướng phát triển đó nhóm đã tìm hiểu và xây dựng một āng
dụng tìm đường và các địa điểm lân cận trên hệ điều hành Android dựa trên Map
APIs trên thiết bị Android cÿa Google Maps.
1.2 Māc tiêu đà tài

Tìm hiểu các vấn đề xung quanh Google Map APIs và các dịch vụ mà Google
Maps hỗ trợ đặc biệt là các āng dụng trên Android. Tìm hiểu hệ điều hành và cách
xây dựng trên hệ đều hành Android.
Áp dụng kiến thāc tìm hiểu được xây dựng hệ thống chạy trên hệ điều hành
Android để giải quyết các vấn đề sau:
➢ Tìm kiếm thông tin xung quanh vị trí hiện tại như: ATM, trạm xăng, ngân
hàng tìm kiếm theo địa chỉ được cho sẵn.
➢ Hướng dẫn đường đi.
➢ Tính toán lộ trình và thời gian đường đi.
➢ Định vị người dùng.
CH¯¡NG 2 :TâNG QUAN V ANDROID

2.1 Tãng quan và Android

2.1.1 Khái niÉm Android


Android là một nền tảng mở dành cho thiết bị di động cÿa Google, bao gồm
hệ điều hành, middleware và một số āng dụng cơ bản. Android SDK cung cấp các
công cụ và API cần thiết để phát triển āng dụng trên nền tảng Android sử dụng
ngôn ngữ lập trình Java.
2.1.2 Tính năng c¢ bÁn căa Android
- Āng dụng framework cho phép tái sử dụng và thay thế các thành phần.
- Máy ảo Dalvik được tối ưu hóa cho thiết bị di động.
- Tích hợp trình duyệt dựa trên công cụ mã nguồn mở WebKit.
- Cơ sở dữ liệu SQLite để lưu trữ dữ liệu có cấu trúc.
- Hỗ trợ phương tiện cho âm thanh phổ biến, video, và định dạng hình ảnh
(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).
2.1.3 KiÁn trúc Android
Sơ đồ dưới đây cho thấy các thành phần chính cÿa hệ điều hành Android.

Hình 2: KiÁn trúc Android

2.1.3.1 Linux kernel (nhân Linux)


Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cāng và tầng
dưới cÿa phần mềm. Lớp này chāa tất cả các thiết bị māc thấp điều khiển các
thành phần phần cúng khác nhau cÿa một thiết bị Android.
2.1.3.2 Libraries
Libraries bao gồm một tập hợp các thư viện lập trình chāa mã lệnh cung cấp
những tính năng và thao tác chính trên hệ điều hành. Một số các thư viện cơ bản
được liệt kê dưới đây:
- System C library: a BSD-derived triển khai các thư viện hệ thống ngôn
ngữ C chuẩn, được nhúng vào các thiết bị dựa trên hệ điều hành Linux.
- Media Libraries: Dựa trên PacketVideo's OpenCORE; thư viện này hỗ
trợ cho việc chơi nhạc, quay phim, chụp hình theo các định dạng file
MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
2.1.3.3 Android runtime
Tại cùng một tầng với Libraries, android runtime cung cấp một bộ lõi thư viện
cho phép các nhà phát triển viết các āng dụng android bằng cách sử dụng ngôn ngữ
lập trình java. Android runtime cũng bao gồm các máy ảo Dalvik, cho phép mọi
āng dụng android chạy trong tiến trình riêng cÿa mình. Dalvik là một máy ảo
chuyên dụng được thiết kế đặc biệt cho android và tối ưu hóa cho các thiết bị điện
thoại di động với giới hạn bộ nhớ và CPU.
2.1.3.4 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 các
nhà phát triển khả năng xây dựng các āng dụng cực kỳ phong phú và sáng tạo. Nhà
phát triển được tự do tận dụng các thiết bị phần cāng, thông tin địa điểm truy cập,
các dịch vụ chạy nền, thiết lập hệ thống báo động, thêm các thông báo để các thanh
trạng thái, và nhiều, nhiều hơn nữa.
Nhà phát triển có thể truy cập vào các API được sử dụng bởi các āng dụng
lõi. Các 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 API.
Đưa ra những khả năng khác nhau cÿa hệ điều hành android vào āng dụng để sử
dụng chúng trong các āng dụng cÿa mình.

2.1.3.5 Applications
Tại lớp trên cùng sẽ là các āng dụng cho android (như điện thoại, danh bạ,
trình duyệt,…) cũng như các āng dụng được tải về và cài đặt từ AndroidMarket hay
bất kỳ āng dụng nào bạn viết được tại tầng này.
2 .2 Các khái niÉm c¢ bÁn trong l¿p trình ąng dāng Android
2.2.1 Các thành ph¿n căa mßt ąng dāng
Một đăc trưng trọng tâm cÿa Android là mỗi āng dụng có thể sử dụng lại các
thành phần cÿa các āng dụng khác (nếu cho phép). Để được như vậy, hệ thống phải
khởi tạo một tiến trình bất cā khi nào āng dụng cần đến, đồng thời khởi tạo các đối
tượng Java cho phần đó. Vì vậy, không giống như āng dụng trên hầu hết các hệ
thống khác, āng dụng Android không có điểm vào duy nhất cho āng dụng (không
có hàm main ()). Thay vào đó, āng dụng có các thành phần mà hệ thống có thể tạo
ra và thực thi khi cần thiết.
Có bốn thành phần cÿa một āng dụng:
2.2.1.1 Activity
Mỗi activity tạo ra một giao diện trực quan tương tác với người dùng. Các
activity có thể thực thi cùng nhau để tạo một giao diện người dùng cố kết, nhưng
các activity này độc lập với nhau. Mỗi activity là một lớp con cÿa lớp cơ sở
Activity.
Một āng dụng có thể gồm một hay nhiều activity. Các activity là gì, số lượng
bao nhiêu phụ thuộc vào việc thiết kế āng dụng. Thông thường, activity đầu tiên
tạo ra cho người dùng là khi āng dụng được khởi chạy. Có thể bắt đầu activity kế
tiếp từ activity hiện tại.
2.2.1.2 Service
Service không có giao diện người dùng, mà chạy nền trong một khoảng thời
gian không giới hạn. Ví dụ: 1 service có thể bật nhạc nền khi người dùng quan tâm
đến các vấn đề khác, hoặc có thể lấy dữ liệu qua mạng hay tính toán một cái gì đó
và cung cấp kết quả cho các activity cần nó. Mỗi service là mở rộng cÿa lớp cơ sở
Service.
Có thể kết nối một service đang diễn ra (và bắt đầu service nếu nó chưa có).
Trong khi kết nối, có thể giao tiếp với service thông qua giao diện mà nó hỗ trợ.
Đối với service âm nhạc, giao diện này cho phép người dùng tạm dừng, tua, dừng
lại, khởi động, hay phát lại.
2.2.1.3 Broadcast receivers
Thành phần receivers thực hiện nhận và phát đi các thông báo. Nhiều chương
trình receivers được tích hợp trong mã nguồn hệ thống - ví dụ, thông báo các múi
giờ đã thay đổi, pin thấp, hình ảnh đã được chụp, hoặc để người sử dụng thay đổi
tuỳ chọn ngôn ngữ. Āng dụng cũng có thể khởi tạo trình receivers - ví dụ, báo cho
các āng dụng khác biết rằng một số dữ liệu đã được tải về cho thiết bị và sẵn có
cho họ sử dụng.
Thành phần receiver không có giao diện với người dùng. Tuy vậy, thành phần
này có thể bắt đầu một activity để đáp āng thông tin mà nó nhận được, hoặc có thể
sử dụng NotificationManager để cảnh báo người sử dụng. Các thông báo gây sự
chú ý cÿa người dùng bằng nhiều cách khác nhau - nhấp nháy đèn nền, rung thiết
bị, tạo một âm thanh, vv. Và thường đặt một biểu tượng trên thanh trạng thái,
người dùng có thể mở để nhận thông báo.
2.2.1.4 Content providers
Thành phần Content providers tạo một bộ dữ liệu cÿa āng dụng sẵn có cho
các āng dụng khác. Dữ liệu có thể lưu trữ trong hệ thống tệp, cơ sở dữ liệu SQLite,
Bất cā khi nào có yêu cầu cần được xử lý bởi một thành phần đặc biệt, Android
đảm bảo tiến trình āng dụng cÿa thành phần đó đang thực thi (hoặc khởi tạo nó nếu
cần thiết), và các đối tượng thích hợp cÿa thành phần đó là sẵn có (hoặc tạo ra đối
tượng nếu cần thiết).
Kích hoạt các thành phần:intents
Các thành phần content provider được kích hoạt khi nhận yêu cầu từ
ContentResolver. Ba thành phần khác - activity, service và Broadcast receivers -
được kích hoạt bởi các thông điệp không đồng bộ intents. Mỗi intent là một đối
tượng chāa nội dung thông điệp. Đối với service và activity, nó chỉ định activity
được yêu cầu và định rõ URI cÿa dữ liệu để thao tác trên đó.
Có nhiều phương pháp kích hoạt riêng cho từng loại thành phần:
- Một activity được khởi tạo bằng cách truyền một đối tượng Intent vào phương
thāc Context.startActivity () hoặc Activity.startActivityForResult ().Phương
thāc getIntent() cÿa 1 hoạt động trả về đối tượng intent kích hoạt hoạt động
đó.Một activity thường bắt đầu các activity kế tiếp. Nếu activity kế tiếp là lấy
kết quả từ activity trước đó, nó gọi startActivityForResult () thay vì
startActivity (). Kết quả trả về là đối tượng Intent qua lời gọi phương thāc
onActivityResult().
- Một service được bắt đầu bằng cách truyền một đối tượng Intent vào phương
thāc Context.startService (). Android gọi phương thāc onStart () cÿa service
thông qua đối tượng Intent.
- Một āng dụng có thể khởi tạo Broadcast receivers bằng cách truyền một đối
tượng Intent vào các phương thāc như Context.sendBroadcast (),
Context.sendOrderedBroadcast (), và Context.sendStickyBroadcast ().
Android phân phát đối tượng intent cho tất cả các lớp thu phát liên quan bằng
cách gọi phương thāc onReceive().

Các tập tin manifest :


Các āng dụng khai báo các thành phần cÿa nó trong tập tin manifest đặt trong
gói Android. Các file. apk chāa code, các file và tài nguyên cÿa āng dụng.
Tập tin manifest là một cấu trúc file XML có tên AndroidManifest.xml trong mọi
āng dụng.
Nhiệm vụ chính cÿa file manifest là để khai báo thành phần āng dụng cÿa
Android. Một hoạt động có thể được khai báo như sau:
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
<application . . . >
<activity android:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel"
... >
</activity>
...
</application>
</manifest>
Thuộc tính <name= cÿa <activity> chỉ định lớp con thực thi hoạt động
Thành phần <service> khai báo cho các service, các yếu tố <receiver> cho
Broadcast receivers, và <provider> yếu tố cho content provider.

Bộ lọc Intent:
Bộ lọc Intent cÿa một thành phần cho Android biết các loại intents mà thành
phần đó có khả năng xử lý. Chúng được khai báo trong tập tin manifest. Ví dụ sau
thêm hai bộ lọc vào hoạt động:
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
<application . . . >
<activity android:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel"
... >
<intent-filter . . . >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter . . . >
<action android:name="com.example.project.BOUNCE" />
<data android:mimeType="image/jpeg" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
...
</application>
</manifest>

2.3 Vòng đãi các thành ph¿n


Vòng đời cÿa thành phần āng dụng: từ khi Android khởi tạo chúng đến kết
thúc khi hÿy các đối tượng.
Vòng đãi căa activity
Mỗi activity có 3 trạng thái cơ bản:
- active or running: khi đang ở trong mặt trước màn hình (ở đầu ngăn xếp các
hoạt động cho nhiệm vụ hiện hành). Đây là trạng thái activity tập trung các
hành động cÿa người dùng.
- paused: tạm dừng, nhưng vẫn hiển thị cho người dùng. Activity bị tạm dừng
là còn <sống= (nó duy trì tất cả các trạng thái, thông tin thành phần và vẫn
thuộc cửa sổ quản lý), có thể bị hÿy trong trường hợp bộ nhớ vực kì thấp.
- stopped : dừng lại (nếu bị che khuất bởi các hoạt động khác). Nó vẫn giữ lại
tất cả các trạng thái và thông tin thành phần. Nó không còn hiển thị cho người
sử dụng (cửa sổ ẩn), thường bị hÿy bởi hệ thống khi có yêu cầu cần thiết về
bộ nhớ.

Sơ đồ minh họa vòng đời cÿa activity:

Hình 3:Vòng đãi căa Activity

Trong đó phương thāc :


- onCreate(): Được gọi là khi activity tạo ra lần đầu tiên. Phương pháp này
được truyền vào một đối tượng Bundle có chāa trạng thái trước đó cÿa
activity. Luôn theo sau bởi onStart().
- onRestart (): Được gọi sau khi activity đã dừng lại (stopped), để bắt đầu lại.
Luôn theo sau bởi onStart ()
- onStart (): Được gọi ngay trước khi activity trở nên rõ ràng cho người dùng.
Theo sau bởi onResume() hoặc onStop()
- onResume(): Được gọi ngay trước khi bắt đầu activity tương tác với người sử
dụng
Luôn theo sau bởi onPause ().
- onPause(): Được gọi khi hệ thống chuẩn bị bắt đầu khôi phục activity khác.
Phương thāc này thường được dùng để xác nhận những thay đổi chưa được
lưu vào dữ liệu ổn định, dừng hình ảnh động ...Các activity tiếp theo sẽ không
được tiếp tục cho đến khi nó quay lại.
onStop(): Được gọi khi activity không còn nhìn thấy được. Điều này xảy ra
bởi nó đang bị huỷ, hay vì activity khác đã được tiếp tục và bao phÿ nó.
- onDestroy(): Được gọi trước khi activity bị hÿy. Đây là lời gọi cuối cùng với
một activity. Nó có thể được gọi vì activity đã hoàn thành (finish()) hoặc do
hệ thống tạm thời hÿy đối tượng cÿa activity để tiết kiệm không gian.

Vòng đãi căa service :

Hai cách sử dung service :

- Khởi tạo và chạy, đến khi một người dùng dừng hay tự dừng lại. Bắt đầu bằng
cách gọi Context.startService() và dừng lại bằng cách gọi
Context.stopService(). Có thể tự dừng lại bằng cách gọi Service.stopSelf()
hoặc Service.stopSelfResult().
- Hoạt động bằng cách sử dụng một giao diện tự định nghĩa và thiết lập. Client
thiết lập kết nối đến các đối tượng service và sử dụng kết nối để gọi service.
Kết nối được thiết lập bằng cách gọi Context.bindService(), và đóng lại bằng
cách gọi Context.unbindService(). Nhiều client có thể kết nối với cùng
service. Nếu chưa có service, bindService() sẽ khởi tạo service.

Các phương thāc:

• void onCreate ()
• void onStart (Intent ý định)
• void onDestroy ()

Các phương thāc onCreate() và onDestroy() được gọi cho tất cả các service,
cho dù bắt đầu bởi Context.startService () hay Context.bindService(). Tuy nhiên,
onStart() được gọi chỉ với các service bắt đầu bởi startService ().

Một service liên kết với các service khác bằng nhiều phương thāc:

- IBinder onBind(Intent intent)


- boolean onUnbind(Intent intent)
- void onRebind(Intent intent)
Sơ đồ sau minh họa phương thāc gọi một service:

Hình 4: Cách gãi Service trong Android

Vòng đãi căa receiver:


Phương thāc duy nhất: void onReceive(Context curContext, Intent
broadcastMsg).
Khi một thông điệp quảng bá đến cho receiver, Android gọi phương thāc
onReceive()và truyền vào các đối tượng Intent có chāa thông điệp. Receiver đang
hoạt động chỉ khi nó đang thực hiện phương thāc này.

Vòng đãi căa tiÁn trình:

Foreground process (tiến trình tiền cảnh) yêu cầu cho những gì người dùng
hiện tại đang làm. Các điều kiện :

- Đang chạy một activity mà người dùng đang tương tác


- Có một service liên kết với activity mà người dùng đang tương tác.
- Có một đối tượng service gọi lại phương thāc (onCreate(), onStart(),
onDestroy().
- Có một activity trước đó, vẫn còn hiển thị cho người sử dụng (onPause()).

Service process (tiến trình dịch vụ): chạy một service bắt đầu với phương thāc
startService() và không thuộc một trong hai loại trên.

Empty process ( tiến trình rỗng): không giữ thành phần āng dụng nào đang
hoạt động. Hệ thống thường hÿy các tiến trình này để cân đối tài nguyên tổng thể
cÿa hệ thống giữa vùng nhớ tiến trình và cùng nhớ hạt nhân cơ bản.

2.4 Công cā phát triÅn

Android SDK bao gồm nhiều công cụ phát triển āng dụng di động trên nền
tảng Android. Quan trọng nhất là Android Emulator (Bộ mô phỏng) và Android
Development Tools plugin (plugin ADT) cho Eclipse.
Android Development Tools Plugin (cho Eclipse IDE): Thêm các mở rộng
mạnh mẽ vào Eclipse : tích hợp môi trường, tạo và gỡ lỗi các āng dụng Android dễ
dàng và nhanh chóng.
Android Emulator: công cụ mô phỏng thiết bị dựa trên QEMU, sử dụng để
thiết kế, gỡ lỗi, và kiểm thử các āng dụng trong môi trường thực chạy Android.
Android Asset Packaging Tool (aapt): cho phép tạo ra các file .apk chāa mã
nhị phân và tài nguyên cÿa āng dụng Android.
Android Interface Description Language (aidl): Cho phép tạo mã code cho
một giao diện bên trong tiến trình (interprocess)
sqlite3 : Cho phép truy cập vào các tập tin dữ liệu SQLite - được tạo ra và sử
dụng bởi các āng dụng Android.
CH¯¡NG 3: TâNG QUAN V GOOGLE MAP API

3.1 Tãng quan và Google Maps API.


Google Maps là một dịch vụ āng dụng và công nghệ bản đồ trực tuyến
trên web được cung cấp miễn phí bởi Google. Nó cung cấp các bản đồ đường
đi, điều kiện giao thông thời gian thực, định tuyến các đường tới ưu cho việc
di chuyển bằng cách đi bộ, sử dụng ô tô, hay sử dụng một số loại phương tiện
giao thông công cộng, các hình ảnh vệ tinh khắp nơi trên thế giới.
API là từ viết tắt cÿa cụm Application Programming Interface - Giao
diện lập trình āng dụng) được thiết lập trong các hệ điều hành để cung cấp
cho người lập trình các hàm tương tác với cơ sở dữ liệu.
Maps API :
- Đó là một phương thāc cho phép 1 website cá nhân hoặc tổ chāc muốn
sử dụng dịch vụ cÿa google, có thể nhúng Google map vào trang web
cÿa mình và có thể thực hiện một số thao tác rê chuột, zoom, đánh dấu
trên bản đồ,…
- Các āng dụng xây dựng trên maps được nhúng vào trang web cá nhân
thông qua các thẻ javascripts do vậy việc sử dụng API google rất dễ dàng
Google Maps API đã được nâng cấp lên phiên bản thā 3, phiên bản này
hỗ trợ không chỉ các máy tính để bàn, laptop thông thường mà còn hỗ trợ cả
các thiết bị di động một cách dễ dàng.

3.2 Mßt sß ąng dāng có thÅ xây dāng tÿ viÉc sā dāng Google Maps API
- Āng dụng chỉ dẫn đường đi đến một địa điểm cần tìm, chỉ dẫn đường
giao thông công cộng, āng dụng du lịch, khám phá, thám hiểm,…
- Đánh dấu các địa điểm trên bản đồ cùng các thông tin cho địa điểm: các
khu vui chơi giải trí, nhà hàng khách sạn, quán ăn ngon, các shop quần
áo thời trang,…
- Khoanh vùng các trung tâm kinh tế, công nghiệp, các khu vực bị ô
nhiễm, các khu vực thường xuyên xảy ra ách tắc giao thông trong quy
hoạch giao thông, các khu vực đang xây dựng hay sử dụng trong việc
quy hoạch đô thị,…
3.3 Cách đăng kí và sā dāng Google maps API
Để đảm bảo rằng các āng dụng sử dụng dữ liệu bản đồ một cách phù
hợp, Google Maps Service yêu cầu người phát triển āng dụng đăng ký với
service, đồng ý với điều khoản và cung cấp cho chúng ta một Maps API Key -
một chuỗi chữ số xác định duy nhất.
Google Maps Service cũng đòi hỏi mỗi MapView xác định tới service bằng các sử
dụng Maps Api Key. Trước khi cung cấp map cho MapView, Service kiểm tra
Maps API Key được cung cấp bởi MapView.

3.3.1 Cách đăng ký 1 API KEY


- Truy cập vào https://code.google.com/apis/console và đăng nhập bằng
tài khoản gmail cÿa mình.
- Click vào Services link bên trái menu.
- Kéo xuống dưới tìm Google Maps API v3 service và kích hoạt dịch vụ.
- Click API Access, một API key sẽ hiện lên và bạn sẽ coppy lại để sử
dụng.

Hình 5: Đăng kí API KEY


• Lấy kinh độ, vĩ độ để hiển thị bản đồ
Truy cập vào http://www.latlong.net/ và nhập địa điểm cần tìm.
Ví dụ : trường ĐH Công Nghiệp là (10.8221236, 106.6875192)

3.3.2 Láp phă (Overlays) căa Google Map API


Định nghĩa: Lớp phÿ(overlays) là các đối tượng trên bản đồ, được gắn
với vĩ độ, kinh độ.
Các loại lớp phÿ
❖ Marker: Marker là một đối tượng quan trọng và được sử dụng rất nhiều
trong bản đồ. Một Marker đại diện cho một vị trí cụ thể trên bản đồ.
Ngoài ra, người lập trình có thể tùy biến Marker theo nhiều cách khác
nhau như thay đổi biểu tượng, màu sắc, sự kiện...
Một số thuộc tính cÿa đối tượng Marker trong Google Maps API:
• Position(bắt buộc): quy định là tọa độ LatLng cÿa điểm được đánh
dấu.
• Map(tùy chọn): quy định đối tượng bản đồ được đánh dấu. nếu thuộc
tính này được khai báo trong đây nó sẽ thay thế cho
Markers.setMap(map).
• Icon(tùy chọn): hình ảnh tùy chọn mà bạn muốn hiển thị thay thế hình
ảnh mặc định. Dùng tùy chọn này thay thế cho marker.setIcon(link
đến hình ảnh trong thư mục).
• Title(tùy chọn): tiêu đề cÿa địa điểm.
• Animation: cách thāc chuyển động cÿa điểm đánh dấu. CÓ 2 cách
thāc DRAG, Bounce.
❖ Polylines
Polylines là một đường thẳng dùng để thể hiện đường kết nối trên bản đồ
dựa vào các tọa độ cÿa các điểm trên đường đi. Các đoạn thẳng được hiển thị
với các tùy chọn cho nó như màu sắc, độ đậm nhạt, độ rộng cÿa đường. Phải
có tối đa 2 điểm để tạo nên một đường thẳng.

Hình 6: Minh hãa Polyline

Các thuộc tính cÿa 1 Polyline :

• path : quy định cụ thể 1 số điểm (kinh độ - vĩ độ) cho dòng


• strokeColor : màu cho dòng (màu định dạng format: "#FFFFFF")
• strokeOpacity : độ mờ đục cÿa dòng (là giá trị trong khoảng 0.0 và 1.0)
• strokeWeight : xác định độ rộng cÿa dòng (tính theo pixel)

❖ Polygon
Polygon tương tự như polyline nhưng có thêm tính năng khoanh vùng
(xác định 1 tập hợp các điểm tạo thành 1 khối kín)

Thuộc tính tương tự như polyline nhưng có thêm 2 thuộc tính sau:
• fillColor : chỉ định màu cÿa khu vực được xác định (màu định dạng :
"#FFFFFF")
• fillOpacity : độ mờ đục cÿa vùng xác định (giá trị trong khoảng 0.0 -> 1.0)

Hình 7: Minh hãa Polygon

❖ Circle

Các thuộc tính :

• center : xác định trung tâm cÿa vòng tròn.

• radius : bán kính cÿa đường tròn (mét).

• strokeColor : màu cho đường viền (định dạng : "#FFFFFF").

• strokeOpacity : độ mờ đục cÿa đường viền (giá trị trong khoảng 0.0 -> 1.0).

• strokeWeight : độ rộng cÿa đường viền (px).

• fillColor : chỉ định màu cÿa khu vựcbên trong đường tròn (màu định dạng :
"#FFFFFF").
Hình 8: Hình minh hãa cho Circle

❖ InfoWindow

Show 1 InfoWindow là 1 đoạn text cho 1 marker:

Hình 9: Hình minh hãa cho InfoWindow

❖ Directions
Directions là chāc năng chỉ dẫn đường đi, một āng dụng khá phổ biến
trong Google Map. Bạn có thể tính toán đường đi bằng cách sử dụng đối
tượng DirectionsService. Đối tượng sẽ ghi nhận yêu cầu tìm đường cÿa bạn,
truyền tới với Google Maps API Directions Service và nhận kết quả trả về.
Direction được yêu cầu thì sẽ được trả về dưới dạng Json hoặc XML.
Tuy nhiên theo khuyến cáo cÿa Google, định dạng Json được ưu tiên hơn.

Các giá trị trả về :

- Status: Đưa ra trạng thái trả về cÿa API.


- Routes: Khi Direction API trả về kết quả, kết quả đó được đặt trong một
mảng có tên là routes (JSON). Cho dù server không trả về kết quả gì thì
nó cũng được đặt trong một mảng routes trống.
- Legs: Là một đoạn đường xá định giữa điểm đầu và điểm cuối. Trong
đó, điểm đầu và điểm cuối là các điểm trung gian trên đường đi mà
Server được yêu cầu tìm kiếm và đã được tính toán.
❖ Google Map Event

Sự kiện gồm 2 loại:

• UI Event: Lắng nghe sự kiện từ người dùng.


• MVC State change: Lắng nghe sự kiện từ sự thay đổi giá trị cÿa các thuộc tính
trên Map. Để lắng nghe sự kiện, ta sử dụng phương thāc addListener().
Phương thāc này nhận vào 1 đối tượng, 1 kiểu sự kiện để lắng nghe và 1
phương thāc xử lý khi sự kiện xảy ra.

➢ UI Event

• Một số đối tượng trong Maps API được thiết kế để đáp āng với sự kiện người
sử dụng chẳng hạn như các sự kiện từ chuột hoặc bàn phím . Một đối
tượng google.maps.Marker có thể lắng nghe người sử dụng các sự kiện sau
đây : click, dblclick, mouseup, mousedown, mouseover, mouseout.

➢ MVC State Change


Các sā kiÉn:

• zoom_changed: sự kiện sẽ thực thi khi ta zoom size trên map


• center_changed: sự kiện sẽ thực thi khi thuộc tính center cÿa map thay đổi
• dragend: sự kiện sẽ thực thi khi người dùng kết thúc drag bản đồ
• maptypeid_changed: sự kiện sẽ thực thi khi thuộc tính maptypeid cÿa map thay
đổi b. Event Listeners (lắng nghe sự kiện)

❖ Google Maps - Basic Map Types

• ROADMAP (bản đồ truyền thống, default 2D map)


• SATELLITE (photographic map)
• HYBRID (photographic map + tên đường và tên thành phố)
• TERRAIN (bản đồ với hệ thống sông ngòi, núi....).

CH¯¡NG 4: THIÀT KÀ VÀ XÂY DĀNG CH¯¡NG TRÌNH

4.1 Giái thiÉu mßt sß kỹ thu¿t sā dāng trong ąng dāng

4.1.1 HiÅn thá bÁn đá

Để hiện thị bản đồ trong Android, ta cần làm 2 việc sau:

• Thêm API key vào āng dụng


Trong AndroidManifest.xml thêm phần tử sau đây vào trước thẻ đóng
</application> :
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY"/>

Thay thế <YOUR_API_KEY= bằng API key bạn đã tạo


• Thêm thành phần Fragment vào giao diện chương trình để hiện thị bản đồ.

Hình 10: BÁn đá đ°ÿc hiÅn thá

4.1.2 Đánh vá vá trí hiÉn t¿i ng°ãi dùng


Lớp LocationManger hỗ trợ định vị vị trí người dùng. Thông qua hàm
requestLocationUpdates(), ta có thể thực hiện yêu cầu cập nhật vị trí người
dùng.

Hàm này có 4 tham số:

• provider: GPS-PROVIDER, NETWWORK_PROVIDER.


• minTime: khoảng thời gian tối thiểu giữ các lần cập nhật vị trí.
• MinDistance: khoảng cách tối thiểu giữa các lần cập nhật vị trí.
• Listener thừa kế từ lớp LocationListener và có 4 hàm cần nạp chồng:
✓ onLocationChanged(): được gọi khi vị trí thay đổi.
✓ onProviderDisabled(): được gọi khi nhà cung cấp (provider) không
được kích hoạt.
✓ onProviderEnabled(): được gọi khi nhà cung cấp (provider) đã kích
hoạt.
✓ onStatusChanged(): được gọi khi trạng thái nhà cung cấp (provider)
thay đổi.

4.1.3 Tìm kiÁm nhÿng đáa điÅm xung quanh ng°ãi dùng
Sử dụng kết quả truy vấn trên trang https://www.google.com/maps vào
āng dụng thông qua việc truyền các tham số vào đường dẫn
http://maps.google.com/maps?parameters.

Các tham số sau được dùng trong āng dụng:

• Tham số q (query): nội dung tìm kiếm (atm, ngân hàng, trạm xăng).
• Tham số sll (search latitude longitude): tọa độ cÿa vị trí cần tìm kiếm
• Tham số num (number): số lượng địa điểm trả về.
• Tham số output: định dạng trả về(html,json,…).

Āng với kết quả trả về là html, sau đó dữ liệu sẽ được phân tích lại để hiển thị
thông tin cần thiết cho người dùng.

4.1.4 Chąc năng chß đ°ãng

Sử dụng Google Direction API

• Cho phép chỉ ra hướng đi giữa các địa điểm


• Các địa điểm có thể ở dạng:
- Chuỗi: Trường đại học Công Nghiệp TPHCM, Quang Trung.
- Tọa độ(vĩ độ và kinh độ): latitude, longtitude

Một Direction API request có dạng:


Trong đó:

- Output: json, xml.


- Parameters:
o Bắt buộc: origin, destination, sensor.
o Tùy chọn: mode, units,…

4.1.4 Tính khoÁng cách và thãi gian giÿa đáa điÅm bắt đ¿u và đáa điÅm kÁt
thúc
Distance Matrix API là dịch vỵ cho phép tính khoảng cách và thời gian
đi giữa địa điểm đầu và địa điểm kết thúc.

Một Distance Matrix API request có dạng:

- Output: json,xml.
- Parameters:
o Bắt buộc: origins, destinations, sensor.
o Tùy chọn: mode, units,…

4.2 Xây dāng ąng dāng

Āng dụng cho phép người dùng tìm đường và các địa điểm xung quanh
bằng cách click trên giao diện bản đồ:

- Longclick lên bản đồ đánh dấu điểm đến để vẽ đường đi giữa vị trí
người dùng và điểm đến.
- Để tìm các địa điểm xung quanh là ATM, ngân hàng, trạm xăng thì
người dùng click vào các ô tương āng với địa điểm mình cần tìm trên
giao diện bản đồ.
- Để xác định quãng đường và thời gian khi đi bằng các phương tiện xe
máy và ô tô thi người dùng click vào các ô tương āng với phượng tiện
trên giao diện bản đồ.

L°u đá giÁi thu¿t

Result = atm ATM


BEGIN
Break?

No Yes
Khai báo và ánh x¿ các bi¿n
Ngân
Result = bank
hàng
Load b¿n đồ vß ÿng dÿng
Break?

Xác định vị trí hiện t¿i cÿa No


ng±ời dùng
Result = gas_station Default
No
Longclick? Yes

Yes
L¿y giá trị lat & lng gán cho Load Direction và Load NearbyPlaces tÿ Google API
bi¿n chooseposition

V¿ Polyline, gán giá trị Distance cho bi¿n tvDistance

Xóa b¿n đồ set visible cho


groupnearby, add maker
IsMotor ?
No

Kiểm tra
RadioButton
GroupNearBy Yes Min =
Min =
distance/500
distance/300

Hißn thị đ±ờng đi và các địa đißm lân cận


GiÁi thích chąc năng căa ąng dāng
➢ Load bÁn đá và xác đánh vá trí ng°ãi dùng

Tiến hành load bản đồ Google Maps và xác định vị trí người dùng về
trang web cá nhân. Khi chạy āng dụng lên thì sẽ tự động định vị vị trí cÿa
người dùng.

Hình 11: Xác đánh vá trí hiÉn t¿i


➢ Xác đánh điÅm đÁn

Xác định điểm đến bằng cách bấn longclick vào bản đồ. Bản đồ sẽ hiển thị marker
vị trí điểm đến và vẽ đường đi từ vị trí hiện tại đến điểm đến.
Hình 12: V¿ đ°ãng đ
➢ Tìm các đáa điÅm xung quanh

Bản đồ tìm kiếm được 3 địa điểm là ATM, trạm xăng, ngân hàng. Tìm
kiếm ATM, ngân hàng, trạm xăng bằng cách ấn vào các nút tương āng với
các đại điểm trên bản đồ. Bản đồ sẽ hiển thị các marker tương āng với các địa
điểm.
Hình13: HiÅn thá ATM xung quanh

➢ KhoÁng cách và thãi gian giÿa 2 đáa điÅm

Āng dụng hỗ trợ tìm kiếm đường đi và hiển thị thơi gian, quãng đường
cho hai phương tiện là ô tô và xe máy. Khi ấn vào các nút tương āng với các
phương tiện trên màn hình thì màn hình sẽ hiển thị quãng đường và thời gian
tương āng với các phương tiện.
Hình 14: HiÅn thá quãng đ°ãng và thãi gian

CH¯¡NG 5: KÀT QUÀ VÀ KÀT LU¾N

5.1 KÁt quÁ đ¿t đ°ÿc

- Chương trình cung cấp cho người dùng các chāc năng: tìm địa điểm, dẫn
đường, định vị người dùng, theo dõi vị trí.

- Chạy trên hệ điều hành Android được viết bằng ngôn ngữ Java.

5.2 H¿n chÁ

- Chương trình bắt buộc người sử dụng phải có kết nối Internet từ điện thoại, và
GPS để tìm ra địa điểm hiện tại và hiển thị trên bản đồ.

- Chỉ chạy được trên hệ điều hành Android mà chưa chạy được trên các hệ
điều hành khác.

- Tốc độ chương trình chưa được tối ưu.

- Vẫn còn thiếu sót nhiều chāc năng.


5.3 H°áng phát triÅn

- Chỉ dường bằng giọng nói.


- Xây dựng được bản đồ offline.
- Có ô nhập tìm kiếm địa điểm chính xác.

5.4 KÁt lu¿n

Đồ án đã xây dựng được āng dụng bản đồ - tìm kiếm và chỉ đường trên hệ
điều hành Android, hệ điều hành di động đang được sử dụng rộng rãi hiện nay.
Tìm hiểu được công nghệ bản đồ cÿa Google Maps, các API và các dịch vụ dành
cho nhà phát triển trên thiết bị di động sử dụng hệ điều hành Android, cũng như
tìm hiểu được công nghệ Android, cách phát triển một āng dụng trên Android.
TÀI LIÈU THAM KHÀO
https://stackoverflow.com/questions/14444228/android-how-to-draw-route-
directions-google-maps-api-v2-from-current-location-t
https://developers.google.com/maps/documentation/android-sdk/map-with-
marker#next_steps
https://ddewaele.blogspot.com/2011/05/introducing-google-places-api.html
https://developers.arcgis.com/example-apps/nearby-android/

https://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/

https://duythanhcse.wordpress.com/lap-trinh-di-dong/android/

https://www.youtube.com/watch?v=CCZPUeY94MU&t=912s

You might also like