LỜI CẢM ƠN Sau một thời gian nghiên cứu và thực hiện đề tài “Xây dựng hệ thống liên lạc điện tử giữa nhà trường và gia đình trên các thiết bị sử dụng hệ điều hành Android” đã cơ bản hoàn thành. Để đạt được kết quả này, em đã nỗ lực hết sức đồng thời cũng nhận được sự giúp đỡ chỉ bảo tận tình của các thầy cô. Trước hết em xin gửi lời cảm ơn chân thành tới Bộ môn Mạng và Truyền Thông, Khoa Công Nghệ Thông Tin, Trường đại học Công Nghệ Thông Tin và Truyền Thông và các thầy cô, đặc biệt là thầy giáo hướng dẫn Th.s: Đỗ Văn Toàn đã tận tình giúp đỡ, hướng dẫn em hoàn thành đồ án tốt nghiệp. Em cũng xin gửi lời cảm ơn tới các anh chị, các bạn trong cộng đồng Android Việt Nam đã đóng góp ý kiến, giúp đỡ em trong quá trình thực hiện đề tại. Đề tài đã hoàn thành với một kết quả nhất định, tuy nhiên vẫn không thể tránh khỏi sai sót. Kính mong sự thông cảm và đóng góp ý kiến từ các thầy cô và các bạn. Em xin chân thành cảm ơn!
Thái Nguyên, tháng 6 năm 2012 Sinh viên thực hiện
Triệu Anh Tú
1
LỜI CAM ĐOAN Tôi cam đoan toàn bộ nội dung đồ án là do tôi nghiên cứu. Những kết quả, các số liệu và chương trình trong bài báo cáo mà tôi thực hiện đồ án “Xây dựng hệ thống liên lạc điện tử giữa nhà trường và gia đình trên các thiết bị sử dụng hệ điều hành Android”, không sao chép bất kỳ nguồn nào khác. Tôi hoàn toàn chịu
trách nhiệm trước nhà trường về sự cam đoan này. Thái Nguyên, tháng 6 năm 2012 Người cam đoan
Triệu Anh Tú
2
MỤC LỤC LỜI CẢM ƠN..........................................................................................................1 LỜI CAM ĐOAN....................................................................................................2 MỤC LỤC................................................................................................................3 MỤC LỤC HÌNH ẢNH...........................................................................................5 MỤC LỤC BẢNG...................................................................................................7 LỜI NÓI ĐẦU.........................................................................................................8 CHƯƠNG 1: CƠ SỞ LÝ THUYẾT......................................................................10 1.1. Tìm hiểu về hệ điều hành Android...........................................................10 1.1.1. Android là gì?......................................................................................10 1.1.2. Tính năng mở của hệ điều hành Android...........................................10 1.1.3. Các ứng dụng có thể tạo ra cho Android............................................10 1.1.4. Kiến trúc Android...............................................................................11 1.1.5. Ứng dụng Android..............................................................................15 1.1.6. Giao diện người dùng trong Android.................................................20 1.2. Giới thiệu các tool hỗ trợ..........................................................................25 1.2.1. Khái niệm về Web Service.................................................................25 1.2.2. Giới thiệu về mã JSON.......................................................................26 CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG....................................27 2.1. Lý do chọn đề tài.......................................................................................27 2.2. Đặc tả chương trình...................................................................................27
2.2.1. Giới thiệu.............................................................................................27 2.2.2. Các chức năng chính...........................................................................28 2.3 Tìm hiểu Web Service................................................................................29 2.3.1. Đặc điểm của Web Service.................................................................29 2.3.2. Ưu điểm và nhược điểm của Web Service.........................................29 2.3.3 Kiến trúc Web Service.........................................................................31 2.3.4. Hoạt động của Web Service................................................................32 2.3.5. Các thành phần chính của Web Service.............................................34 3
2.3.6. Sơ lược về mã JSON...........................................................................40 2.4. Phân tích và thiết kế hệ thống...................................................................44 2.4.1. Mô tả bài toán......................................................................................44 2.4.2. Giá trị sử dụng.....................................................................................44 2.34.3. Đặc tả sử dụng...................................................................................44 2.4.4. Cấu trúc Use case................................................................................46 2.4.5. Biểu đồ trình tự...................................................................................50 2.5. Phân tích và thiết kế cơ sở dữ liệu............................................................52 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG.............................57 3.1. Cài đặt ứng dụng.......................................................................................57 3.2. Giao diện chính.........................................................................................59 3.3. Các chức năng chính của ứng dụng..........................................................60 3.3.1. Đăng nhập...........................................................................................60 3.3.2. Lên lịch hoạt động...............................................................................65 3.3.3. Nhận xét hoạt động.............................................................................67 3.3.4. Gửi và nhận thông báo........................................................................68 KẾT LUẬN............................................................................................................71 TÀI LIỆU THAM KHẢO.....................................................................................72
4
MỤC LỤC HÌNH ẢNH Hình 1.1. Các thành phần chính của hệ điều hành Android..................................11 Hình 1.2. Vòng đời của một ứng dụng..................................................................15 ................................................................................................................................17 Hình 1.3. Vòng đời của Activity............................................................................17 Hình 1.4. Một số phương thức của Activity..........................................................20 Hình 1.5. Biểu đồ phân cấp của View và ViewGroup..........................................21 Hình 2.1. Các thành phần của Web Service..........................................................31 Hình 2.2. Kiến trúc của Web Service....................................................................32 Hình 2.3. Hoạt động của Web Service..................................................................32 Hình 2.4. Một Client truy xuất đến nhiều Web Service cùng lúc.........................34 Hình 2.5. Một Web Service có thể triệu tập đến các Web Service khác..............34 Hình 2.6. Web service Endpoint............................................................................39 Hình 2.7. Biểu đồ Use-case...................................................................................46 Hình 2.8. Hoạt động của hệ thống.........................................................................49 Hình 2.9. Biểu đồ trạng thái chức năng đăng nhập...............................................50 Hình 2.10. Biểu đồtuần tự đăng nhập hệ thống.....................................................50 Hình 2.11. Biểu đồ tuần tự hoạt động chức năng lên lịch.....................................51 Hình 2.12. Tuần tự hoạt động chức năng nhận xét và thông báo.........................52 Hình 2.13. Mô hình cơ sơ dữ liệu..........................................................................56 Hình 3.1. File DTAN.apk dùng cài đặt ứng dụng trên thiết bị thật.....................57 Hình 3.2. Yêu cầu xác nhận cài đặt......................................................................58 Hình 3.3. Quá trình cài đặt ứng dụng....................................................................59 Hình 3.4. Màn hính chính của ứng dụng...............................................................60 Hình 3.5. Thông báo đăng nhập thành công..........................................................61 Hình 3.6. Đăng nhập thất bại.................................................................................62 Hình 3.7. Yêu cầu lựa chọn giáo viên hoặc phụ huynh........................................63
Hình 3.8. Màn hình sau khi đăng nhập của giáo viên...........................................64 Hình 3.9. Màn hình sau khi đăng nhập của phụ huynh.........................................65 5
Hình 3.10. Lên lịch hoạt động...............................................................................66 Hình 3.11. Giáo viên có thể xóa hoặc chỉnh sửa nội dung hoạt động..................67 Hình 3.12. Nhận xét hoạt động..............................................................................68 Hình 3.13. Gửi thông báo......................................................................................69 ................................................................................................................................70 Hình 3.14. Nhận được thông báo...........................................................................70
LỜI NÓI ĐẦU Mạng điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990 và theo thời gian số lượng các thuê bao cũng như các nhà cung cấp dịch vụ đi động tại Việt Nam ngày càng tăng. Do nhu cầu trao đổi thông tin ngày càng tăng và nhu cầu sử dụng sản phẩm công nghệ cao nhiều tính năng, cấu hình cao, chất
lượng tốt, kiểu dáng mẫu mà đẹp, phong phú nên nhà cung cấp phải luôn luôn cải thiện, nâng cao những sản phẩm của mình. Do đó việc xây dựng các ứng dụng cho điện thoại di động đang là một ngành công nghiệp mới đầy tiềm năng và hứa hẹn nhiều sự phát triển vượt bậc của ngành khoa học kĩ thuật. Cùng với sự phát triển của thị trường điện thoại di động là sự phát triển mạnh mẽ của xu hướng lập trình phần mềm ứng dụng cho các thiết bị di động. Phần mềm, ứng dụng cho điện thoại di động hiện nay rất đa dạng và phong phú trên các hệ điều hành di động cũng phát triển mạnh mẽ và đang thay đổi từng ngày. Các hệ điều hành J2ME, Android, IOS, Hybrid, Web based Mobile Application đã có rất phát triển trên thị trường truyền thông di động, nhưng đáng kể nhất chính là hệ điều hành Android ra đời với sự kế thừa những ưu việt của các hệ điều hành ra đời trước và sự kết hợp của nhiều công nghệ tiên tiến nhất hiện nay, Android đã được phát triển bởi nhà phát triển công nghệ rất nổi tiếng hiện nay là Google. Android đã nhanh chóng là đối thủ cạnh tranh mạnh mẽ với các hệ điều hành trước đó và đang là hệ điều hành di động của tương lai và được nhiều người ưa chuộng nhất. Mục tiêu của đề tài “Xây dựng hệ thống liên lạc điện tử giữa nhà trường và gia đình trên các thiết bị sử dụng hệ điều hành Android” là nghiên cứu công nghệ lập trình mới hiện nay, nghiên cứu về ngôn ngữ lập trình, môi trường làm việc, cách hoạt động và lập trình chương trình ứng dụng cho điện thoại di động. Để thực hiện điều đó em đã nghiên cứu về ngôn ngữ lập trình trên hệ điều hành Android và em mong muốn sẽ xây dựng được một ứng dụng di động phục vụ cho nhà trường và gia đình trao đổi thông tin thường xuyên của con em mình trong quá trình học tập. 8
Những nội dung đề tài của em bao gồm 3 chương: Chương 1: Cơ sở lý thuyết. Chương 2: Phân tích và thiết kế hệ thống.
Chương 3: Xây dựng chương trình ứng dụng. Do kiến thức, khả năng còn hạn chế và thời gian tìm hiểu ngắn nên trong bài báo cáo của em còn nhiều thiếu sót, em mong nhận được sự góp ý của các thầy cô và các bạn để đề tài của em được đầy đủ và phong phú hơn. Em xin chân thành cảm ơn!
9
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1. Tìm hiểu về hệ điều hành Android 1.1.1. Android là gì? Android là một hệ thống điều hành, middleware và các ứng dụng di động chủ chốt. Các Android Software Development Kit (SDK) bây giờ đã có. Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên một số đầu phát HD, HD player, TV) phát triển bơi Google và dựa trên nền tảng Linux. Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Sự ra mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm mục đích tạo nên một chuẩn mở cho điện thoại di động trong tương lai. 1.1.2. Tính năng mở của hệ điều hành Android Android được xây dựng để cho phép các nhà phát triển để tạo ra các ứng dụng di động hấp dẫn tận dụng tất cả một chiếc điện thoại đã cung cấp. Nó được xây dựng để được thực sự mở; ví dụ một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại như thực hiện cuộc gọi, gửi tin nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển để tạo ra phong phú hơn và nhiều hơn nữa những kinh nghiệm cố kết cho mọi người. Androi được xây dựng trên Linux Kernel. Hơn nữa, nó sử dụng một máy ảo tùy chỉnh được thiết kế để tối ưu hóa bộ nhớ và tài nguyên phần cứng trong một môi trường di động.
Android là mã nguồn mở, nó có thể được liberally mở rộng. Nền tảng này sẽ tiếp tục tiến triển như cộng đồng nhà phát triển công việc cùng nhau để xây dựng các ứng dụng di động sáng tạo. 1.1.3. Các ứng dụng có thể tạo ra cho Android Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng của bên thứ 3. Với các thiết bị xây dựng trên hệ điều hành Android, người dùng có thể hoàn toàn thích ứng với điện thoại đến lợi ích của họ. Họ có thể trao đổi trên màn hình của điện thoại, những phong cách của dialer, hoặc bất kỳ ứng 10
dụng. Họ thậm chí có thể hướng dẫn điện thoại của họ để sử dụng hình ảnh ưa thích của họ xem các ứng dụng để xử lý xem tất cả các hình ảnh. 1.1.4. Kiến trúc Android Sơ đồ dưới đây cho thấy các thành phần chính của hệ điều hành Android. Mỗi một phần được mô tả chi tiết hơn dưới đây:
Hình 1.1. Các thành phần chính của hệ điều hành Android • Application Đây là lớp ứng dụng giao tiếp với người dùng, bao gồm các ứng dụng như: - Các ứng dụng cơ bản, được cài đặt đi liền với hệ điều hành là gọi điện (phone), quản lý danh bạ (Contacts), duyệt web (Browser), nhắn tin (SMS), lịch làm việc (Calendar), đọc e-mail (Email-Client), bản đồ (Map), quay phim chụp ảnh (camera)... - Các ứng dụng được cài thêm như các phần mềm chứng khoán (Stock), các trò chơi (Game), từ điển... Các chương trình có các đặc điểm là: - Viết bằng Java, phần mở rộng là apk.
11
- Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine được dựng lên để phục vụ cho nó. Nó có thể là một Active Program: Chương trình có giao diện với người sử dụng hoặc là một background: chương trình chạy nền hay là dịch vụ. - Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng một thời điểm, có thể có nhiều chương trình cùng chạy một lúc, tuy nhiên, với mỗi ứng dụng thì có duy nhất một thực thể (instance) được phép chạy mà thôi. Điều đó có tác dụng hạn chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn. - Các ứng dụng được gán số ID của người sử dụng nhằn phân định quyền hạn khi sử dụng tài nguyên, cấu hình phần cứng và hệ thống. - Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành di động khác, Android cho phép một ứng dụng của bên thứ ba được phép chạy nền. Các ứng dụng đó chỉ có một hạn chế nhỏ đó là nó không được phép sử dụng quá 5~10% công suất CPU, điều đó nhằm để tránh độc quyền trong việc sử dụng CPU. - Ứng dụng không có điểm vào cố định, không có phương thức main để bắt đầu. • Application Framework Tầng này xây dựng bộ công cụ, các phần tử ở mức cao để các lập trình viên có thể nhanh chóng xây dựng ứng dụng. Nó được viết bằng Java, có khả năng sử dụng chung để tiết kiệm tài nguyên. Giới thiệu một số thành phần của phần này: Activity Manager: Quản lý các chu kỳ sống của một ứng dụng cũng như cung cấp công cụ điều khiển các Activity. Telephony Manager: Cung cấp công cụ để thực hiện việc liên lạc như gọi điện thoại. XMPP Service: Cung cấp công cụ để liên lạc trong thời gian thực. Location Manager: Cho phép xác định vị trí của điện thoại thoại dựa vào
hệ thống định vị toàn cầu GPS và Google Maps.
12
Window Manager: Quản lý việc xây dựng và hiển thị các giao diện người dùng cũng như tổ chức quản lý các giao diện giữa các ứng dụng. Notication Manager: Quản lý việc hiển thị các thông báo (như báo có tin nhắn, có e-mail mới…). Resource Manager: Quản lý tài nguyên tĩnh của các ứng dụng bao gồm các file hình ảnh, âm thanh, layout, string (Những thành phần không được viết bởi ngôn ngữ lập trình). • Libraries Android bao gồm một bộ thư viện C/C++, được sử dụng bởi các thành phần khác nhau của hệ thống Android. Những khả năng tiếp xúc với các nhà phát triển thông qua các khuôn khổ ứng dụng Android. Một số các thư viện lõi được liệt kê dưới đây: System C library: một BSD-có nguồn gốc thực hiện các hệ thống thư viện chuẩn C (LIBC), điều chỉnh cho nhúng dựa trên Linux các thiết bị. Media Libraries: dựa trên OpenCORE PacketVideo's, sự hỗ trợ các thư viện phát lại và ghi âm của âm thanh và phổ biến nhiều định dạng video, cũng như các tập tin hình ảnh tĩnh, bao gồm MPEG4, H.264, MP3, AAC, AMR, JPG, và PNG. Surface Manager: Quản lý truy cập đến các hệ thống con hiển thị cũng như các lớp đồ họa 2D, 3D từ tầng ứng dụng. LibWebCore: Thư viện được dùng để tạo nên thành phần webview trong Android và có thể nhúng được vào nhiều ứng dụng. SGL: Thư viện hỗ trợ đồ hoạ 2D. 3D libraries: Thư viện đồ họa 3D. SQLite: Một cơ sở dữ liệu nhỏ được dùng cho các thiết bị cầm tay có bộ
nhớ hạn chế. SQLite không có quan hệ như các cơ sở dữ liệu khác. • Android Runtime Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp hầu hết các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java. Tất cả các ứng dụng Android đều chạy trong tiến trình riêng. Máy ảo Dalvik đã được viết để 13
cho một thiết bị có thể chạy nhiều máy ảo hiệu quả. Các VM Dalvik thực thi các tập tin thực thi Dalvik (dex). Định dạng được tối ưu hóa cho bộ nhớ tối thiểu. VM là dựa trên register-based, và chạy các lớp đã được biên dịch bởi một trình biên dịch Java để chuyển đổi thành các định dạng dex. Các VM Dalvik dựa vào nhân Linux cho các chức năng cơ bản như luồng và quản lý bộ nhớ thấp. • Linux Kernel Hệ điều hành Android được phát trển dựa trên hạt nhân linux, cụ thể là hạt nhân linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng này. Tất cả mọi hoạt động của điện thoại muốn thi hành được thì đều được thực hiện ở mức cấp thấp ở lớp này bao gồm quản lý bộ nhớ (memory management), giao tiếp với phần cứng (driver model), thực hiện bảo mật (security), quản lý tiến trình (process). Tầng này có các thành phần chủ yếu: Display Driver: Điều khiển việc hiển thị lên màn hình cũng như thu nhận những điều khiển của người dùng lên màn hình (di chuyển, cảm ứng...). Camera Driver: Điều kiển hoạt động của camera, nhận luồng dữ liệu từ camera trả về. Bluetooth Driver: Điều khiển thiết bị phát và thu sóng Bluetooth. USB driver: Quản lý hoạt động của các cổng giao tiếp USB. Keypad driver: Điều khiển bàn phím. Wifi Driver: Chịu trách nhiệm về việc thu phát sóng wifi. Audio Driver: Điều khiển các bộ thu phát âm thanh, giải mã các tính hiệu
dạng audio thành tín hiệu số và ngược lại. Binder IPC Driver: Chịu trách nhiệm về việc kết nối và liên lạc với mạng vô tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo những chức năng truyền thông được thực hiện. M-System Driver: Quản lý việc đọc ghi lên các thiết bị nhớ như thẻ SD, flash. Power Madagement: Giám sát việc tiêu thụ điện năng.
14
1.1.5. Ứng dụng Android a) Vòng đời của một ứng dụng Android Android có cơ chế quản lý các process theo chế độ ưu tiên. Các process có độ ưu tiên (priority) thấp sẽ bị Android giải phóng mà không hề cảnh báo nhằm đảm bảo tài nguyên. Foreground process: Là process của ứng dụng hiện thời đang được người dùng tương tác. Visible process: Là process của ứng dụng mà activity đang hiển thị đối với người dùng (onPaused() của activity được gọi). Service process: Là Service đang running. Background process: Là process của ứng dụng mà các activity của nó không hiển thị với người dùng (onStoped() của activity được gọi). Empty process: process không có bất cứ một thành phần nào active. Theo chế độ ưu tiên thì khi cần tài nguyên, Android sẽ tự động kill process, trước tiên là các empty process.
Hình 1.2. Vòng đời của một ứng dụng 15
b) Các khái niệm trong ứng dụng Android. Một ứng dụng Android được xây dựng nên từ nhiều thành phần (component), để có thể tiếp cận với Android bạn cần hiểu được các component này. Các component để xây dựng nên một ứng dụng Android được chia thành 4 component chính: Activity, Service, Content Provider, Broadcast Receiver cùng với 2 component khác là: Intent và Notification. Activity: Được dùng để hiển thị một màn hình trong ứng dụng cho phép người dùng tương tác với ứng dụng. Khi khởi động một ứng dụng Android nào đó thì bao giờ cũng có một mainActivity được gọi, hiển thị màn hình giao diện của ứng dụng cho phép người dùng tương tác để làm một hành động nào đó, chẳng hạn như quay số điện thoại, chụp anh, xem một bản đồ. Mỗi activity được cho một cửa sổ, trong đó cho vẽ giao diện người dùng của nó. Một ứng dụng bao gồm nhiều activity, thông thường trong một ứng dụng sẽ có những activity được quy định như các activity “chính”, tức là hiển thị cho người dùng khi ứng dụng khởi chạy. Mỗi activity sau đó có thể gọi activity khác để thực hiện hành động khác nhau. Mỗi một activity mới bắt đầu, các activity trước đó được dừng lại, Android quản lý activity theo cơ chế stack. - Các trạng thái (state) của Activity: Active (running): Activity đang hiển thị trên màn hình (foregound). Paused: Activity vẫn hiển thị nhưng không thể tương tác. Stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop. Killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu tiên. Các Activity ở trạng thái Stop hoặc Pause cũng có thể bị giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó.
16
- Vòng đời của Activity:
Hình 1.3. Vòng đời của Activity Entire lifetime: từ phương thức onCreate() cho tới onDestroy(). Visible lifetime: từ phương thức onStart() cho tới onStop(). Foreground lifetime: từ phương thức onResume() cho tới onPause(). Khi xây dựng Activity cho ứng dụng cần phải viết lại (override) phương thức onCreate() để thực hiện quá trình khởi tạo. Còn các phương thức khác có cần viết lại hay không tùy thuộc vào yêu cầu lập trình của ứng dụng. Service: Service là một ứng dụng component có thể thực hiện các hoạt động longrunning trong background và không cung cấp một giao diện người dùng. Một ứng dụng component có thể bắt đầu một service và nó sẽ tiếp tục chạy trong background thậm chí nếu người dùng chuyển cho ứng dụng khác. Ngoài ra, một
17
dịch vụ có thể xử lý các giao dịch mạng, nghe nhạc, thực hiện các tập tin I/O, hoặc tương tác với một provider content, tất cả từ background. Một service cơ bản có thể có hai hình thức: - Started: service là “started” khi một component ứng dụng (như một activity) bắt đầu bằng cách gọi startService(). Khi bắt đầu, một service có thể chạy trên background vô thời hạn, ngay cả khi các thành phần đó bắt đầu bị phá hủy. Thông thường, một service bắt đầu thực hiện một hoạt động đơn lẻ và không trả lại kết quả cho người gọi. - Bound: service là “buond” khi một component ứng dụng liên kết cho nó bằng cách gọi bindService(). Một service ràng buộc cung cấp một giao diện client-server cho phép các component tương tác với các dịch vụ, gửi và các yêu
cầu, có được kết quả, và thậm chí làm như vậy qua quá trình giao tiếp InterProcess(IPC). Một service buond chỉ chạy miễn là ứng dụng component khác bị ràng buộc vào nó. Nhiều thành phần có thể liên kết cho dịch vu cùng một lúc, nhưng khi tất cả chúng unbind, service này bị phá hủy. Tìm hiểu về Activity trong Android Activity là một thành phần ứng dụng đó cung cấp một màn hình mà người dùng có thể tương tác để làm một cái gì đó, chẳng hạn như quay số điện thoại, chụp ảnh, gửi email, hoặc xem một bản đồ. Mỗi activity được cho một cửa sổ, trong đó cho vẽ giao diện người dùng của nó. Cửa sổ thường lấp đầy màn hình, nhưng có thể nhỏ hơn so với màn hình và nổi lên trên các cửa sổ khác. Một ứng dụng thường bao gồm nhiều activity được ràng buộc lỏng lẻo với nhau. Thông thường, một trong những activity trong một ứng dụng được quy định như các activity "chính", được trình bày cho người dùng khi tung ra ứng dụng cho lần đầu tiên. Mỗi activity sau đó có thể bắt đầu activity khác để thực hiện hành động khác nhau. Mỗi lần một activity mới bắt đầu, các activity trước đó được dừng lại, nhưng hệ thống các khu bảo vệ các activity trong một ngăn xếp (các "back stack"). Khi một activity mới bắt đầu, nó được đẩy lên phía sau ngăn xếp và việc chú trọng của người dùng. Sự trở lại ngăn xếp tuân thủ các cơ bản "last in, first out" cơ chế hàng đợi, do đó, khi người dùng được thực thi với các
18
activity hiện tại và nhấn phím BACK, nó là popped khỏi đống (và phá hủy) các hồ sơ activity trước đó. (Sự trở lại ngăn xếp được thảo luận nhiều hơn trong công việc và sắp xếp lại tài liệu). Để tạo ra một activity, bạn phải tạo một sub class của Activity. Trong sub class của bạn, bạn cần cho thực thi method gọi hệ thống các cuộc gọi khi chuyển đổi activity giữa các state khác nhau cho vòng đời của nó, chẳng hạn như khi activity đang được tạo ra, dừng lại, nối lại, hoặc bị phá hủy. Hai phương pháp gọi
lại quan trọng nhất là: Create Activity Bạn phải triển khai method này. Hệ thống các cuộc gọi này khi tạo activity của bạn. Trong thời hạn triển khai thực hiện của bạn, bạn nên khởi tạo các thành phần thiết yếu của activity của bạn. Quan trọng nhất, đây là nơi bạn phải gọi setContentView() để xác định việc layout cho giao diện người dùng của activity. Start Activity Khi làm việc trong ứng dụng của riêng bạn, bạn thường sẽ cần cho đơn giản là khởi động một activity được biết đến. Bạn có thể làm như vậy bằng cách tạo ra một intent đó rõ ràng xác định activity bạn muốn bắt đầu, sử dụng tên lớp. Ví dụ, đây là cách một activity bắt đầu activity khác có tên SignInActivity: Intent intent = new Intent(this, SignInActivity.class); startActivity(intent); Đóng một Activity Bạn có thể đóng một activity bằng cách gọi methos finish() của nó. Bạn cũng có thể đóng cửa một activity riêng biệt trước đó bạn đã bắt đầu bằng cách gọi finishActivity().Ngoài ra trong Activity còn nhiều method khác.
19
Hình 1.4. Một số phương thức của Activity Quản lý vòng đời Activity Quản lý vòng đời Activity của bạn bằng cách thực hiện gọi method là rất quan trọng cho phát triển một ứng dụng mạnh mẽ và linh hoạt. Vòng đời của một activity trực tiếp bị ảnh hưởng bởi kết hợp nhiệm vụ của nó và back stack với các activity khác. Một hoạt động có thể tồn tại trong ba trạng thái cơ bản: Resumed, Paused và Stopped. Một activity bị tạm dừng hoặc dừng lại, hệ thống có thể drop nó từ bộ nhớ
hoặc là bằng cách yêu cầu cho nó kết thúc (gọi method finish() của nó), hoặc đơn giản là giết chết quá trình của nó. Khi hoạt động này được mở lại (sau khi được finished hoặc chết), nó phải được tạo ra như trên. 1.1.6. Giao diện người dùng trong Android Trong một ứng dụng Android, giao diện người dùng được xây dựng bằng cách sử dụng View và ViewGroup đối tượng. Có nhiều loại quan điểm và các 20
nhóm view, mỗi một trong số đó là hậu duệ của lớp View. View objects là các đơn vị cơ bản của biểu hiện giao diện người dùng trên nền tảng Android. Các class xem như là cơ sở phục vụ cho class con được gọi là “widget”, trong đó cung cấp đầy đủ các đối tượng thực hiện giao diện, giống như các lĩnh vực văn bản và nút. Class ViewGroup phục vụ như là cơ sở cho lớp con được gọi là “layouts”, cung cấp các loại khác nhau của kiến trúc bố trí, như linear, tabular và relative. - Một View object là một cấu trúc dữ liệu có đặc tính lưu trữ các thông số bố trí và nội dung cho một khu vực cụ thể hình chữ nhật của màn hình. - Một View object xử lý đo lường riêng của mình, bố trí, bản vẽ thay đổi tập trung, di chuyển, và phím/tương tác cử chỉ cho khu vực hình chữ nhật của màn hình. Là một object trong giao diện người dùng, view cũng là một điểm tương tác cho người sử dụng và nhận các sự kiện tương tác. a) Xem Hierarchy Trên nền tảng Android, bạn xác định một hoạt động của giao diện người dùng bằng cách sử dụng một hệ thống phân cấp của View và ViewGroup, như trong biểu đồ dưới đây:
Hình 1.5. Biểu đồ phân cấp của View và ViewGroup
21
Cây này có thể được phân cấp đơn giản hay phức tạp như bạn cần nó được, và bạn có thể xây dựng nó lên bằng cách sử dụng thiết lập Android của widgets và layouts định sẵn, hoặc với Views tùy chỉnh mà bạn tạo ra cho mình. Để đính kèm với cây phân cấp xem màn hình cho rendering, hoạt động của bạn phải gọi setContentView() phương pháp và thông qua một tham chiếu đến đối tượng button gốc. Hệ thống Android nhận được tập tin này và sử dụng nó để làm mất hiệu lực, đo lường và vẽ cây. Nút gốc của các yêu cầu phân cấp cho nó vẽ các nút con - lần lượt, mỗi nút view là nhóm chịu trách nhiệm kêu gọi mỗi lần view nút con riêng của mình để vẽ có thể yêu cầu một kích thước và vị trí trong nút gốc. Nhưng đối tượng viewgroup có quyết định cuối cùng về nơi làm thế nào, có thể được cho mỗi nút con. Android parses các yếu tố của cách bố trí của người thiết kế (từ phía trên cùng của cây phân cấp), instantiating việc xem và them chúng và parent(s). Bởi vì đây là những trích ra trong trật tự, nếu có các yếu tố đó chồng chéo nhau các vị trí, một lần cuối để được rút ra sẽ nằm trên đầu trang của những người khác trước đây để rút ra những không gian đó. b) Giao diện Cách phổ biến nhất để xác định bố trí của bạn và thể hiện sự phân cấp view là với một tập tin XML layout. XML cung cấp một cơ cấu có thể đọc được cho bố trí, giống như HTML. Mỗi phần tử trong XML là cả một View hoặc đối tượng ViewGroup (hoặc hậu duệ đó). Các đối tượng View là lá trong cây, ViewGroup đối tượng là các nhánh trong cây. Tên của một phần tử XML là tương tự với lớp học Java mà nó đại diện. Vì vậy một yếu tố <textview> tạo ra một TextView trong UI của bạn, và một phần tử <linearlayout> tạo ra một LinearLayout viewgroup. Khi bạn tải một layout resource, hệ thống Android khởi chạy thời
gian các đối tượng, tương ứng với các yếu tố trong cách bố trí của bạn. Ví dụ, một bố trí dọc đơn giản với một lần xem văn bản và một nút sẽ như thế này:
22
<? xml version = "1.0" encoding = "utf-8"?> xmlns:android=" />android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a TextView"/> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a Button" /> </LinearLayout> Chú ý rằng các phần tử LinearLayout chứa cả TextView và Button. Bạn có thể làm khác LinearLayout (hoặc các loại hình xem nhóm) bên trong ở đây, để kéo dài sự phân cấp xem và tạo ra một bố cục phức tạp hơn. Để biết thêm về việc xây dựng một bố cục UI, đọc giao diện kê khai. Có rất nhiều cách mà bạn có thể xem cách bố trí của bạn. Sử dụng nhiều hơn và các loại khác nhau của các view group, bạn có thể cấu trúc views con và view groups trong vô số cách. Xác định các nhóm xem được cung cấp bởi Android (gọi là layouts) bao gồm LinearLayout, RelativeLayout, TableLayout, GridLayout và khác. Mỗi cung cấp một bộ duy nhất của các thông số bố trí được sử dụng để xác định vị trí của views con và cơ cấu layout Để tìm hiểu về một số các loại khác nhau của các
view group được sử dụng cho một layout, đọc giao diện đối tượng thường gặp. Widgets Widget là một object View phục vụ như một giao diện để tương tác với người dùng. Android cung cấp một tập các widgets thực hiện đầy đủ, giống như các button, Checkbox, và text-entry, do đó bạn có thể nhanh chóng xây dựng
23
giao diện người dùng của bạn. Một số widgets được cung cấp bởi Android phức tạp hơn, giống như một date picker, clock, và zoom controls. Nhưng nó không giới hạn trong các loại widgets được cung cấp bởi các nền tảng Android. Nếu bạn muốn làm một cái gì thêm cho tùy biến và tạo ra các yếu tố của hành động của bạn, bạn có thể bằng cách xác định object view của riêng bạn hoặc bằng cách mở rộng và kết hợp các Widget hiện có. Menus Menu đơn có một phần quan trọng của giao diện người dùng trong một ứng dụng. Menus cung cấp một giao diện đáng tin cậy cho thấy rằng các chức năng ứng dụng và cài đặt. Trong trình đơn ứng dụng phổ biến nhất là tiết lộ bằng cách bấm phím MENU trên thiết bị. Tuy nhiên, bạn cũng có thể thêm Context Menus, có thể hiển thị khi người sử dụng máy nhấn và nắm giữ phím trên một mục. Thực đơn cũng được hệ thống phân cấp cấu trúc bằng cách sử dụng một view, nhưng bạn không xác định cấu trúc này cho mình. Thay vào đó, bạn xác định onCreateOptionsMenu() hoặc onCreateContextMenu() gọi method cho hoạt động của bạn và tuyên bố các mục mà bạn muốn bao gồm trong menu của bạn. Trong một thời gian thích hợp, Android sẽ tự động tạo ra hệ thống View phân cấp cần thiết cho menu, và rút ra mỗi trong mỗi menu items đó. Menu cũng xử lý các sự kiện riêng của nó, do đó không cần phải đăng ký sự kiện listeners trên các item trong menu của bạn. Khi một item trong menu của bạn
được
chọn,
onoptionsItemSelected()
hoặc
onOptionsItemSelected()
onContextItemSelected() method onContextItemSelected() sẽ được gọi bằng framework. Và cũng giống layout của bạn, bạn có tùy chọn để khai báo các menu item cho bạn trong một tệp tin XML. Adapters Thỉnh thoảng ta sẽ muốn populate một view group với một số thông tin mà không thể hard-coded được, thay vào đó, bạn muốn bind để xem một nguồn dữ liệu bên ngoài. Để làm điều này, ta sử dụng một AdapterView xem như là view group của bạn và View con được khởi tạo và populated với dữ liệu từ Adapter. Các đối tượng AdapterView là một implementation của ViewGroup xác định
24
những view con của nó dựa trên một đối tượng Adapter nhất định. Adapter các hành vi như là chuyển phát nhanh giữa các nguồn dữ liệu của bạn (có lẽ là một mảng của chuỗi bên ngoài) và AdapterView, hiển thị nó trong đó. Có một số hiện thực của class Adapter, cho nhiệm vụ cụ thể, chẳng hạn như CursorAdapter việc đọc dữ liệu cơ sở dữ liệu từ một Cursor, hoặc một ArrayAdapter đọc từ một mảng tùy ý. Để tìm hiểu thêm về cách sử dụng một adapter cho populate views
của bạn, hãy đọc đóng vào dữ liệu với AdapterView. Styles and Themes Nếu chúng ta không hài lòng với dáng vẻ của các widgets tiêu chuẩn. Để sửa đổi chúng, chúng ta có thể tạo một số style riêng và chủ đề. Một Style là một tập hợp của một hay nhiều thuộc tính định dạng mà bạn có thể áp dụng như một đơn vị đến các yếu tố cá nhân trong layout của bạn. Ví dụ, bạn có thể xác định một Style chỉ định một văn bản kích thước và màu sắc nhất định, sau đó áp dụng nó để chỉ các yếu tố View cụ thể. Một Theme là một tập hợp của một hay nhiều thuộc tính định dạng mà bạn có thể áp dụng như một đơn vị đến tất cả các hoạt động trong một ứng dụng, hoặc chỉ hoạt động đơn lẻ. Ví dụ, bạn có thể định nghĩa một theme mà bộ màu sắc cụ thể cho khung cửa sổ và nền bảng, và đặt kích cỡ chữ và màu sắc cho các menu. Theme này sau đó có thể được áp dụng cho các hoạt động cụ thể hoặc ứng dụng toàn bộ. Styles and themes là nguồn tài nguyên. Android cung cấp một số kiểu mặc định và style and themes mà bạn có thể sử dụng, hoặc bạn có thể phát triển riêng tài nguyên style and theme của bạn. Tìm hiểu thêm về cách sử dụng phong cách và chủ đề trong các ứng dụng Styles và tài liệu đề. 1.2. Giới thiệu các tool hỗ trợ 1.2.1. Khái niệm về Web Service. Theo định nghĩa của W3C (World Wide Web Consortium), Web Service là một hệ thống phần mềm được thiết kế để hỗ trợ khả năng tương tác giữa các ứng dụng trên các máy tính khác nhau thông qua mạng Internet, giao diện chung và sự gắn kết của nó được mô tả bằng XML. Dịch vụ Web là tài nguyên phần mềm 25