TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN KHOA CÔNG NGHỆ THƠNG TIN ***
HỌC PHẦN: CHUN ĐỀ 3 LẬP TRÌNH MẠNG TRÊN ANDROID HỆ: ĐẠI HỌC (tài liệu lưu hành nội bộ)
Hưng Yên – Tháng 1 năm 2017
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android
MỤC LỤC Bài 1 Tổng quan về module ..................................................................................................1 1.1. Tổng quan về module ...................................................................................................1 1.2. Một số thư viện thường dùng trong android..................................................................1 1.2. Tiến trình và luồng .......................................................................................................3 1.2.1 Tiến trình ................................................................................................................3 1.2.2. Luồng ....................................................................................................................3 1.2.3. Lớp Hander ...........................................................................................................3 1.2.4. Giới thiệu đa luồng ................................................................................................6 1.3. AsyncTask ...................................................................................................................7 1.3.1. Tổng quan về lớp AsyncTask.................................................................................7 1.3.2. Mô tả lớp AsyncTask .............................................................................................7 1.3.3. Ứng dụng tải ảnh từ internet ..................................................................................9 1.3.4. Ứng dụng ProgressBar với AsyncTask................................................................. 11 Bài 2 Tin nhắn ...................................................................................................................... 14 2.1. SmsManager .............................................................................................................. 14 2.1.1. Giới thiệu SmsManager ....................................................................................... 14
2.1.2. Để thực hiện xây dựng ứng dụng với SmsManager qua các bước sau:.................. 14 2.2. Telephony .................................................................................................................. 17 2.2.1. Giới thiệu Telephony Manager ............................................................................ 17 2.2.2. Thao tác với Telephony Manager ......................................................................... 17 2.3. Intent ......................................................................................................................... 19 2.3.1. Định nghĩa ........................................................................................................... 19 2.3.2. Phương thức và mô tả Intent ................................................................................ 19 2.3.3. Thao tác với intent ............................................................................................... 20 2.4. BroadcastReceiver ..................................................................................................... 20 2.4.1. Giới thiệu về Broadcast Receiver ......................................................................... 20 2.4.2. Ứng dụng thông báo thay đổi trạng thái wifi ........................................................ 21 2.4.3. Ví dụ ứng dụng BroadCast tự định nghĩa ............................................................. 22 Bài 3 Thư điện tử ................................................................................................................. 25 3.1. Gửi email ................................................................................................................... 25 3.1.1. Intent Object – Những hỗ trợ để sử dụng tính năng Email .................................... 25 3.1.2. Intent ứng dụng trong gửi email ........................................................................... 26 3.2. Gmail API .................................................................................................................. 26 3.3. Một số chức năng của email ....................................................................................... 27 3.3.1. Xem email ........................................................................................................... 27 3.3.2 Tạo thư nháp......................................................................................................... 28 3.3.3 Cập nhật thư rác.................................................................................................... 30 3.3.4 Gửi thư rác ........................................................................................................... 30 Bài 4 Ứng dụng tin nhắn và ứng dụng thư điện tử ................................................................. 31 4.1. Tổng hợp kiến thức liên quan ..................................................................................... 31 4.2. Ứng dụng tin nhắn SMS ............................................................................................. 31 4.3. Ứng dụng thư điện tử ................................................................................................. 40 Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 1
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android Bài 5 Một số dịch vụ trên google .......................................................................................... 43 5.1. Giới thiệu Google service .......................................................................................... 43 5.2. Google Map Service .................................................................................................. 43 5.2.1. Một số ứng dụng của Google Map API................................................................ 45 5.2.2 Yêu cầu để hiển thị bản đồ sử dụng google map ................................................... 45 5.3. Mapview.................................................................................................................... 48 5.3.1. Giới thiệu Mapview............................................................................................. 48 5.3.2. Sử dụng Mapview cơ bản .................................................................................... 48 5.3.3. Xây dựng ứng dụng hiển thị vị trí của 1 địa điểm trên bản đồ .............................. 48 5.4. Location Base Service ............................................................................................... 55 5.4.1 The Location Object ............................................................................................. 56 5.4.2. LocationManager ................................................................................................ 57 5.4.3. Ứng dụng vị trí .................................................................................................... 58 Bài 6 Ứng dụng Location Base service ................................................................................. 63 6.1. Tìm tọa độ của 1 địa điểm .......................................................................................... 63 6.1.1. Tìm tọa độ của 1 địa điểm với google map .......................................................... 63 6.1.2. Tìm tọa độ của 1 địa điểm với Google Earth ........................................................ 63 6.2. Các phương thức của lớp Map ................................................................................... 65 6.3. Ứng dụng tìm đường đi giữa 2 vị trí dung Google Map Direction API ....................... 67 Bài 7 Kết nối với tài nguyên Internet .................................................................................... 68 7.1. Giới thiệu WebView .................................................................................................. 68 7.1.1. Giới thiệu WebView............................................................................................ 68 7.1.2. Thao tác với WebView qua các bước sau: ........................................................... 68 7.1.3. Ví dụ ................................................................................................................... 68 7.2. Giới thiệu ConnectionReceiver và NetworkInfo ......................................................... 70 7.2.1. Lớp ConnectivityManager ................................................................................... 70 7.2.2 Lớp NetworkInfo.................................................................................................. 71 7.3. Quản lý mạng và kết nối mạng................................................................................... 71
7.3.1. Kiểm tra trạng thái kết nối mạng.......................................................................... 71 7.3.2. Ứng dụng cảnh báo khi trạng thái kết nối mạng thay đổi với BroadcashReceiver. 74 Bài 8 Sử dụng nguồn dữ liệu từ internet ............................................................................... 76 8.1. Định vị tài nguyên ..................................................................................................... 76 8.1.1. Liên kết ............................................................................................................... 76 8.1.2. Định nghĩa URL .................................................................................................. 76 8.1.3. Cấu trúc của URL................................................................................................ 76 8.2. HTML và RSS ........................................................................................................... 77 8.2.1. Định nghĩa HTML............................................................................................... 77 8.2.2. Cấu trúc cây HTML cơ bản ................................................................................. 77 8.2.3. HTML và CSS .................................................................................................... 78 8.2.4. Một số thể hay dùng trong HTML ....................................................................... 79 8.2.5. RSS ..................................................................................................................... 79 8.2.6. Đặc tả RSS .......................................................................................................... 80 8.2.7. Một số phần tử của RSS ...................................................................................... 81 8.3. Một số lớp liên quan tới ............................................................................................. 81 8.3.1. Giới thiệu lớp URL ............................................................................................. 81 Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 2
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android 8.3.2. Giới thiệu lớp URLConnection ............................................................................ 82 8.3.3. Giới thiệu lớp HttpURLConnection ..................................................................... 83 8.4. Lấy dữ liệu đơn giản từ URL trên internet .................................................................. 84 8.4.1. Load dữ liệu văn bản từ internet về điện thoại ...................................................... 84 8.4.2. Load ảnh từ internet ............................................................................................. 86 8.4.3. Load nhạc từ internet ........................................................................................... 89 Bài 9 Ứng dụng duyệt web Webmini và đọc tin tức .............................................................. 89
9.1. Tổng hợp kiên thức liên quan ..................................................................................... 89 9.2. Ứng dụng duyệt web Webmini ................................................................................... 89 9.3. Ứng dụng đọc báo ...................................................................................................... 94 Bài 10 Một số khái niệm cơ bản về dịch vụ mạng ................................................................. 95 10.1. Một số khái niệm cơ bản .......................................................................................... 95 10.1.1. Mơ hình OSI ...................................................................................................... 95 10.1.2. Giao thức ........................................................................................................... 96 10.1.3. Địa chỉ IP........................................................................................................... 97 10.1.4. Cổng (Port) ........................................................................................................ 98 10.1.5. Mơ hình hướng kết nối TCP/IP .......................................................................... 98 10.1.6. So sánh sự khác nhau giữa TCP và UDP .......................................................... 100 10.1.6. Mô hình OSI và TCP/IP ................................................................................... 101 10.2. Giới thiệu WebService ........................................................................................... 101 10.2.1. Giới thiệu WebService ..................................................................................... 101 10.2.2. Định nghĩa WebService ................................................................................... 101 10.2.3. Đặc điểm của Web service ............................................................................... 102 10.2.4. Ưu và nhược điểm ........................................................................................... 102 10.3. Kiến trúc của Web service ...................................................................................... 103 10.3.1. Kiến trúc của Web service ............................................................................... 103 10.3.2.Thành phần cơ bản của Web service ................................................................. 104 10.4. Xây dựng và triển khai dịch vụ mạng cho ứng dụng di động................................... 105 10.4.1. Giới thiệu......................................................................................................... 105 10.4.2. Các bước chính trong triển khai dịch vụ mạng cho ứng dụng di động ............... 106 10.4.3. Giao tiếp client và server ................................................................................. 106 10.5. Một số công nghệ lập trình mạng ........................................................................... 106 10.5.1. Cơng nghệ Web Service ................................................................................... 107 Bài 11 Định dạng dữ liệu XML .......................................................................................... 110 11.1. Tổng quan về XML ................................................................................................ 110 11.1.1. Giới thiệu XML ............................................................................................... 110 11.1.2. XML và HTML ............................................................................................... 110
11.1.3. XML đã làm cải thiện dịch vụ Web.................................................................. 111 11.2. Đặc tả cấu trúc và nội dung tài liệu XML ............................................................... 112 11.2.1. Các quy tắc văn bản XML ............................................................................... 112 11.2.2. Cú pháp của XML ........................................................................................... 114 11.2.3. Đặc tả tài liệu XML ......................................................................................... 116 11.2.4. Ví dụ đặc tả tệp XML ...................................................................................... 117 11.2.5. Tài liệu XML hợp lệ ........................................................................................ 118 11.2.6 Tạo tài liệu XML hợp lệ ................................................................................... 120 Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 3
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android 11.3. Phân tích dữ liệu XML........................................................................................... 121 13.3.1. Phân tích XML bằng kỹ thuật DOM ................................................................ 122 13.3.2. Phân tích XML bằng kỹ thuật SAX ................................................................. 123 13.3.3. Kỹ thuật DOM và kỹ thuật SAX ...................................................................... 124 11.4. Tạo một tài liệu XML trên android......................................................................... 124 Bài 12 Định dạng dữ liệu JSON ......................................................................................... 129 12.1. Giới thiệu JSON .................................................................................................... 129 12.1.1. Giới thiệu về JSON ......................................................................................... 129 12.1.2. Định nghĩa JSON ............................................................................................ 129 12.1.3. Ưu điểm của Json ............................................................................................ 129 12.2. Cấu trúc tệp JSON ................................................................................................. 129 12.2.1. Cấu trúc tệp JSON ........................................................................................... 129 12.2.2. Ví dụ mơ tả JSON ........................................................................................... 131 12.3. Thao tác với tệp định dạng JSON ........................................................................... 132 12.3.1. Tổng quan về thao tác với tệp JSON ................................................................ 132 12.3.2. Các bước thực hiện thao tác với URL định dạng JSON .................................... 132
12.3.3. Đọc databse dạng jSON ................................................................................... 133 12.4. JSON và XML ....................................................................................................... 134 Bài 13 Dịch vụ Web với WebService ................................................................................. 136 13.1. Cấu hình IIS và SQL .............................................................................................. 136 13.1.1. Cài đặt IIS ....................................................................................................... 136 13.1.2. Cấu hình SQL.................................................................................................. 137 13.2. Khởi tạo WebService ............................................................................................. 138 13.2.1. Các bước xây dựng WebService ...................................................................... 138 13.2.2. Xây dựng WebService hỗ trợ các phép tính cộng ............................................. 139 Bài 14 Lập trình dịch vụ mạng Xây dựng ứng dụng di động ............................................... 142 14.1. Tổng hợp một số kiến thức liên quan ..................................................................... 142 14.1.1. Sử dụng AsyncTask ......................................................................................... 142 14.1.2. Thư viện KSOAP 2 ......................................................................................... 142 14.1.3. Thư viện Retrofit ............................................................................................. 142 14.2. Ứng dụng WebService ........................................................................................... 142 Bài 15 Dịch vụ Web với WebAPI ...................................................................................... 152 15.1 Tổng quan về Web API........................................................................................... 152 15.1.1. Giới thiệu API ................................................................................................. 152 15.1.2 Giới thiệu Web API .......................................................................................... 152 15.1.3. Đặc điểm Web API (.NET 4.0 trở lên) ............................................................. 153 15.1.4. Công cụ phát triển Web API ............................................................................ 153 15.2. Khởi tạo và cấu hình Web API............................................................................... 154 15.2.1 Tạo ứng dụng Web API bằng Visual Studio ..................................................... 154 15.2.2 Tạo ứng dụng Web API đầu tiên....................................................................... 156 Bài 16 Ứng dụng Dịch vụ Web theo công nghệ WebAPI ................................................... 160 16.1. Tổng hợp một số khái niệm lien quan với WebAPI ................................................ 160 16.1.1. Tạo Web API: ................................................................................................. 160 16.1.2. TẠO WEB API BẰNG NODEJS, CSDL MONGODB(NoSQL) ..................... 160 16.2. Ứng dụng quản lý account với Web API ................................................................ 161 Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 4
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android 16.3. Xây dựng app android đọc account từ Web API ..................................................... 166 Bài 17 Giới thiệu về bảo mật trên mobile............................................................................ 171 17.1.Giới thiệu ................................................................................................................ 171 17.2. Các mức bảo vệ trên mạng ..................................................................................... 171 17.2.1. Bảo vệ Quyền truy nhập................................................................................... 171 17.2.2. Đăng ký tên /mật khẩu. .................................................................................... 171 17.2.3. Mã hoá dữ liệu ................................................................................................. 172 17.2.4. Bảo vệ vật lý .................................................................................................... 172 17.2.5. Tường lửa ........................................................................................................ 172 17.2.6. Quản trị mạng .................................................................................................. 172 17.2.7. An tồn thơng tin bằng mật mã ........................................................................ 173 17.3. Một số phương pháp bảo mật ứng dụng Android .................................................... 173 17.3.1. Lưu trữ nội bộ .................................................................................................. 174 17.3.2. Mã hóa dữ liệu trên bộ nhớ ngoài ..................................................................... 174 17.3.3. Sử dụng Intents cho IPC .................................................................................. 174 17.3.4. Sử dụng HTTPS............................................................................................... 175 17.3.5. Sử dụng GCM thay cho SMS ........................................................................... 176 17.3.6. Tránh Yêu cầu dữ liệu cá nhân ......................................................................... 176 17.3.7. Xác nhận User Input ........................................................................................ 176 17.3.8. Sử dụng ProGuard Trước khi Publishing.......................................................... 177 17.4. Tạo chữ ký kỹ thuật số trong ứng dụng Android ..................................................... 177 17.4.1 Giới thiệu ......................................................................................................... 177 17.4.2. Tạo chữ ký kỹ thuật số trong ứng dụng Android .............................................. 178
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 5
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android
DACH MỤC TỪ VIẾT TẮT STT Từ viết tắt API 1
Cụm từ đầy đủ Application Programming Interface
2
CSS
Cascading Style Sheets
3
DB
DataBase
4
GCM
Google Cloud Messaging
5
GPS
Global Positioning Service
6
GUI
Graphical User Interface
7
HTML
Hyper Text Markup Language
8
HTTP
Hyper Text Transfer Protocol
9
HTTPS
Secure Hyper Text Transfer Protocol
10
IP
Internet Protocol
11
JDBC
Java Database Connectivity
12
JSON
JavaScript Object Notation
13
LINQ
Language Integrated Query
14
REST
Representational State Transfer
15
RESTFul
Representational State Transfer
16
RPC
Remote Procedure Calls
17
RSS
Really Simple Syndication
18
SOAP
Simple Object Access Protocol
19
SQL
Structured Query Language
20
SSL
Secure Sockets Layer
21
TCP
Transmission Control Protocol Transmission Control Protocol/Internet Protocol
22
TCP/IP
23
URI
Uniform Resource Identifier
24
URL
Uniform Resource Locator
25 26 27
WCF
Windows Communication Foundation Web Service Description Language Extensible Markup Language
WSDL XML
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 2
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android
DANH MỤC HÌNH VẼ, BẢNG Hình 1. Hình ảnh mơ phịng MultiThreading.........................................................................7 Hình 2. Lớp kế thừa từ lớp AsyncTask..................................................................................8 Hình 3. Mơ hình làm việc AsyncTask ...................................................................................8 Hình 4. Thứ tự thực hiện các phương thức của lớp AsyncTask ..............................................9 Hình 5. Kết quả ứng dụng ProgressBar ............................................................................... 13
Hình 6. Hoạt động Broadcast Receiver................................................................................ 21 Hình 7. Các kiểu giao diện hiển thị bản đồ mà Google Maps cung cấp ................................ 44 Hình 8. API key và google service ...................................................................................... 45 Bảng 1. Bảng một số phương thức hay sử dụng lớp Location .......................................... 56 Bảng 2. Các tham số của phương thức locationManager.requestLocationUpdates ............ 57 Hình 9. Lấy tọa độ của 1 địa điểm với google map.............................................................. 63 Hình 10. Lấy tọa độ của 1 địa điểm với google Earth ........................................................ 64 Bảng 3. Các phương thức của lớp Map ............................................................................ 65 Bảng 4. Các thuộc tính của lớp Map ................................................................................ 66 Bảng 5. Sự kiện của Map ................................................................................................. 66 Bảng 6. Các điều khiển của Map ...................................................................................... 66 Hình 11. Cấu trúc trang web theo định dạng HTML .......................................................... 78 Hình 12. Cấu trúc trang web theo định dạng HTML5 ........................................................ 78 Bảng 7. Bảng các phương thức khởi tạo của lớp URL ...................................................... 81 Bảng 8. Bảng một số phương thức trong lớp URL ........................................................... 82 Bảng 9. Bảng mô tả các chức năng trong mơ hình OSI..................................................... 96 Hình 13. Phương thức hoạt động của bộ giao thức TCP/IP ................................................ 99 Hình 14. Mơ hình OSI và cụm giao thức TCP/IP ............................................................. 101 Hình 15. Kiến trúc của Web service ................................................................................ 103 Hình 16. Mơ hình giao tiếp client và server ..................................................................... 106 Hình 17. Kiến trúc WCF ................................................................................................. 107 Hình 18. Kiến trúc WebAPI ............................................................................................ 109 Hình 19. Phân tích cú pháp của XML .............................................................................. 114 Hình 20. Phân tích XML bằng kỹ thuật DOM ................................................................. 122 Hình 21. Cấu trúc tệp JSON ............................................................................................ 131 Hình 22. Cài đặt IIS ........................................................................................................ 137
Bộ mơn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 3
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android
Bài 1 Tổng quan về module 1.1. Tổng quan về module Module này giới thiệu cho người học về dịch vụ mạng và các đối tượng thư viện hỗ trợ việc lập trình dịch vụ mạng trên android. Dịch vụ và dịch vụ mạng được giới thiệu trong module gồm: Các dịch vụ trên điện thoại, dịch vụ của google, dịch vụ trên web. Một số vấn đề liên quan được giới thiệu như: khái niệm webservice, cụm giao thức mạng, các loại dữ liệu XML, JSON lưu trữ dữ liệu trên internet.
1.2. Một số thư viện thường dùng trong android 1. Gson Gson là thư viện Android dùng để tạo ra Json từ Java Object hoặc gắn giá trị cho Java Object từ Json. Thư viện này thường được sử dụng khi tương tác với APIs. Chúng ta thường sử dụng Json bởi vì nó nhẹ và đơn giản hơn so với XML. 2. Retrofit Trên trang chủ của Retrofit có câu: “Retrofit turns your REST API into a Java interface” nói lên đầy đủ chức năng của nó. Đây là một giải pháp tuyệt vời để tổ chức các lời gọi API trong một dự án. Các lời gọi request được thêm đơn giản và tiện dụng. Ta sử dụng Callback để lấy kết quả các request gửi lên. Sử dụng thư viện Retrofit Trang chủ: />Retrofit là một Rest Client (Tìm hiểu thêm về chuẩn RESTFul dưới link tham khảo) cho Android và Java và được tạo ra bởi Square. Họ làm cho việc nhận và tải lên JSON (hoặc dữ liệu khác) một cách khá dễ dàng tới một WebService dựa trên mô hình REST. Để làm việc với Retrofit cần triển khai cơ bản 3 lớp: – Model class to map JSON Data – Interfaces để định nghĩa các API cho Webservice – Retrofit.Builder Lớp để định nghĩa URL Endpoint cho các hoạt động liên quan tới
Http 3. EvenBus EvenBus là thư viện làm đơn giản giao tiếp giữa các phần trong ứng dụng của bạn. Ví dụ, để gửi dữ liệu từ Activity tới Service đang chạy, hoặc gửi dữ liệu giữa các Fragment. 4. ActiveAndroid ActiveAndroid là một ORM dành cho Android. Nó là một trừu tượng của SQLite cho phép bạn giao tiếp với database trong một device khi không phải viết câu lệnh SQL. 5. Universal Image Loader UIL là thư viện cung cấp asynchronous, caching hình ảnh … 6. KSOAP KSOAP2 là một thư viện nhẹ để sử dụng trong các thiết bị bị ràng buộc. Nó khơng phải là một thư viện bao gồm tất cả thư viện do-it-all. Tuy nhiên nó có nghĩa là để tương tác với hầu hết các động cơ SOAP phổ biến. SOAP đưa ra một số chi phí đáng kể cho các dịch vụ web có thể là vấn đề đối với các thiết bị di động. Nếu bạn có tồn quyền kiểm sốt máy khách và máy chủ, kiến trúc dựa trên REST / JSON đơn giản có thể đầy đủ hơn. KSOAP2 được tạo thành từ một trình phân tích cú pháp XML, một bộ phân tách de / và một lớp vận chuyển.
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 1
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android 7. Piccaso Khi tải hình ảnh từ web, thì bạn nên sử dụng Picasso vì nó đơn giản và dễ dàng và tôi thực sự như thế nào API được viết. Các bước bạn cần thực hiện để tải xuống hình ảnh chỉ với các API Android chuẩn: – Nhận URL Hình ảnh – Tạo AsyncTask để tải hình ảnh
– Thực thi AsyncTask – Lưu trữ kết quả trong Bitmap – Đặt bitmap làm nguồn – Hình ảnh Cache cho tương lai 8.Dagger Dagger được biết đến và sử dụng là một thư viện dependency injection trong Android. Nó là một dependency injection đơn giản và nhanh cho cả Android và Java, bao gồm 2 phần: thư viện Dagger (size 100kb) và trình biên dịch Dagger. Thư viện này chứa tất cả những logic cần thiết và một số chú thích.Nó cũng sử dụng chuẩn chú thích javax.inject, làm code của bạn khác với các dependency injection khác của framework như Spring hay Guice. Dagger được cấp phép theo Apache License 2.0, được phát triển và điều hành bởi Square và Google và có thể tìm được ở đây: />9. LeakCanary Bạn có biết những người thợ mỏ sử dụng một con chim hoàng yến nhốt trong một chiếc lồng, nếu khí gas nhiều đến mức con hồng yến chết, đó sẽ là dấu hiệu để họ rời khỏi mỏ. LeakCanary dễ dàng phát hiện các đối tượng bị rò rỉ bằng cách thêm một vài dòng code Java vào code đã có sẵn. Nó miễn phí và dễ dàng sử dụng. LeakCanary được cấp phép theo Apache License 2.0, được phát triển và điều hành bởi Square và có thể tìm được ở đây: />10. ZXing Sử dụng mã vạch và mã QR làm tiêu chuẩn trong các thiết bị đọc dữ liệu. Ban đầu được viết bằng Java, nó có thể đọc và tạo mã vạch trên nhiều nền tảng, và nó đã được chuyển sang nhiều ngôn ngữ khác. Thư viện này đã được phát triển một thời gian và có cơ sở người dùng tốt. Trình đọc mã QR được dùng trên smartphone cũng sử dụng thư viện này. Nó làm việc hiệu quả và có lịch sử tốt. ZXing được phát triển bởi Sean Oven,Daniel Switkin, ZXing Team và được cấp phép theo Apache License 2.0. Nó có thể tìm được ở đây: />11. Libphonenumber Khi phân tích cú pháp và định dạng số điện thoại, khơng có nhiều giải pháp sẵn có tốt và miễn phí. Rất may, Google team đã đưa ra một thư viện có tên Libphonenumber. Đây có lẽ là thư viện tốt và tồn diện nhất để phân tích cú pháp, xác nhận và định dạng số điện thoại. Nó khá đơn giản và dễ dàng để sử dụng API và cũng đã được chuyển sang các ngơn
ngữ khác ngồi JVM như C# và PHP. Libphonenumber được phát triển và điều hành bởi Google và được cấp phép Apache License 2.0. Download tại đây: />12.Tape Đây là một thư viện khác của Square. Tape là một tập hợp của các lớp để xử lý hàng đợi. Thật tuyệt khi xử lý luồng dữ liệu và download dữ liệu trong mơi trường khơng ổn định.Thay vì code xử lý hàng đợi bằng tay, Tape sẽ làm thay bạn. Nếu có lỗi nào đó, Tape sẽ
Bộ mơn Cơng nghệ Phân mềm khoa Công nghệ Thông tin
Trang 2
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android tự động chạy lại lệnh hoặc hoạt động lại một lần nữa. Ngoài ra, tất cả các kết quả trung gian sẽ được tự đọng o lưu trữ, đây cũng là một tính năng hữu ích của Tape. Tape được được cấp phép Apache License 2.0, bạn có thể tìm tại đây: />13.Jitpack.io Jitpack.io được phát triển bởi nhóm nghiên cứu của Streametry Ltd. Jitpack có thể built bất kỳ project GitHub nào và phát hành tới repo Maven cơng cộng. Nó giúp tiết kiệm thời gian và rắc rối khi xây dựng dependency. Nó là một trong những cách đơn giản nhất để xuất bản bất kì project GitHub nào như một Maven dependency Bạn có thể kiểm tra Jitpack tại đây: Jitpack uses a custom terms of usage license.
1.2. Tiến trình và luồng 1.2.1 Tiến trình Process là quá trình hoạt động của một ứng dụng. Điều đó nghĩa là gì? Có thể lấy một ví dụ như sau, khi bạn click đúp chuột vào biểu tượng MS Word, một process chạy ứng dụng Word được khởi tạo.
1.2.2. Luồng Thread là một tiến trình đơn vị xử lý của máy tính có thể thực hiện một cơng việc riêng biệt. Trong Java các luồng được quản lý bởi máy ảo Java (JVM). Thread là một bước điều hành bên trong một process. Một process dĩ nhiên có thể chứa nhiều thread bên trong nó. Khi chúng ta chạy ứng dụng Word, hệ điều hành tạo ra một process và bắt đầu chạy các thread chính của process đó. Điểm quan trọng nhất cần chú ý là một thread có thể làm bất cứ nhiệm vụ gì một process có thể làm. Tuy nhiên, vì một process có thể chứa nhiều thread, mỗi thread có thể coi như là một process nhỏ. Vậy, điểm khác biệt mấu chốt giữa thread và process là công việc mỗi cái thường phải làm. Một điểm khác biệt nữa đó là nhiều thread nằm trong cùng một process dùng một không gian bộ nhớ giống nhau, trong khi process thì khơng. Điều này cho phép các thread đọc và viết cùng một kiểu cấu trúc và dữ liệu, giao tiếp dễ dàng giữa các thread với nhau. Giao thức giữa các process, hay còn gọi là IPC (interprocess communication) thì tương đối phức tạp bởi các dữ liệu có tính tập trung sâu hơn.
1.2.3. Lớp Hander Khi một tiến trình được tạo cho một ứng dụng, main thread của nó được dành riêng để chạy một message queue, queue này quản lý các đối tượng bậc cao của ứng dụng (activity, intent receiver, v.v..) và các cửa sổ mà chúng tạo ra. Ta có thể tạo các thead phụ, chúng tương tác với thread chính của ứng dụng qua một Handler. Khi ta tạo một Handler mới, nó được gắn với message queue của thread tạo ra nó – từ đó trở đi, nó sẽ gửi các message và các runnable tới message queue đó và thực thi chúng khi chúng ra khỏi message queue. Hai ứng dụng chính của Handler: xếp lịch cho các message và runnable cần được thực thi vào thời điểm nào đó trong tương tai và xếp hàng một action cần thực hiện tại một thread khác. Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 3
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android Một số phương thức hay dùng của Handler – Activity.runOnUiThread(Runnable) – View.post(Runnable) – View.postDelayed(Runnable, long) Có 2 cách tạo lớp Handler Tạo một lớp thread mới kế thừa từ lớp Thread public class NewThread extends Thread{ public void run() { print(“Hello”) } } Tạo một biến mới của lớp Thread với đối tượng Runnable Thread background = new Thread(new Runnable() { public void run() { print(“Hello”) } } Và để chạy bất kỳ một thread nào ta đều phải gọi phương thức start(); background.start() Ví dụ import android.os.Handler; Handler mHandler = new Handler(); // ... new Thread() { public void run() {
// Instantiate XML parser mHandler.post (new Runnable() { public void run() { parsingStatus.setText (“Began Parsing...”); } }); // XML Parsing loop here // Update parsingStatus has needed… mHandler.post (new Runnable() { public void run() { parsingStatus.setText (“Finished parsing...”); } }); } }.start();
public void onClick(View v) { new Thread(new Runnable() { public void run() { Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 4
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android // a potentially time consuming task final Bitmap bitmap = processBitMap("image.png"); mImageView.post(new Runnable() { public void run() {
Bước 1: Tạo Project và thiết lập quyền cần thiết trong file app\Manifest\AndroidManifest.xml
Bước 2: Thiết kế các giao diện cần thiết cho ứng dụng res\layout\*.xml <?xml version="1.0" encoding="utf8"?> <LinearLayout xmlns:android=" />android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
Bước 3: Xây dựng các lớp và các chức năng *.java import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.ProgressBar; public class HandlerDemo extends Activity { ProgressBar bar; Handler handler=new Handler() { @Override
public void handleMessage(Message msg) { bar. incrementProgressBy(5); } }; boolean isRunning=false; @Override Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 5
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android public void onCreate(Bundle icicle) { super. onCreate(icicle); setContentView(R.layout.main); bar=(ProgressBar)findViewById(R.id.progress); } public void onStart() { super. onStart(); bar. setProgress(0); Thread background=new Thread(new Runnable() { public void run() { try { for (int i=0;i<20 && isRunning;i++) { Thread. sleep(1000); handler. sendMessage(handler. obtainMessage()); } } catch (Throwable t) { // just end the background thread
1.2.4. Giới thiệu đa luồng Multithread là khái niệm cho nhiều tiến trình chạy đồng thời. Một ứng dụng Java ngồi luồng chính có thể có các luồng khác thực thi đồng thời làm ứng dụng chạy nhanh và hiệu quả hơn. VD: Trong một game đánh nhau có 2 người chơi thì mỗi người chơi sẽ do 1 luồng quản lý. Các hoạt cảnh game có thể do một luồng khác quản lý. Làm cho game trở nên sinh động.
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 6
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android Hình 1.
Hình ảnh mơ phịng MultiThreading.
Ưu điểm của đa luồng: Mỗi luồng có thể dùng chung và chia sẻ nguồn tài ngun trong q trình chạy, nhưng có thể
thực hiện một cách độc lập. Ứng dụng trách nhiệm có thể được tách + Luồng chính chạy giao diện người dung + Các luồng phụ nhiệm gửi đến luồng chính. Luồng mang tính chất trừu tượng Một chương trình đa luồng hoạt động nhanh hơn trên máy tính có cấu hình tốt và mạnh * Nhược điểm của đa luồng: Càng nhiều luồng thì xử lý càng phức tạp Cần phát hiện tránh các luồng chết, luồng chạy mà khơng làm gì trong ứng dụng cả
1.3. AsyncTask 1.3.1. Tổng quan về lớp AsyncTask AsyncTask là 1 class hỗ trợ, cung cấp cơ chế thuận tiện để di chuyển những xử lý tốn thời gian vào những tiến trình chạy ngầm (background thread). Nó cung cấp các sự kiện xử lý đồng bộ, đưa ra kết quả khi tiến thành hoàn thành. AsyncTask bao gồm 1 tiến trình chạy ngầm và một UI cập nhật kết quả khi tiến trình kết thúc(theo “Professional Android 2 Application”)
1.3.2. Mô tả lớp AsyncTask Để tạo task bất đồng bộ này thì cần extend AsyncTask. Cần chỉ định một class thực hiện phương thức execute, với format sau: AsyncTask<[Loại Tham số truyền vào], [Loại update],[Loại kết quả trả về]> Nếu không muốn sử dụng tham số truyền vào, tiến độ update, hoặc kết quả trả về, sử dụng Void cho tất cả. Ví dụ:
Bộ mơn Cơng nghệ Phân mềm khoa Công nghệ Thông tin
Trang 7
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android Hình 2.
Lớp kế thừa từ lớp AsyncTask
Trong đó các hàm cần chú ý: – onPreExecute: hàm này sẽ chạy đầu tiên khi class được gọi. – doInBackground: đây là phương thức chạy background nên NĨ KHƠNG ĐƯỢC TƯƠNG TÁC VỚI OBJECT Ui (vd như set text cho textview hay showToast ở đây là không được…). ở đây đặt phần code xử lý tốn thời gian vào, và sử dụng phương thức publishProgress để cho phép phương thức onProgressUpdate() update lên UI. Khi tiến trình này kết thúc, trả về kết quả cuối cùng cho xử lý onPostExecute. – onProgressUpdate: nhận các thông số thông qua phương thức publishProgress trong doInBackground. Phương thức này thì đồng bộ với UI đang chạy. – onPostExecute: là phương thức được gọi khi doInBackground hồn thành.
Giải thích cho ví dụ DownLoad: – Ta thực hiện một phương thức dowdload một tập tin. Bạn xử lý như sau: hiện lên một progress thông báo % của q trình download, và hiển thì thơng báo thành cơng khi hồn thành download. Như vậy thì ở: – onPreExecute: sẽ hiển thị thanh progress đang ở 0%. – doInBackground: thực hiện download, trong này bạn xử lý để lấy được % download là n, bàn dùng phương thức publishProgress để truyền n ra ngồi. Chú ý là trong này bạn khơng thể update cái progress lên n% được được. – onProgressUpdate: nhận được n và bạn sẽ update cho progress lên n %. – onPostExecute: kết thúc download, hiện thị Toast thơng báo download thành cơng.
Hình 3.
Mơ hình làm việc AsyncTask
Bộ mơn Cơng nghệ Phân mềm khoa Công nghệ Thông tin
Trang 8
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android Hình 4.
Thứ tự thực hiện các phương thức của lớp AsyncTask
1.3.3. Ứng dụng tải ảnh từ internet Bước 1: Tạo Project và thiết lập quyền cần thiết trong file app\Manifest\AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET" /> Bước 2: Thiết kế các giao diện cần thiết cho ứng dụng res\layout\*.xml <?xml version="1.0" encoding="utf8"?> <LinearLayout xmlns:android=" />android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Ảnh hiển thị" android:id="@+id/textView" /> android:layout_width="200dp" android:layout_height="200dp" android:id="@+id/img" android:layout_gravity="center_horizontal" />
</LinearLayout> Bước 3: Xây dựng các lớp và các chức năng *.java import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import com.google.android.gms.appindexing.Action; import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL;
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 9
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android public class MainActivity extends AppCompatActivity { ImageView img; String uri = " />@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.httpconnection); img = (ImageView) findViewById(R.id.img); //Biến u lấy uri; URL(uri)fair nằm trong try catch
// B3 Chạy loadImageFromInternet runOnUiThread(new Runnable() { @Override public void run() { // Gọi lớp loadImageFromInternet vừa Tạo trong B2 new loadImageFromInternet().execute(uri); } }); } // url, %tải về private class loadImageFromInternet extends AsyncTask<String, Integer, String> { //doInBackground: Hàm chỉ hành động. VD này là hành động lấy hình từ internet @Override protected String doInBackground(String... params) { //Biến u lấy uri try { URL u = new URL(params[0]); Bitmap bm=BitmapFactory.decodeStream(u.openConnection().getInputStream()); img.setImageBitmap(bm); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
return null; } } }
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin
Trang 10
Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android
1.3.4. Ứng dụng ProgressBar với AsyncTask Bước 1: Tạo ứng dụng vào thiết lập quyền truy cập internet <uses-permission android:name="android.permission.INTERNET" /> Bước 2: Thiết kế giao diện main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" />xmlns:tools=" />android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.nguyennghia.asynctaskworking.MainActivity"> android:id="@+id/pb_counter" style="?android:attr/progressBarStyleHorizontal" android:indeterminate="false" android:layout_width="match_parent" android:layout_height="wrap_content" /> android:id="@+id/tv_message" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" /> android:layout_gravity="center" android:text="Start"
android:id="@+id/btn_counter" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> Bước 3.1.Tạo lớp kế thừa từ AsyncTask class UpdateProgresBarTask extends AsyncTask<Integer, Integer, Void>{ @Override protected void onPreExecute() { super.onPreExecute(); tvMessage.setText("Update"); } @Override protected Void doInBackground(Integer... params) { int n = params[0]; for(int i = 0; i < n; i++) publishProgress(i); return null; } @Override protected void onProgressUpdate(Integer... values) { Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin