Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin Trang 2 Bài 5 Một số dịch vụ trên google .... Các bước chính trong triển kh
Trang 1TRƯỜ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: CHUYÊN ĐỀ 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
Trang 2MỤ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
Trang 3Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin Trang 2
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
Trang 48.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
Trang 5Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin Trang 4
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
Trang 616.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 toà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
Trang 7Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin Trang 2
DACH MỤC TỪ VIẾT TẮT
Protocol
Trang 8DANH 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
Trang 10Bà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ủ: http://square.github.io/retrofit/
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
Trang 11Bài tập thực hành CĐ3: Lập trình dịch vụ mạng trên Android
Bộ môn Công nghệ Phân mềm khoa Công nghệ Thông tin Trang 2
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: http://square.github.io/dagger/
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 hoà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: https://github.com/square/leakcanary
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: https://github.com/zxing/zxing
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à toà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 ngoài JVM như C# và PHP Libphonenumber được phát triển và điều hành bởi
https://github.com/googlei18n/libphonenumber
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ẽ
Trang 12tự độ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: https://github.com/square/tape
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: http://jitpack.io/ 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