Report

Gratis

0
1
33
2 months ago
Preview
Full text
(1)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 Hà Nội 05/2019

(2) Danh mục hình vẽ

(3) Mục lục

(4) 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 Với nhu cầu đi lại, tổ chức các sự kiện, vui chơi giải trí ngày càng tăng cao thì việc nắm bắt tình hình thời tiết là điều rất quan trọng. Nó giúp chúng ta chuẩn bị trước những ngày thời tiết x ấu, tránh những địa điểm thời tiết tốt cũng như chọn được địa điểm với thời tiết thuận lợi hơn. Hiểu được nhu cầu đó, các ứng dụng về xem dự báo thời tiết được tạo ra giúp chúng ta nắm bắt tình hình thời tiết ngay trên chiếc điện thoại của mình. Mặc dù hiện nay đã có rất nhiều ứng dụng về thời tiết như vậy với nhiều tính năng khác nhau và trên nhiều hệ điều hành di động khác nhau, nhưng chúng em v ẫn xin xây dựng một ứng dụng "Xem dự báo thời tiết trên Android" đ ể

(5) 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, OpenWeatherMap api, Google play services

(6) Nguyễn Anh Tuấn - Hiển thị thông báo trên notification bar - Làm báo cáo và các phần riêng. - 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 (-) biểu thị vị trí nằm ở nam bán cầu và ngược lại.  Main bao gồm các thuộc tính:

(7)     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ố. o Và tất cả các thuộc tính là các lớp nêu trên theo quan h ệ 1-n.

(8) 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 _id id name country lat lon Kiểu dữ liệu INTEGER Mô tả là trường bắt buộc của sqlite cho TEXT TEXT TEXT DOUBLE DOUBLE mỗi bảng, tự động tăng. là định danh của một vị trí là tên của một vị trí là mã quốc gia của một vị trí là tọa độ vĩ độ của một vị trí là tọa độ kinh độ của một vị trí

(9) 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 Figure 2 giao diện đăng ký tài khoản OpenWeatherMap

(10) 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ới https://console.cloud.google.com đăng nhập với tài khoản google Tạo mới một project cho ứng dụng

(11) Figure 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 Tìm kiếm Maps SDK for Android và chọn Enable

(12) 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 Key thu được điền vào file google_maps_api.xml trong thư mục values

(13) 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 Gồm hai thành phần chính: 1 search input AutoCompleteView để ng ười dùng tìm vị trí muốn theo dõi và 1 ListView để hiển thị danh sách v ị trí người dùng đang theo dõi.

(14) 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 3: khởi tạo danh sách gợi ý tìm kiếm vị trí và xử lý sự kiện người dùng chọn 1 item trên dropdown

(15) 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 Bước 5: khởi tạo listView hiển thị danh sách vị trí người dùng theo dõi

(16)

(17) 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 Một trong những tính năng hữu ích của điện thoại đó là tính n ăng v ị trí. Hiện nay, có hai cách để có thể lấy được vị trí thiết bị người dùng trên android đó là sử dụng Android location API và Google play services API. Android Location API sử dụng 3 nguồn cung cấp để lấy vị trí là:

(18)  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 1: Với android 6.0 trở lên, ta cần kiểm tra quyền truy cập v ị trí tại runtime và xử lý các kết quả trả về trong onRequestPermissionsResult()

(19) Bước 2: Kiểm tra thiết bị có hỗ trợ Google play services if(GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this)== ConnectionResult.SUCCESS) return true; Bước 3: Cài đặt client và build yêu cầu vị trí

(20) Bước 4: Tiến hành lấy vị trí và cập nhật khi vị trí thay đổi

(21)

(22) 3.4.3. Code xử lý các sự kiện người dùng tương tác trên bản đồ 3.4.4. Xử lý nhận dữ liệu thời tiết từ api

(23) 3.4.5. Hiển thị trên notification bar

(24) 3.5. Demo ứng dụng Dưới đây là các sreenshot demo của ứng dụng 3.5.1. Activity home

(25) 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 Figure 10 danh sách hiển thị các vị trí đang theo dõi

(26) 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 3.5.3. Activity xem thời tiết của một vị trí bất kì trên b ản đ ồ Khi mở giao diện khi chưa có kết nối internet người dùng sẽ nhận được một message yêu cầu bật internet

(27) 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í Nếu người dùng từ chối thì sẽ nhận được một tin nhắn giải thích cần cấp quyền cho ứng dụng

(28) 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 15 yêu cầu bật GPS

(29) 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 đó Figure 17 hiển thị thông tin thời tiết tại vị trí hiện tại

(30) 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í đó. Figure 18 hiển thị thông tin tại vị trí bất kỳ

(31) Thông tin thời tiết cơ bản trên notification bar của đi ện tho ại

(32) 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….. 4.2. Định hướng phát triển

(33)

(34)

Dokumen baru