TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Viện Công nghệ Thông tin và Truyền thông
Báo cáo môn
Phát triển ứng dụng trên các thiết bị di động
Đề tài Xây dựng ứng dụng xem dự báo thời tiết
trên hệ điều hành Android
Sinh viên thực hiện: Hoàng Văn Phi MSSV: 20156227 Nguyễn Anh Tuấn MSSV: 20156760
CH
ƯƠ
NG 1. T NG QUAN
Ổ
ĐỀ
TÀI
1.1. Gi i thi u chung
ớ
ệ
Ngày nay cùng 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 ngày càng t ng, đ c bi t trong đó là các nhuă ặ ệ c u v công ngh đ ph c v cu c s ng hàng ngày c a m i cá nhânầ ề ệ ể ụ ụ ộ ố ủ ỗ khi mà công ngh ngày càng phát tri n m nh m nh hi n nay.ệ ể ạ ẽ ư ệ N m b t đắ ắ ược nhu c u đó các công ty công ngh đã không ng ngầ ệ ừ đ i m i và t o ra nhi u công ngh m i đ đáp ng nhu c u đó.ổ ớ ạ ề ệ ớ ể ứ ầ Trong đó không th không nh c đ n các công ngh di đ ng và cácể ắ ế ệ ộ ng d ng trên đó. Trong nh ng n m tr c đây, vi c c p nh t thông
ứ ụ ữ ă ướ ệ ậ ậ
tin c a chúng ta ch y u qua sách báo, radio, tivi,… i u đó gây raủ ủ ế Đ ề s h n ch trong vi c c p nh t thông tin th i gian th c. Nh ng v iự ạ ế ệ ậ ậ ờ ự ư ớ s phát tri n c a công ngh di đ ng, chúng ta có th đem theo bênự ể ủ ệ ộ ể mình nh ng chi c đi n tho i thông minh nh g n t i b t c đâu vàữ ế ệ ạ ỏ ọ ớ ấ ứ có th c p nh t thông tin t i b t kì th i đi m nào. Không nh ng v y,ể ậ ậ ạ ấ ờ ể ữ ậ trên nh ng chi c đi n tho i thông minh hi n nay còn có nh ng ti nữ ế ệ ạ ệ ữ ệ ích, ng d ng tuy t v i h tr cho m t nhu c u nào đó c a conứ ụ ệ ờ ỗ ợ ộ ầ ủ người.
Figure 1 ng d ng th i ti t trên đi n tho iứ ụ ờ ế ệ ạ
c ng c l i ki n th c v android đã đủ ố ạ ế ứ ề ược h c trong môn "Phát tri nọ ể ng d ng trên các thi t b di đ ng", đ ng th i tìm hi u các công
ứ ụ ế ị ộ ồ ờ ể
ngh liên quan đ xây d ng lên m t ng d ng v th i ti t hoànệ ể ụ ộ ứ ụ ề ờ ế ch nh. ỉ
1.2. Phân tích bài toán
ng d ng xem th i ti t đ c xây d ng có các ch c n ng chính nh
Ứ ụ ờ ế ượ ự ứ ă ư
sau:
Xem thông tin th i ti t t i đ a đi m hi n t i.ờ ế ạ ị ể ệ ạ
Xem thông tin d báo th i ti t trong các ngày ti p theo.ự ờ ế ế
Tìm và thêm các v trí u thích đ theo dõiị ư ể
Xóa các v trí đang theo dõiị
Xem các thông tin th i ti t c b n t i m t v trí b t k trên b n đờ ế ơ ả ạ ộ ị ấ ỳ ả ồ Google map
1.3. Các kỹ thuật sử dụng
S d ng k t h p các lo i layout khác nhau: RelativeLayout,ử ụ ế ợ ạ LinearLayout, ScrollView, TableLayout,..
Tùy bi n hi n th ListView, DropDown itemế ể ị
S d ng recycling rowử ụ
Truy n d li u gi a các activityề ữ ệ ữ
K thu t x lý multi-threading v i l p AsyncTaskỹ ậ ử ớ ớ
K thu t làm vi c v i API webservice OpenWeatherMap đ l y dỹ ậ ệ ớ ể ấ ữ li u th i ti t.ệ ờ ế
K thu t x lý chu i json, chuy n đ i sang java classỹ ậ ử ỗ ể ổ
K thu t làm vi c v i GoogleMap APIỹ ậ ệ ớ
K thu t thao tác v i database SQLiteỹ ậ ớ
X lý các s ki n tử ự ệ ương tác v i ngớ ười dùng
Hi n th lên notification barể ị
1.4.
Các thư viện sử dụng trong ứng dụng
pub.devrel:easypermissions:2.0.1 : Th vi n giúp đi u khi nư ệ ề ểcác quy n ng d ng t i runtime trong android.ề ứ ụ ạ
com.google.android.gms:play-services-maps:16.1.0 : gói cài đ t giúp ta xây d ng giao di n b n đ google map trong ng d ng.ặ ự ệ ả ồ ứ ụ
com.google.android.gms:play-services-location:16.0.0 : gói cài đ t giúp l y v trí thi t b d a vào Google play servicesặ ấ ị ế ị ự
com.google.code.gson:gson:2.8.5 : Th vi n giúp ta chuy n đ iư ệ ể ổcác đ i tố ượng Json sang các Java class m t cách nhanh chóng.ộ
1.5. Phân chia công vi c nhóm
ệ
Hoàng V n Phiă - Phân tích và xây d ng giao di n t ng quát cho ự ệ ổ ng d ng
ứ ụ
- Code giao di n các Activity thêm v trí theo dõi vàệ ị giao di n b n đệ ả ồ
- Các ch c n ng dùng Google api, ứ ă
- Hi n th thông báo trên notification barể ị - Làm báo cáo và các ph n riêng.ầ
Nguy n Anh Tu nễ ấ - phân tích và xây d ng giao di n t ng quát cho ự ệ ổ ng d ng
ứ ụ
CH
ƯƠ
NG 2. PHÂN TÍCH VÀ THI T K H TH NG
Ế
Ế Ệ
Ố
2.1. Các đ i t
ố ượ
ng chính trong h th ng
ệ
ố
Các đ i tố ượng chính c a h th ng đủ ệ ố ược t o ra qua vi c phân tích k tạ ệ ế qu là chu i json tr v t API OpenWeatherMap đả ỗ ả ề ừ ược bi u di nể ễ theo hình 2 dưới đây.
Trong đó các thông tin nh n t API đậ ừ ược chuy n v các java class:ể ề Clouds có thu c tính ộ all là m t s nguyên ch a thông tin t l mâyộ ố ứ ỉ ệ
trên b u tr i theo đ n v %.ầ ờ ơ ị Coords g m hai thu c tính: ồ ộ
o lon là m t s th c ch a giá tr kinh đ c a m t v trí v iộ ố ự ứ ị ộ ủ ộ ị ớ d u (-) bi u th v trí n m tây bán c u và ngấ ể ị ị ằ ở ầ ượ ạc l i.. o lat là m t s th c ch a giá tr v đ c a m t v trí v i d uộ ố ự ứ ị ĩ ộ ủ ộ ị ớ ấ
o temp là m t s th c ch a giá tr nhi t đ hi n t i c aộ ố ự ứ ị ệ ộ ệ ạ ủ m t v trí theo đ n v ộ ị ơ ị Kelvin.
o temp_min là m t s th c ch a giá tr nhi t đ nh nh tộ ố ự ứ ị ệ ộ ỏ ấ trong ngày hi n t i c a m t v trí theo đ n v ệ ạ ủ ộ ị ơ ị Kelvin.
o temp_max là m t s th c ch a giá tr nhi t đ cao nh tộ ố ự ứ ị ệ ộ ấ trong ngày hi n t i c a m t v trí theo đ n v ệ ạ ủ ộ ị ơ ị Kelvin.
o sea_level là m t s th c ch a giá tr áp su t khí quy nộ ố ự ứ ị ấ ể trên m c nự ước bi n theo đ n v hPa.ể ơ ị
o grnd_level là m t s th c ch a giá tr áp su t khí quy nộ ố ự ứ ị ấ ể trên m t đ t theo đ n v hPa.ặ ấ ơ ị
o pressure là m t s th c ch a giá tr áp su t khí quy n (ộ ố ự ứ ị ấ ể ở m c nự ước bi n, n u không có d li u sea_level ho cể ế ữ ệ ặ grnd_level) theo đ n v hPa.ơ ị
o humidity là m t s th c ch a giá tr đ m theo đ n v %.ộ ố ự ứ ị ộ ẩ ơ ị Wind bao g m hai thu c tính: ồ ộ
o speed là m t s th c ch a giá tr t c đ gió theo đ n vộ ố ự ứ ị ố ộ ơ ị mét/giây.
o deg là m t s th c ch a giá tr hộ ố ự ứ ị ướng gió theo đ n v đ .ơ ị ộ Sys bao g m các thu c tính: ồ ộ
o message là m t s bi n c a h th ng.ộ ố ế ủ ệ ố
o country là m t chu i ch a giá tr mã qu c gia nh VI, US,ộ ỗ ứ ị ố ư JP, …
o sunrise là m t s nguyên ch a giá tr th i gian bình minhộ ố ứ ị ờ theo d ng unix timestamp.ạ
o sunset là m t s nguyên ch a giá tr th i gian hoàng hônộ ố ứ ị ờ theo d ng unix timestamp.ạ
Weather bao g m các thu c tính:ồ ộ
o id là id c a đi u ki n th i ti t hi n t i.ủ ề ệ ờ ế ệ ạ
o main là m t chu i mô t m t nhóm c a tham s th i ti tộ ỗ ả ộ ủ ố ờ ế nh Rain, Snow, …ư
o description là m t chu i mô t chi ti t đi u ki n th i ti tộ ỗ ả ế ề ệ ờ ế trong nhóm.
o icon là m t chu i ch a icon id mô t cho th i ti t hi n t i.ộ ỗ ứ ả ờ ế ệ ạ OpenWeatherJson là l p ch a t t c thông tin c a chu i json trớ ứ ấ ả ủ ỗ ả
v bao g m: ề ồ
o id là m t s nguyên ch a đ nh danh c a thành ph hi nộ ố ứ ị ủ ố ệ t i.ạ
o dt là m t s nguyên ch a thông tin v th i gian nh n dộ ố ứ ề ờ ậ ữ li u theo ki u unix timestamp.ệ ể
o name là m t chu i ch a tên thành ph .ộ ỗ ứ ố
2.2. Các Activity c a ng d ng
ủ ứ
ụ
2.2.1. Home Activity
2.2.2. Activity thêm v trí theo dõi
ị
ây là activity cho phép ng i dùng:Đ ườ
- Tìm ki m các v trí mong mu n theo dõi qua ô tìm ki mế ị ố ế autoCompleteTextView
- Xem các v trí đang theo dõi đị ược hi n th trên m t listViewể ị ộ - Xóa m t v trí kh i danh sách đang theo dõi ộ ị ỏ
Các k thu t đỹ ậ ược s d ng:ử ụ
- K t h p gi a các layout khác nhauế ợ ữ
- Tùy bi n item hi n th chi ti t thông tin c a v trí dùng cho cế ể ị ế ủ ị ả autoCompleteView và listView.
- Làm vi c v i c s d li u SQLiteệ ớ ơ ở ữ ệ
2.2.3. Activity hi n th th i ti t trên b n đ
ể
ị
ờ
ế
ả
ồ
ây là activity cho phép ng i dùng:Đ ườ
- Xem thông tin th i ti t t i m t đ a đi m b t k trên b n đờ ế ạ ộ ị ể ấ ỳ ả ồ - Xem thông tin th i ti t t i v trí hi n t iờ ế ạ ị ệ ạ
- Thay đ i lo i b n đổ ạ ả ồ Các k thu t đỹ ậ ược s d ng:ử ụ
- T o giao di n b n đ qua Google Map APIạ ệ ả ồ
- L y v trí hi n t i c a ngấ ị ệ ạ ủ ười dùng qua Google play services - L y d li u th i ti t qua API webservices OpenWeatherMapấ ữ ệ ờ ế - X lý đa lu ngử ồ
- Chuy n đ i các đ i tể ổ ố ượng json sang java class tương ngứ - S d ng k t h p gi a các layout khác nhauử ụ ế ợ ữ
- Hi n th thông tin th i ti t lên notification barể ị ờ ế
2.3. C s d li u c a ng d ng
ơ ở ữ ệ
ủ ứ
ụ
B ng ''location'' ch a thông tin các v trí mà API OpenWeatherMapả ứ ị cung c p. B ng này dùng đ l u tr các v trí đang theo dõi c aấ ả ể ư ữ ị ủ người dùng được thêm thông qua activity thêm v trí theo dõi.ị
Trường Ki u d li uể ữ ệ Mô tả
_id INTEGER là trường b t bu c c a sqlite choắ ộ ủ m i b ng, t đ ng t ng.ỗ ả ự ộ ă
id TEXT là đ nh danh c a m t v tríị ủ ộ ị name TEXT là tên c a m t v tríủ ộ ị
CH
ƯƠ
NG 3 CÀI
ĐẶ
T CH
ƯƠ
NG TRÌNH
3.1. C u hình các API và th vi n s d ng
ấ
ư
ệ
ử ụ
3.1.1. C u hình API OpenWeatherMap
ấ
i t iĐ ớ https://openweathermap.org/ và n nút sign up đ đ ng kí tài kho nấ ể ă ả
Giao di n đ ng ký tài kho n ệ ă ả
Sau khi đ ng nh p chúng ta vào tab API keys đ t o key truy c p API choă ậ ể ạ ậ ng d ng.
ứ ụ
Figure 3 giao di n t o api key c a OpenWeatherMapệ ạ ủ
3.1.2. C u hình API GoogleMap
ấ
i t iFigure 4 giao di n t o project m i trong google cloud platformệ ạ ớ
Ch n tab API & Services > Dashboard, sau đó click ch n Enable APIs andọ ọ Services
Figure 5 giao di n APIs & Servicesệ
Figure 6 giao di n enable map sdk cho androidệ
Ti p t c ch n tab API & Services > Credentials, click "Create credentials"ế ụ ọ > "API key" đ t o m i m t API key cho ng d ng. Ho c ta có th s d ngể ạ ớ ộ ứ ụ ặ ể ử ụ luôn link đã được t o trong google_maps_api.xml đ t o API key.ạ ể ạ
Figure 7 giao di n t o API key trong credentialsệ ạ
Figure 8 n i dung file google_maps_api.xmlộ
3.2. Activity home
3.3. Activity thêm v trí theo dõi
ị
3.3.1. Giao di n
ệ
3.3.2. Code các b
ướ
c x lý
ử
Bước 1: tìm l i các view trong activityạ
Bước 2: xây d ng m t l p adapter m i cho autoCompleteTextViewự ộ ớ ớ
Bước 4: xây d ng m t l p adapter m i cho listView, l y d li u danh sách ự ộ ớ ớ ấ ữ ệ đã có t c s d li uừ ơ ở ữ ệ
3.4. Activity xem th i ti t trên map
ờ
ế
3.4.1. Giao di n
ệ
3.4.2. L y v trí thi t b Android location
ấ
ị
ế
ị
LocationManager.GPS_PROVIDER - nguồn này xác định vị trí dựa trên vệ tinh.
LocationManager.NETWORK_PROVIDER - nguồn này xác định vị trí dựa trên cột thu phát sóng của mạng di động và các điểm truy cập WIFI.
LocationManager.PASSIVE_PROVIDER - nguồn này trả về vị trí sinh ra bởi các nguồn khác. Ví dụ bạn nhận được vị trí cập nhật một cách thụ động khi mà các ứng dụng khác hoặc dịch vụ khác yêu cầu mà không phải bạn thực sự yêu cầu điều này.
Google Play services location API là cách mới mà Google giới thiệu để có thể lấy được vị trí hiện tại của thiết bị. API này không dùng "Fused Location Provider" mà tự động chọn nguồn cung cấp vị trí để sử dụng dựa trên độ chính xác và mức tiêu thụ pin. API này cũng được Google khuyến khích sử dụng thay thế cho Android Location API cũ. Các bước th c hi n đự ệ ược mô tả dưới đây.
Bước 2: Ki m tra thi t b có h tr Google play servicesể ế ị ỗ ợ
if(GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this)== ConnectionResult.SUCCESS)
return true;
3.4.3. Code x lý các s ki n ng
ử
ự
ệ
ườ
i dùng t
ươ
ng tác trên b n đ
ả
ồ
3.5. Demo ng d ng
ứ
ụ
Dưới đây là các sreenshot demo c a ng d ngủ ứ ụ
3.5.2. Activity thêm v trí
ị
Khi người dùng nh p ký t b t kì vào ô tìm ki m, ng d ng s hi n th m tậ ự ấ ế ứ ụ ẽ ể ị ộ danh sách các v tríị
Figure 9 ch c n ng thêm v trí theo dõi m iứ ă ị ớ
Khi người dùng n ch n m t v trí, v trí đó s đấ ọ ộ ị ị ẽ ược thêm vào c s d li u ơ ở ữ ệ và hi n th lên danh sách đang theo dõi c a ng d ngể ị ủ ứ ụ
Khi người dùng n gi m t v trí s có m t dialog hi n th tùy ch n có ấ ữ ộ ị ẽ ộ ể ị ọ mu n xóa v trí kh i danh sách theo dõi không.ố ị ỏ
Figure 11 h p tho i xác nh n xóa v trí kh i danh sách theo dõiộ ạ ậ ị ỏ
Figure 12 thông báo yêu c u ngầ ười dùng m k t n i internetở ế ố
ng d ng s yêu c u ng i dùng c p quy n truy c p v trí đ có th s
Ứ ụ ẽ ầ ườ ấ ề ậ ị ể ể ử
d ng ch c n ng myLocationụ ứ ă
Figure 13 ng d ng yêu c u quy n truy c p v tríứ ụ ầ ề ậ ị
Figure 14 thông báo khi người dùng không c p truy nấ ề
Khi người dùng n nút myLocation s đấ ẽ ược yêu c u b t GPS n u GPS ch a ầ ậ ế ư được b t, và đ a giao di n đ n menu setting GPSậ ư ệ ế
Figure 16 menu cài đ t b t GPSặ ậ
Khi GPS đã được b t, ng d ng s chuy n t i v trí hi n t i c a ngậ ứ ụ ẽ ể ớ ị ệ ạ ủ ười dùng và hi n th thông tin th i ti t t i đóệ ị ờ ế ạ
Khi người dùng click vào v trí b t kì trên b n đ , ng d ng s hi n th ị ấ ả ồ ứ ụ ẽ ể ị thông tin th i ti t c b n t i v trí đó.ờ ế ơ ả ạ ị
CH
ƯƠ
NG 4 K T LU N
Ế
Ậ
4.1. K t qu đ t đế ả ạ ược
Trên đây là toàn b nh ng phân tích và thi t k h th ng ng d ng "Xem d báo ộ ữ ế ế ệ ố ứ ụ ự th i ti t" trên android v i m c đích giúp m i ngờ ế ớ ụ ọ ười có th theo dõi tình hình th i ể ờ ti t m i lúc, m i n i v i chi c smartphone c a mình. V c b n ng d ng đã đáp ế ọ ọ ơ ớ ế ủ ề ơ ả ứ ụ
ng đ y đ yêu c u c a bài toán nhóm đã đ t ra ban đ u, giao di n đ n gi n, d
ứ ầ ủ ầ ủ ặ ầ ệ ơ ả ễ
s d ng, các ch c n ng có th s d ng n đ nh, không có l i nghiêm tr ng nào ử ụ ứ ă ể ử ụ ổ ị ỗ ọ x y ra…..ả