Professional Documents
Culture Documents
Tìm Hiểu Hệ Điều Hành Android Và Xây Dựng Ứng Dụng Tìm Đường Đi
Tìm Hiểu Hệ Điều Hành Android Và Xây Dựng Ứng Dụng Tìm Đường Đi
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.
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
……………………………………………………………………………….............
.....................................................................................................................................
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.
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
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().
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>
- 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.
• 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:
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 :
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.
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.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.
❖ 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)
❖ Circle
• strokeOpacity : độ mờ đục cÿa đường viền (giá trị trong khoảng 0.0 -> 1.0).
• 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
❖ 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.
➢ 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.
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.
• 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 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.
- Output: json,xml.
- Parameters:
o Bắt buộc: origins, destinations, sensor.
o Tùy chọn: mode, units,…
Ā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 đồ.
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?
Yes
L¿y giá trị lat & lng gán cho Load Direction và Load NearbyPlaces tÿ Google API
bi¿n chooseposition
Kiểm tra
RadioButton
GroupNearBy Yes Min =
Min =
distance/500
distance/300
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.
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
Ā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 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.
- 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.
Đồ á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