Android được phát triển nhằm cạnh tranh với các hệ điều hành di động khác như iOS Apple, Window Mobile Microsoft, Symbian Nokia, BlackBerry OS … Mục tiêu của Liên minh này là nhanh chón
Trang 1TRƯỜNG CAO ĐẲNG CÔNG THƯƠNG TP.HCM
KHOA: CÔNG NGHỆ THÔNG TIN
KHÓA LUẬN TỐT NGHIỆP
XÂY DỰNG ỨNG DỤNG TỪ ĐIỂN
VÀ TRẮC NGHIỆM TRÊN ANDROID
Sinh viên: Nguyễn Hoàng Bảo MSSV: 2112110291
Lớp: CCQ1211LA GVHD: Nguyễn Xuân Nhựt
Tp.HCM, ngày 12 tháng 06 năm 2015
Trang 2TỔNG QUAN ĐỀ TÀI
Hiện nay, công nghệ thông tin đang phát triển hết sức mạnh mẽ Điều này
đồng nghĩa với việc nhu cầu về công nghệ của con người cũng ngày càng cao
Từ việc phải làm việc và giải trí trên máy tính, giờ đây các thiết bị di dộng cũng đang dần đáp ứng được các nhu cầu của con người và càng được sử dụng nhiều hơn do tính linh hoạt, tiện lợi và di động cao
Có rất nhiều nền tảng di động phổ biến như IOS, Android, Symbia, WindowPhone, Bada… nhưng Android của Google đang là hệ điều hành có hướng phát triển mạnh nhất Do Android là một hệ điều hành mở nên nhận được rất nhiều sự hỗ trợ từ cộng động mạng trên khắp thế giới Lập trình di động đã phát triển khá lâu trên thế giới nhưng vẫn còn khá mới mẻ ở Việt Nam, đặc biệt
là lập trình ứng dụng trên Android
Xã hội ngày càng phát triển, đòi hỏi về trình độ học vấn, hiểu biết càng cao thì việc chúng ta luôn có tư liệu và trao dồi kiến thức là điều cần thiết Tuy nhiên, việc tra cứu từ điển hoặc thi thử trắc nghiệm trên giấy, máy tính vẫn còn hạn chế Với một chiếc di động chạy hệ điều hành Android thì điều đó sẽ vô cùng tiện lợi, có thể tra cứu từ điển hoặc thi trắc nghiệm mọi lúc mọi nơi Từ những lý do trên, em đã suy nghĩ và quyết định lựa chọn đề tài tìm hiểu và xây dựng ra ứng dụng tra cứu Từ điển và trắc nghiệm chạy trên hệ điều hành
Android, tên đề tài là “XÂY DỰNG ỨNG DỤNG TỪ ĐIỂN VÀ TRẮC NGHIỆM TRÊN HỆ ĐIỀU HÀNH ANDROID”
Trang 3II ĐỐI TƯỢNG NGHIÊN CỨU
Đối tượng nghiên cứu: Nghiên cứu, ứng dụng công cụ Android Studio để xây dựng ứng dụng từ điển và trắc nghiệm trên hệ điều hành Android
Phạm vi nghiên cứu: Ứng dụng tra cứu từ điển và ứng dụng thi thử trắc nghiệm trên hệ điều hành Android
III MỤC ĐÍCH NGHIÊN CỨU
Xây dựng ứng dụng từ điển và trắc nghiệm, với giao diện đơn giản, thân thiện và dễ sử dụng Cung cấp một cách đầy đủ và chính xác các thông tin và
dữ liệu mà người dùng cần
Mục tiêu cụ thể như sau:
Ứng dụng từ điển: người dùng có khả năng tra từ bằng phương pháp lọc từ, đánh dấu từ yêu thích, tra trực tuyến trên website,…
Ứng dụng trắc nghiệm: xây dựng được ứng dụng sát hạch bằng láy xe, xây dựng nhiều bộ đề khác nhau, quản lý thời gian khi sát hạch của từng bộ đề, khả năng chọn nhiều đáp án với mỗi câu, tính điểm sau khi sát hạch
IV PHƯƠNG PHÁP NGHIÊN CỨU
+ Về lý thuyết:
Tìm hiểu về hệ điều hành Android
Tìm hiểu về ngôn ngữ Anroid
Cách sử dụng các control cơ bản và các thuật toán
Trang 4LỜI CẢM ƠN
- -
Xin chân thành cám ơn Ban giám hiệu cùng toàn thể quý thầy cô, đặc biệt là quý thầy cô Khoa Công nghệ Thông tin Trường Cao đẳng Công Thương Thành phố Hồ Chí Minh, những người đã truyền đạt cho tôi nhiều kiến thức quý báu trong quá trình học tập
Xin cám ơn thầy Nguyễn Xuân Nhựt – giảng viên Khoa Công nghệ Thông tin Trường Cao đẳng Công Thương là người đã tận tình hướng dẫn tôi trong suốt quá trình hoàn thành đề tài này
Xin trân trọng cảm ơn!
Tp.HCM, ngày 12 tháng 06 năm 2015
Sinh viên thực hiện
Nguyễn Hoàng Bảo
Trang 5Mục Lục
TỔNG QUAN ĐỀ TÀI 1
LỜI CẢM ƠN 3
CHƯƠNG I: CƠ SỞ LÝ THUYẾT 7
1.1 Lịch sử Android 7
1.2 Kiến trúc của Android 9
1.2.1 Tầng ứng dụng 10
1.2.2 Application framework 10
1.2.3 Library 11
1.2.4 Android Runtime 11
1.2.5 Linux kernel 11
1.3 Cấp độ API (API Level) 12
CHƯƠNG II: LÀM QUEN VỚI MÔI TRƯỜNG PHÁT TRIỂN 14
2.1 Giới thiệu môi trường phát triển (IDE) 14
2.2 Yêu cầu cài đặt 15
2.3 Giả lập máy ảo hệ điều hành Android (Android Emulator) 17
2.4 Cấu trúc một Module (Project) 19
2.4.1 Cấu trúc chung 19
2.4.2 AndroidManifest.xml 20
2.4.3 File R.java 23
2.5 Vòng đời một ứng dụng 23
2.5.1 Các khái niệm 23
2.5.2 Vòng đời của một ứng dụng 26
CHƯƠNG III XỬ LÝ GIAO DIỆN NGƯỜI DÙNG 28
3.1 View và Viewgroup 28
3.2 Layout 29
3.3 Các control cơ bản 31
3.3.1 TextView, EditText: 31
Trang 63.3.2 Button 31
3.3.3 Listview 32
3.3.4 ImageView 33
3.3.5 Tab Selector 33
3.3.6 ContextMenu 34
CHƯƠNG IV CÁC THÀNH PHẦN KHÁC 35
4.1 Intent 35
4.2 Background Service 37
4.3 Telephony 40
4.4 Cơ sở dữ liệu SQLite 41
4.4.1 Tạo trực tiếp 41
4.4.2 Sử dụng câu lệnh trong Android Studio 42
CHƯƠNG V XÂY DỰNG ỨNG DỤNG TỪ ĐIỂN 45
5.1 Tổng quan về đề tài 45
5.1.1 Xác định yêu cầu bài toán 45
5.1.2 Mục đích nghiên cứu 45
5.2 Phân tích thiết kế hệ thống 46
5.2.1 Đặc tả chức năng 46
5.2.2 Biểu đồ Use Case 46
5.2.3 Biểu đồ trình tự 47
5.3 Xây dựng ứng dụng 48
5.3.1 Thiết kế cơ sở dữ liệu 48
5.3.2 Xây dựng lớp 49
5.3.2 Lập trình các chức năng chính 50
5.3.3 Màn hình giao diện ứng dụng 53
5.4 Kết luận 55
5.4.1 Kết quả đạt được 55
5.4.2 Hướng phát triển 55
Trang 7CHƯƠNG VI XÂY DỰNG ỨNG DỤNG TRẮC NGHIỆM 56
6.1 Tổng quan về đề tài 56
6.1.1 Xác định yêu cầu bài toán 56
6.1.2 Mục đích nghiên cứu 56
6.2 Phân tích thiết kế hệ thống 57
6.2.1 Đặc tả chức năng 57
6.2.2 Biểu đồ Use Case 57
6.2.3 Biểu đồ trình tự 58
6.3 Xây dựng ứng dụng 59
6.3.1 Thiết kế cơ sở dữ liệu 59
6.3.2 Xây dựng lớp 61
6.3.2 Lập trình các chức năng chính 64
6.3.3 Giao diện ứng dụng 69
6.4 Kết luận 71
6.4.1 Kết quả đạt được 71
6.4.2 Hướng phát triển 71
TỔNG KẾT 72
TÀI LIỆU THAM KHẢO 73
DANH MỤC HÌNH ẢNH 73
Trang 8CHƯƠNG I: CƠ SỞ LÝ THUYẾT
1.1 Lịch sử Android
Android là hệ điều hành cho các thiết bị di động dựa trên nhân Linux do công
ty Android Inc (California, Mỹ) thiết kế Công ty này sau đó được Google mua lại vào năm 2005 và bắt đầu xây dựng các nền tảng Android
Vào cuối năm 2007, Android thuộc về Liên minh Thiết bị Cầm tay Mã Nguồn mở (Open Handset Alliance) với khoảng 78 thành viên bao gồm cả nhà sản xuất, nhà phát triển ứng dụng…cho thiết bị di động mà dẫn đầu là Google Android được phát triển nhằm cạnh tranh với các hệ điều hành di động khác như iOS
(Apple), Window Mobile (Microsoft), Symbian (Nokia), BlackBerry OS …
Mục tiêu của Liên minh này là nhanh chóng đổi mới để đáp ứng tốt hơn cho nhu cầu người tiêu dùng và kết quả đầu tiên của nó chính là nền tảng Android Android được thiết kế để phục vụ nhu cầu của các nhà sản xuất, các nhà khai thác
và các lập trình viên thiết bị di động
Phiên bản SDK (Software Development Kit) lần đầu tiên phát hành vào tháng
11 năm 2007, hãng T-Mobile cũng công bố chiếc điện thoại Android đầu tiên đó là chiếc T-Mobile G1, chiếc smartphone đầu tiên dựa trên nền tảng Android Một vài ngày sau đó, Google lại tiếp tục công bố sự ra mắt phiên bản Android SDK release Candidate 1.0 Trong tháng 10 năm 2008, Google được cấp giấy phép mã nguồn mở cho Android Platform
Trang 9Khi Android được phát hành thì một trong số các mục tiêu trong kiến trúc của nó là cho phép các ứng dụng có thể tương tác được với nhau và có thể sử dụng lại các thành phần từ những ứng dụng khác Việc tái sử dụng không chỉ được áp dụng cho các dịch vụ mà nó còn được áp dụng cho cả các thành phần dữ liệu và giao diện người dùng
Vào cuối năm 2008, Google cho phát hành một thiết bị cầm tay được gọi là Android Dev Phone 1 có thể chạy được các ứng dụng Android mà không bị ràng buộc vào các nhà cung cấp mạng điện thoại di động Mục tiêu của thiết bị này là cho phép các nhà phát triển thực hiện các cuộc thí nghiệm trên một thiết bị thực có thể chạy hệ điều hành Android mà không phải ký một bản hợp đồng nào Vào khoảng cùng thời gian đó thì Google cũng cho phát hành một phiên vản vá lỗi 1.1 của hệ điều hành này
Ở cả hai phiên bản 1.0 và 1.1 Android chưa hỗ trợ bàn phím ảo mà đòi hỏi các thiết bị phải sử dụng bàn phím vật lý Android cố định vấn đề này bằng cách phát hành SDK 1.5 vào tháng tư năm 2009 Phiên bản mới nhất hiện nay được Google cho ra mắt vào tháng 5 năm 2015 đó là Android M
Google đã chọn “người máy” Bugdroid – với dáng vẻ hiện đại và trẻ trung – được sáng tạo bởi Irina Blok, làm biểu tượng chính thức cho hệ điều hành di động của họ Bên cạnh đó, để khẳng định thương hiệu, cách đặt tên các phiên bản hệ điều hành Android theo các món ăn tráng miệng do Ryan PC Gibson đề xuất cũng đãđược Google áp dụng Tên của các phiên bản được đặt theo thứ tự của bảng chữ cái như [C]upcake, [D]onut, [E]clair, [F]royo, [G]ingerbread, [H]oneyComb…
Trang 10Hình 1.1 Biểu tượng Android qua các thời kỳ
1.2 Kiến trúc của Android
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành Android Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây
Hình 1.2 Cấu trúc stack hệ thống Android
Trang 111.2.1 Tầng ứng dụng
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: contacts, browser, camera, Phone,… Tất cả các ứng dụng chạy trên hệ điều hành Android đều được viết bằng Java
1.2.2 Application framework
Android cung cấp một nền tảng phát triển mở, giúp cho các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo Nhà phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo động,…
Nhà phát triển có thể truy cập vào các API (Application Programming Interface) cùng một khuôn khổ được sử dụng bởi các ứng dụng lõi Các kiến trúc ứng dụng được thiết kế để đơn giản hóa việc sử dụng lại các thành phần; bất kỳ ứng dụng có thể xuất bản khả năng của mình và ứng dụng nào khác sau đó có thể sử dụng những khả năng (có thể hạn chế bảo mật được thực thi bởi khuôn khổ) Cơ chế này cho phép các thành phần tương tự sẽ được thay thế bởi người sử dụng
Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, bao gồm:
Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau dùng để thiết
kế phần giao diện ứng dụng như: gridview, tableview, linearlayout,…
Một “Content Provider” cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứng dụng khác (chẳng hạn như Contacts) hoặc là chia sẻ dữ liệu giữa các ứng dụng đó
Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không phải
là mã nguồn, chẳng hạn như: localized strings, graphics, and layout files
Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các custom alerts trong status bar
Trang 12Activity Manager được dùng để quản lý chu trình sống của ứng dụng và điều hướng các activity
1.2.3 Library
Android bao gồm một tập hợp các thư viện C/C++ được sử dụng bởi nhiều thành phần khác nhau trong hệ thống Android Điều này được thể hiện thông qua nền tảng ứng dụng Android
1.2.4 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 để cho một thiết bị có thể chạy nhiều máy ảo (Virtual Machine – VM ) 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
1.2.5 Linux kernel
Android dựa trên nhân Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi như security, memory management, process management, network stack, and driver model Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng và phần còn lại của phần mềm stack
Trang 131.3 Cấp độ API (API Level)
Cấp độ API (Application Programming Interface – Giao diện chương trình ứng
dụng) là một giá trị số nguyên dùng để xác định sự sửa đổi khuôn khổ API được cung cấp bởi một phiên bản của nền tảng Android
Nền tảng Android cung cấp 1 khuôn khổ API để các ứng dụng có thể sử dụng để tương tác với hệ thống Android cơ bản Một khuôn khổ API bao gồm:
+ Các gói (packages) và lớp (classes)
+ Các yếu tố và thuộc tính XML để khai báo file manifest
+ Các yếu tố và thuộc tính XML để khai báo và tiếp cận nguồn tài nguyên + Các Intent
+ Các quyền mà ứng dụng yêu cầu
Mỗi phiên bản nền tảng Android hỗ trợ chính xác một cấp độ API, mặc dù
sự hỗ trợ bao hàm cho tất cả các cấp độ API trước đó (cho đến API cấp độ 1) Việc phát hành ban đầu của nền tảng Android cung cấp API cấp độ 1 và phiên bản tiếp theo đã tăng cấp độ API lên
Trang 14Hình 1.3 Các cấp độ API được hỗ trợ bởi mỗi phiên bản của nền tảng Android
Trang 15CHƯƠNG II: LÀM QUEN VỚI MÔI TRƯỜNG PHÁT TRIỂN
2.1 Giới thiệu môi trường phát triển (IDE)
Ngôn ngữ lập trình chính thức của Android là Java Mặc dù các ứng dụng trên Android được phát triển dựa trên nền tảng Java, nhưng Android không hỗ trợ J2ME và J2SE, là hai công nghệ lập trình phổ dụng cho các thiết bị di động
Dựa trên máy ảo Java của Sun, Google đã tinh chỉnh và phát triển nên máy ảo Dalvik để biên dịch mã Java với tốc độ biên dịch nhanh hơn và nhẹ hơn Đến phiên bản Froyo 2.2, Android đã hỗ trợ Just-in-time Compiler (JIT) làm tăng tốc độ biên dịch Java lên gấp 2-5 lần so với các phiên bản trước
Môi trường phát triển (IDE) Android thường dùng trước đây là Eclipse, tích thợp thêm bộ công cụ SDK để hỗ trợ lập trình Vào khoảng cuối năm 2014, Android cho ra mắt một công cụ lập trình Android chính thức tên là Android Studio Android Studio bao gồm các thành phần:
Android Studio IDE
Android SDK tools
Android 5.0 (Lollipop) Platform
Android 5.0 emulator system image with Google APIs
Trong Eclipse, bạn sẽ quen thuộc với khái niệm không gian làm việc (Workspace) với những project con nằm trong đấy, tuy nhiên trong Android Studio không còn khái niệm Workspace và mỗi cửa sổ bạn chỉ làm việc với một project Những project trong Android Studio được thay thế với một khái niệm mới gọi là
"Modules" và "Library Modules"
Với Android Studio, bạn sẽ được tiếp xúc nhiều với Gradle Gradle là một công cụ tự động build project dựa trên các khái niệm của Apache Ant, Apache Maven và giới thiệu Groovy dựa ngôn ngữ (DSL) thay cho hình thức khai báo cấu hình truyền thống (XML) của project
Trang 16Hình 2.1 Cấu trúc JDK
Hình 2.2 Thiết lập
Environment Variables
2.2 Yêu cầu cài đặt
- Java JDK (Java Development Kit) là một ứng dụng nền tảng để chạy các
ứng dụng Java Nó bao gồm các thư viện và công cụ debug của Java
Tải về tại: http://java.sun.com/javase/downloads/index.jsp
- Thiết lập Environment Variables: Ở một số hệ thống Windows, lệnh khởi
chạy của Android Studio sẽ không tìm được nơi mà Java được cài Vì vậy, chúng ta cần phải thiết lập một biến môi trường để cho biết vị trí chính xác của thư mục Java
Chọn theo đường dẫn: Start menu > Computer > System Properties
> Advanced System Properties Kế đến mở tab Advanced tab >
Trang 17- Android Studio: Tải Android Studio và cài đặt thông thường theo địa chỉ:
http://developer.android.com/sdk/index.html
Yêu cầu cấu hình:
Windows
Microsoft® Windows® 8/7/Vista/2003 (32 or 64-bit)
2 GB RAM minimum, 4 GB RAM recommended
400 MB hard disk space + at least 1 G for Android SDK, emulator system images, and caches
1280 x 800 minimum screen resolution
Java Development Kit (JDK) 7
Optional for accelerated emulator: Intel® processor with support for Intel® VT-x, Intel® EM64T (Intel® 64), and Execute Disable (XD) Bit functionality
Mac OS X
Mac® OS X® 10.8.5 or higher, up to 10.9 (Mavericks)
2 GB RAM minimum, 4 GB RAM recommended
400 MB hard disk space
At least 1 GB for Android SDK, emulator system images, and caches
1280 x 800 minimum screen resolution
Java Runtime Environment (JRE) 6
Java Development Kit (JDK) 7
Optional for accelerated emulator: Intel® processor with support for Intel® VT-x, Intel® EM64T (Intel® 64), and Execute Disable (XD) Bit functionality
On Mac OS, run Android Studio with Java Runtime Environment (JRE) 6 for optimized font rendering You can then configure your project to use Java Development Kit (JDK) 6 or JDK 7
Linux
GNOME or KDE desktop
GNU C Library (glibc) 2.11 or later
2 GB RAM minimum, 4 GB RAM recommended
400 MB hard disk space
At least 1 GB for Android SDK, emulator system images, and caches
1280 x 800 minimum screen resolution
Oracle® Java Development Kit (JDK) 7
Trang 182.3 Giả lập máy ảo hệ điều hành Android (Android Emulator)
Emulator hay hệ máy giả lập là máy điện thoại ảo chạy trên nền tảng của
máy vi tính Nó cho phép bạn phát triển và kiểm tra ứng dụng Android mà không cần sử dụng một máy thật Máy ảo này được thiết kế bắt chước gần như tất cả các chi tiết phần cứng và phần mềm của một chiếc máy thật, ngoại trừ việc bạn không thể gọi đến một số nào đó để tạo một cuộc hội thoại thật Giao diện của nó gồm 1 màn hình cảm ứng (thao tác bằng mouse máy tính) và một bàn phím Qwerty đầy đủ chức năng Android Emulator được quản lý bằng AVD (Android Virtual Device)
Android Virtual Device (AVD) là một cấu hình giả lập thiết bị di động
Android để có thể chạy và debug các ứng dụng Android Studio cung cấp sẵn cho người dùng một công cụ để tạo và quản lý các thiết bị ảo này
Hình 2.3 Máy ảo của Android Studio
Trang 19Tuy nhiên, đối với những máy có cấu hình yếu thì việc khởi động và debug các ứng dụng trên các thiết bị ảo của AVD cực kỳ chậm và lâu Vì thế mình xin
giới thiệu thêm một phần mềm tạo máy ảo trên Android đó là Genymotion
Genymotion thực chất sử dụng VirtualBox để tạo ra các máy ảo, tuy nhiên nó
sẽ giúp chúng ta đơn giản được nhiều bước thiết lập Download ứng dụng tại đường dẫn:
https://www.genymotion.com/#!/download
Hình 2.4 Màn hình Genymotion
Trang 202.4 Cấu trúc một Module (Project)
Hình 2.5 Giao diện khi mở một project
build/: chứa các thư mục cho các biến thể đặc trưng
libs/: chứa các thư viện riêng
src/main/java: lưu trữ các tập tin mã nguồn java
src/main/res: chứa tài nguyên của ứng dụng, ví dụ như file ảnh, file
Trang 21 build.gradle: chứa các đặc tính tùy biến
Hình 2.6 Cấu trúc cây của một Project trong Android Stuido
2.4.2 AndroidManifest.xml
Trong bất kì một Module (project) Android nào khi tạo ra đều có một file AndroidManifest.xml, file này được dùng để định nghĩa các màn hình (activity) được sử dụng, các permission cũng như các theme cho ứng dụng Đồng thời nó cũng chứa thông tin về phiên bản SDK cũng như activity chính sẽ chạy đầu tiên
File này được tự động sinh ra khi tạo một Android project Trong file
manifest bao giờ cũng có 3 thành phần chính đó là: application, permission và
version
Trang 22 android:theme = “drawable theme”: thuộc tính này để đặt theme cho ứng dụng Các theme là các cách để hiển thị giao diện ứng dụng
Ngoài ra còn nhiều thuộc tính khác…
Trang 232.4.1.2 Permission
Bao gồm các thuộc tính chỉ định quyền truy xuất và sử dụng tài nguyên của ứng dụng Khi cần sử dụng một loại tài nguyên nào đó thì trong file manifest của ứng dụng cần phải khai báo các quyền truy xuất, ví dụ:
Trang 242.4.3 File R.java
File R.java là một file tự động sinh ra ngay khi tạo ứng dụng, file này được
sử dụng để quản lý các thuộc tính được khai báo trong file XML của ứng dụng
và các tài nguyên hình ảnh
Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện nào xảy xa làm thay đổi các thuộc tính trong ứng dụng Chẳng hạn như, bạn kéo và thả một file hình ảnh từ bên ngoài vào project thì ngay lập tức thuộc tính đường dẫn đến file đó cũng sẽ được hình thành trong file R.java hoặc xoá một file hình ảnh thì đường dẫn tương ứng đến hình ảnh đó cũng tự động bị xoá
Có thể nói file R.java hoàn toàn không cần phải đụng chạm gì đến trong cả quá trình xây dựng ứng dụng
2.5 Vòng đời một ứng dụng
2.5.1 Các khái niệm
Applications: Mỗi Android Project khi biên dịch thành công thì sẽ được
đóng gói thành tập tin apk, tập tin apk được gọi là một Application (Ứng dụng cụ thể nào đó – Ví dụ như ứng dụng chống tin nhắn rác, ứng dụng tìm đường đi ngắn nhất, ứng dụng đăng ký học phần bằng sms … )
Activities: Mỗi ứng dụng sẽ có một hoặc nhiều Activity, nó tương tự các
màn mình tương tác giống như Form trong Net hoặc JFrame trong Java Mỗi một Activity này phải được khai báo trong Manifest và sẽ có một vòng đời riêng độc lập hoàn toàn với các Activity khác
Mỗi Activity gồm 3 trạng thái sau:
Trang 25Hình 2.8 Vòng đời của một Activity
- Running (Đang hoạt động): Khi màn hình là Foreground (Activity nằm
trên cùng ứng dụng và cho phép người
sử dụng tương tác)
- Paused (Tạm dừng): Activity bị mất
focus nhưng mà vẫn nhìn thấy được
Activity này (Ví dụ bạn mở một
Activity mới lên dưới dạng Dialog)
- Stopped (Dừng – không phải
Destroyed): Activity mất focus và không
nhìn thấy được (ví dụ bạn mở một
Activity mới lên mà Full màn hình)
hợp Paused hay Stopped, Activity đều
có khả năng bị Destroyed (hủy) khi bộ
nhớ cần cho việc khác ưu tiên hơn.
Activity Stack: Là một ngăn xếp chứa các Activity đang hoạt động Tương tự như các ngôn ngữ lập trình khác, Activity Stack hoạt động theo cơ chế LIFO
(LAST IN FIRST OUT)
Mỗi một Activity mới được mở lên nó sẽ ở bên trên Activity cũ, để trở về
Activity thì bạn chỉ cần nhấn nút “Back” để trở về hoặc viết lệnh Tuy nhiên nếu bạn nhấn nút Home rồi thì sẽ không thể dùng nút “Back” để quay lại màn hình
cũ được
Trang 26 Tasks là khả năng tương tác để thực hiện một công việc nào đó giữa các ứng dụng với nhau
Ví dụ: Bạn đang mở chương trình quản lý BlackList, trong chương trình
này cho phép mở danh bạ để đưa vào danh sách đen Lúc đó chương trình bạn sẽ gọi Activity của ứng dụng danh bạ, sau khi lấy xong lại quay trở về ứng dụng của bạn
Hình 2.9 Activity Stack
Hình 2.10 Tương tác giữa các Activity
Trang 272.5.2 Vòng đời của một ứng dụng
Hình 2.11 Vòng đời của một ứng dụng
Một ứng dụng Adnroid được bắt đầu khi một trong các thành phần trong nó được bắt đầu Vòng đời của một ứng dụng được tính từ khi gọi phương thước onCreate() cho đến trước khi gọi phương thức onDestroy()
Một ứng dụng có thể được cung cấp các phương thức vòng đời chính như:
onCreate() – được gọi trước khi một thành phần đầu tiên của ứng dụng
khởi động
onLowMemory() – được gọi khi hệ điều hành Android yêu cầu dọn
dẹp bộ nhớ
onTerminate() – chỉ để kiểm tra, không được gọi lại
onConfigurationChanged() – được gọi khi cấu hình thay đổi
Trang 28Hình 2.12 Vòng đời chi tiết của một ứng dụng
Khi ứng dụng hoạt động sẽ có các trạng thái khác nhau, dưới đây là thứ tự ưu tiên cho các trạng thái:
Foreground Xảy ra từ khi gọi onRemuse() đến khi gọi onPause()
Trong suốt thời gian này, Activity luôn nằm trên cùng
và người dùng có thể tương tác với nó
1
Visible Xảy ra từ khi gọi onStart() đên khi gọi onStop() Trong
suốt thời gian này, chúng ta có thể nhìn thấy Activity nhưng có thể tương tác hoặc không tương tác được với
nó
2
Background Ứng dụng chỉ tạm dừng các Activity mà không chạy
một dịch vụ hay nhận một thực thi nào
4
Trang 29CHƯƠNG III XỬ LÝ GIAO DIỆN NGƯỜI DÙNG
3.1 View và Viewgroup
Trong một ứng dụng Android, giao diện người dùng được xây dựng từ các đối tượng View và ViewGroup Có nhiều kiểu View và ViewGroup Mỗi một kiểu là một hậu duệ của class View và tất cả các kiểu đó được gọi là các Widget
Tất cả mọi widget đều có chung các thuộc tính cơ bản như là cách trình bày vị trí, background, kích thước, lề… Tất cả những thuộc tính chung này được thể hiện hết ở trong đối tượng View
Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu trúc phân cấp như hình dưới Một screen là một tập hợp các Layout và các widget được bố trí có thứ tự Để thể hiện một screen thì trong hàm onCreate của mỗi Activity cần phải được gọi một hàm là setContentView(R.layout.main); hàm này sẽ load giao diện từ file XML lên để phân tích thành mã bytecode
Hình 3.1 Cấu trúc một giao diện ứng dụng Android
Trang 303.2 Layout
Layout dùng để xác định cấu trúc ứng dụng và chứa các control trong giao diện người dùng Để ứng dụng Android của bạn có giao diện phức tạp bạn phải biết kết hợp nhiều layout lại với nhau
Một số layout cơ bản trong Android:
a FrameLayout: là layout cơ bản nhất, đặc điểm là các control trong này
sẽ được đặt ở góc trái trên cùng màn hình Các control đưa vào cùng một
vị trí sẽ đè lên và che khuất các control trước đó
b LinearLayout: cho phép ta đặt các control theo một đường thẳng theo 2
hướng trên giao diện là: từ trái qua phải và từ trên xuống dưới
Hình 3.2 Ví dụ về FrameLayout
Trang 31c RelativeLayout: cho phép sắp xếp các control theo vị trí tương đối giữa
các control khác trên giao diện (kể cả control chứa nó)
Trang 323.3 Các control cơ bản
3.3.1 TextView, EditText:
TextView, EditorText là một thành phần đồ họa để chứa các văn bản trên giao diện Trong Android, EditorText được sử dụng như một TextField hoặc một TextBox TextView ngoài tác dụng là để hiển thị văn bản thì nó còn cho phép định dạng nội dung bằng thẻ html
Thuộc tính android:onClick="clickHere" được dùng để bắt sự kiện khi click vào button Thuộc tính này sẽ tạo ra một phương thức trong file mã nguồn
Trang 333.3.3 Listview
Được sử dụng để thể hiện một danh sách các thông tin theo từng cell Mỗi cell thông thường được load lên từ một file XML đã được cố định trên đó số lượng thong tin và loại thông tin cần được thể hiện
Để thể hiện được một list thông tin lên một screen thì cần phải có 3 yếu tố chính:
• Data Source: Data Source có thể là một ArrayList, HashMap hoặc bất kỳ
một cấu trúc dữ liệu kiểu danh sách nào
• Adapter: Adapter là một class trung gian giúp ánh xạ dữ liệu trong Data
Source vào đúng vị trí hiển thị trong ListView Chẳng hạn, trong Data Source có một trường name và trong ListView cũng có một TextView để thể hiện trường name này Tuy nhiên,
ListView sẽ không thể hiển thị dữ liệu
trong Data Source lên được nếu như
Adapter không gán dữ liệu vào cho đối
tượng hiển thị
• ListView: ListView là đối tượng để hiển
thị các thông tin trong Data Source ra
một cách trực quan và người dùng có thể
thao tác trực tiếp trên đó
Hình 3.6 Ví dụ về ListView
Trang 34Tab Selector giống như Property Sheet trong Visual C, giống như Tab
Hình 3.7 Ví dụ về Tab Selector
Trang 353.3.6 ContextMenu
ContextMenu được sử dụng để hiển thị các tuỳ chọn khi người dùng nhấn
dài vào một cell nào đó trong ListView Để tạo một ContextMenu ta cũng có 2 cách giống như tạo MenuOptions ở trên chỉ khác tên phương thức
Khi nhấn dài vào một cell trong ListView thì phương thức:
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo)
sẽ được gọi và truyền vào 3 tham số là:
ContextMenu: đối tượng để add các context menu item
View: Đối tượng nơi mà xảy ra sự kiện
ContextMenuInfo: Cho biết vị trí xảy ra sự kiện trong ListView Để biết được vị trí
xảy ra sự kiện ta làm như sau:
Trang 36CHƯƠNG IV CÁC THÀNH PHẦN KHÁC
4.1 Intent
Intent là nền tảng để truyền tải các thông báo qua lại Intent được sử dụng
để gửi các thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc bạn mong muốn Ví dụ, khi mở 1 trang web, bạn gửi 1 intent đi để tạo 1 activity mới hiển thị trang web đó
Dữ liệu của Intent:
Intent về cơ bản là một cấu trúc dữ liệu, được mô tả trong lớp android.content.Intent
Các thuộc tính của một đối tượng Intend:
Hình 4.2 Các thuộc tính của intent Hình 4.1 Mô phỏng hoạt động của Intent
Trang 37Cách khai báo: Cung cấp chính xác thông tin của activity cần gọi bằng cách
truyền vào tên class của Activity đó hoặc các action được khai báo sẵn
Ví dụ: Từ Activity A muốn chuyển qua Activity B ta khai báo một Intend trong
Activity A:
Intent intent = new Intent(this, B.class);
startActivity(intent);
Hình 4.3 Các action đã được định nghĩa sẵn trong Intent
Tính liên lạc giữa 2 activity: Khi chuyển sang một Activity khác ta có thể gửi kèm
dữ liệu trong intend đó như sau: