Trường ĐH Khoa Học Tự Nhiên Tp. Hồ Chí Minh
TRUNG TÂM TIN HỌC
2014
Lập trình Android
Bài 1. Khai thác tài nguyên Internet
Ngành Mạng & Thiết bị di động
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 2
1. Kết nối tài nguyên Internet
●
Tài nguyên Internet trên thiết bị di động
●
Các vấn đề về kết nối – Hình thức kết nối
●
Lớp khai báo kết nối
2. Sử dụng dịch vụ DownloadManager
Nội dung
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 3
1.1 Tài nguyên Internet trên thiết bị di động
Ứng dụng trực tuyến trên thiết bị di động được xây dựng nhằm
mục đích hiển thị dữ liệu đầu cuối được xử lý từ các máy chủ cũng
như gửi các yêu cầu về truy xuất dữ liệu .
Khi xây dựng các ứng dụng trực tuyến cần xác định rõ nguồn tài
nguyên được cung cấp:
●
Định dạng tài nguyên (văn bản, hình ảnh…)
●
Giao thức kết nối đến máy chủ (http, https, tcp, rtsp…)
●
Sử dụng công nghệ kết nối không dây (Wifi, Internet Mobile…)
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 4
1.2 Các vấn đề kết nối
Xây dựng ứng dụng thực hiện kết nối Internet trên thiết bị di động
cần đảm bảo các vấn đề sau:
●
Băng thông
●
Lưu Cache
●
Năng lượng
●
Tính năng thiết bị
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 5
1.2 Hình thức kết nối
Các thiết bị di động ở thời điểm hiện tại có thể quy chung về hình
thức kết nối sau:
●
Mobile Internet: một dạng kết nối thông qua hình thức cung cấp dịch vụ băng
thông của nhà mạng, bao gồm một số chuẩn phổ biến sau: GPRS, EDGE,
3G, 4G, LTE…
●
Wifi: kết nối không dây và truyền dữ liệu ra Internet thông các thiết bị mạng
(router, switch…), ngoài ra thiết bị di động Android có khả năng phát tín hiệu
mạng cho các thiết bị khác.
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 6
1.3 Lớp khai báo kết nối
Việc khai báo kết nối tùy thuộc vào chuẩn giao thức kết nối và địa
chỉ URL của máy chủ cần kết nối:
●
URL: lớp giải quyết phân giải tên miền thành địa chỉ IP.
Định dạng: http://username:password@host:8080/directory/file?query#ref:
Phương thức kết nối
openConnection
●
URLConnection: lớp thực hiện kết nối đến URL được chỉ định cho việc đọc
hoặc ghi dữ liệu, hỗ trợ các giao thức:
File: URIs
FTP
HTTP & HTTPS
Jar
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 7
1.3 Lớp khai báo kết nối
URLConnection:
●
Các phương thức quan trọng:
connect()
getContent()
getContentType()
getInputStream()
getOutputStream()
setDoInput – getDoInput
setDoOutput - getDoOutput
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 8
1.3 Lớp khai báo kết nối
URLConnection:
●
Các lớp giao thức HTTP & HTTPS:
HttpURLConnection
HttpsURLConnection
Các phương thức quan trọng:
disconnect()
getContentEncoding()
getResponseCode()
getResponseMessage()
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 9
1.3 Lớp khai báo kết nối
Thực hiện kết nối Internet (HTTP):
●
Bao gồm các bước sau:
Thực hiện mở kết nối đến địa chỉ URL được chỉ định ->
HttpURLConnection.
Thực hiện khai báo các header, content-type, cookies…
Gọi phương thức setDoOutput(true) thực hiện xây dựng phần dữ liệu cần
gửi lên máy chủ, dữ liệu được thiết lập được trả thông qua phương thức
getOutputStream(). (Optional).
Thực hiện truy xuất dữ liệu thông qua phương thức getInputStream(), để
lấy các thông tin về nội dung được trả, độ dài, thời gian…
Gọi phương thức disconnect() để đóng các kết nối khi kết thúc phiên làm
việc và giải phóng tài nguyên.
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 10
1.3 Lớp khai báo kết nối
Thực hiện kết nối Internet:
●
Một số lưu ý khi thực hiện:
Cần thực hiện xin cấp quyền truy cập Internet cho ứng dụng trong tập tin
AndroidManifest.
<uses-permission android:name="android.permission.INTERNET" />
Trong một vài trường hợp cần xin cấp quyền kiểm soát trạng thái Internet
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
Không được thực hiện kết nối Internet trực tiếp trên tiến trình chính của
ứng dụng. Sử dụng AsyncTask hoặc Thread để thay thế.
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 11
1.3 Lớp khai báo kết nối
Thực hiện kết nối Internet (HTTP):
●
Ví dụ:
URL url = new URL(“”);
URLConnection urlConnection = url.openConnection();
HttpURLConnection httpURLConnection =
(HttpURLConnection) urlConnection;
int responseCode = httpURLConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = httpURLConnection
.getInputStream();
// Xử lý đọc dữ liệu từ InputStream
}
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 12
1.3 Lớp khai báo kết nối
Thực hiện kết nối Internet (HTTPS):
●
Bao gồm các bước sau:
Khai báo KeyStore dùng để chứng thực.
Chứng thực KeyStore thông qua X509TrustManager hoặc
SSLSocketFactory.
Thực hiện mở kết nối đến địa chỉ URL được chỉ định ->
HttpsURLConnection.
Thực hiện gắn SSLContext cho việc chứng thực.
Gọi phương thức setDoOutput(true) thực hiện xây dựng phần dữ liệu cần
gửi lên máy chủ, dữ liệu được thiết lập được trả thông qua phương thức
getOutputStream(). (Optional).
Thực hiện truy xuất dữ liệu thông qua phương thức getInputStream(), để
lấy các thông tin về nội dung được trả, độ dài, thời gian…
Gọi phương thức disconnect() để đóng các kết nối khi kết thúc phiên làm
việc và giải phóng tài nguyên.
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 13
1.3 Lớp khai báo kết nối
Thực hiện kết nối Internet (HTTPS):
●
Ví dụ:
KeyStore keyStore = ;
String algorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm);
tmf.init(keyStore);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
URL url = new URL(" />HttpsURLConnection urlConnection = (HttpsURLConnection)
url.openConnection();
urlConnection.setSSLSocketFactory(context.getSocketFactory());
InputStream in = urlConnection.getInputStream();
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 14
1. Kết nối tài nguyên Internet
2. Sử dụng dịch vụ DownloadManager
●
Giới thiệu
●
Khai báo và sử dụng
●
Tuỳ chỉnh thông báo và nơi lưu trữ
●
Truy vấn nội dung tải
Nội dung
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 15
2.1 Giới thiệu
DownloadManager:
●
Download Manager là trình quản lý các tác vụ tải trên thiết bị Android được
Google tích hợp từ phiên bản Android 2.3 (API 9).
●
Download Manager được thiết kế hoạt động như một dịch vụ chạy ngầm, cho
phép quản lý và giám sát sự thay đổi của các kết nối.
●
Sử dụng:
Được sử dụng trong các trường hợp cần thực hiển tải một nội dung
trong một thời gian dài ở chế độ ngầm giữa các phiên tương tác của
người dùng
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 16
2.2 Khai báo và sử dụng
DownloadManager:
●
Việc truy xuất dịch vụ được thông qua Context của ứng dụng gọi thực thi:
DownloadManager manager = (DownloadManager)
getSystemService(DOWNLOAD_SERVICE);
●
Để khởi tạo yêu cầu tải một nội dung, tiến hành tạo đối tượng Request.
Ví dụ:
Uri uri = Uri.parse
(" />Request request = new Request(uri);
long id_reference = manager.enqueue(request);
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 17
2.2 Khai báo và sử dụng
DownloadManager:
●
Một số phương thức quan trọng:
getMaxBytesOverMobile
getRecommendedMaxBytesOverMobile (Android 3.0)
enqueue
remove
getMineTypeForDownloadedFile
getUriForDownloadedFile
openDownloadedFile
query
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 18
2.2 Khai báo và sử dụng
DownloadManager:
●
Nhận biết các trạng thái các yêu cầu tải: cần xây dựng bộ BroadcastReceiver
cho phép bắt lại Intent từ dịch vụ.
●
Các trạng thái của yêu cầu tải:
STATUS_FAILED
STATUS_PAUSED
PAUSED_QUEUE_FOR_WIFI
PAUSED_UNKNOWN
PAUSED_WAITING_FOR_NETWORK
PAUSED_WAITING_TO_RETRY
STATUS_PENDING
STATUS_RUNNING
STATUS_SUCCESSFUL
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 19
2.2 Khai báo và sử dụng
DownloadManager:
●
Các hành động tương tác dịch vụ:
ACTION_DOWNLOAD_COMPLETE
ACTION_NOTIFICATION_CLICKED
ACTION_VIEW_DOWNLOADS
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 20
2.2 Khai báo và sử dụng
DownloadManager:
●
Ví dụ kiểm tra khi thực hiện tải thành công từ dịch vụ:
IntentFilter filter = new IntentFilter
(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long id_reference = intent.getLongExtra
(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
Log.d("HTSI", "File's id: " + id_reference);
} };
registerReceiver(receiver, filter);
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 21
2.3 Tuỳ chỉnh thông báo và nơi lưu trữ
DownloadManager:
●
Tuỳ chỉnh thông báo: mặc định trên thanh trạng thái (Status Bar) của thiết bị
sẽ xuất hiện một hộp thoại thông báo hoạt động hiện tại, hiển thị các thông tin
như: tên tập tin được tải, ngày giờ tải, dung lượng đã tải…
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 22
2.3 Tuỳ chỉnh thông báo và nơi lưu trữ
DownloadManager:
●
Tuỳ chỉnh thông báo: được thông qua đối tượng Request
setTitle
setVisibleInDownloadUi
setNotificationVisibility
VISIBILITY_HIDDEN
<uses-permission
android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
"/>
VISIBILITY_VISIBLE
VISIBILITY_VISIBLE_NOTIFY_COMPLETED
VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETED
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 23
2.3 Tuỳ chỉnh thông báo và nơi lưu trữ
DownloadManager:
●
Mặc định các nội dung tải được hệ thống lưu trữ trong Content Providers của
ứng dụng Download:
data/user/0/com.android.providers.downloads/cache/<Tên tập tin>
●
Các tập tin trong thư mục này sẽ không thể truy xuất bằng đường dẫn của tập
tin, chỉ có thể truy xuất thông qua Uri của tập tin.
●
Tuỳ chỉnh nơi lưu trữ: được thông qua đối tượng Request.
setDestinationUri
setDestinationInExternalPublicDir
setDestinationInExternalFilesDir
/storage/emulated/0/Android/data/<pakage-name>/files/
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 24
2.4 Truy vấn nội dung tải
DownloadManager:
●
Các cột dữ liệu quan trọng trong bảng dữ liệu Download.
COLUMN_ID
COLUMN_LOCAL_FILENAME
COLUMN_LOCAL_URI
COLUMN_MEDIA_TYPE
COLUMN_REASON
COLUMN_STATUS
COLUMN_BYTES_DOWNLOADED_SO_FAR
COLUMN_TOTAL_SIZE_BYTES
Lập trình Android (2014) – Bài 1. Khai thác tài nguyên Internet 25
2.4 Truy vấn nội dung tải
DownloadManager:
●
Việc truy vấn thông qua đối tượng Query, dữ liệu trả về là đối tượng Cursor.
●
Ví dụ:
Query query = new Query();
query.setFilterById(id_reference);
Cursor cursor = manager.query(query);
if (cursor.moveToFirst()) {
String path = cursor.getString(cursor.getColumnIndex
(DownloadManager.COLUMN_LOCAL_FILENAME));
if (path != null)
imageView.setImageURI(Uri.parse(path));
}