Đặc tính mở của 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ả các tính năng của một chiếc điện thoại cung cấp... Tấ
Trang 1LỜI CẢM ƠN
Để hoàn thành bài đồ án tốt nghiệp này, lời đầu tiên em xin gửi lời biết ơn
chân thành và sâu sắc nhất đến thầy giáo Th.S Nguyễn Văn Việt đã tận tình hướng
dẫn, truyền đạt những kinh nghiệm quý báu cho em trong suốt quá trình làm đồ án
Em xin gửi lời cảm ơn đến các thầy cô giáo trong khoa Công nghệ thông tin cùng toàn thể các thầy cô giáo đã truyền đạt vốn kiến thức quý báu cho em trong suốt quá trình học tâp vừa qua Em đã được các thầy cô cung cấp và truyền đạt tất
cả kiến thức chuyên môn cần thiết và quý giá nhất Ngoài ra, em còn được rèn luyện một tinh thần học tập và làm việc độc lập, sáng tạo Đây là nền tảng hết sức cần thiết để có thể thành công khi bắt tay vào nghề nghiệp trong tương lai
Đồ án tốt nghiệp là cơ hội để em có thể áp dụng, tổng kết lại những kiến thức mà mình được học Đồng thời, em rút ra được những kinh nghiệm thực tế và quý giá trong suốt quá trình thực hiện đồ án Sau một thời gian khá dài, em tập trung công sức cho đồ án và làm việc tích cực, đặc biệt nhờ sự chỉ đạo và hướng
dẫn tận tình của thầy Th.S Nguyễn Văn Việt cùng với các thầy cô trong trường Đại
học Công nghệ thông tin và truyền thông – Đại học Thái Nguyên, đã giúp em hoàn thành đồ án một cách thuận lợi và gặt hái được những kết quả như mong muốn Bên cạnh những kết quả khiêm tốn mà em đạt được, chắc chắn không tránh khỏi những thiếu sót khi thực hiện báo cáo của mình, kính mong thầy cô thông cảm Sự phê bình, góp ý của quý thầy cô sẽ là nhưng bài học kinh nhiệm quý báu cho công việ thực tế của em sau này
Em cũng xin chân thành cảm ơn Ban lãnh đạo nhà trường cùng toàn thể các thầy cô giáo trong nhà trường đã tạo mọi điều kiện thuận lợi, cung cấp cơ sở vật chất, trang thiết bị cần thiết trong quá trình học tập của em tại trường
Kính chúc quý thầy cô mạnh khỏe, tiếp tục đạt được nhiều thắng lợi trong nghiên cứu khoa học và sự nghiệp trồng người
Em xin chân thành cảm ơn!
Trang 2LỜI CAM ĐOAN
Em xin cam đoan toàn bộ nội dung trong đồ án này là do tự em đọc và nghiên cứu các tài liệu, khảo sát các phần mềm hiện nay Từ đó viết ra cơ sở lý thuyết và xây dựng chương trình “phần mềm học tiếng Anh tỏng hợp trên Android”
Mọi nguồn tham khảo, trích dẫn trong đồ án đều được ghi rõ nguồn gốc
Người cam đoan
Nguyễn Văn Phú
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH MỤC HÌNH ẢNH 6
MỞ ĐẦU: 7
CHƯƠNG 1: LÝ THUYẾT ANDROID 8
I GIỚI THIỆU ANDROID 8
1.1 Khái niệm android 8
1.1.1 Android khác với các hệ điều hành chạy trên thiết bị di động khác.8 1.1.2 Đặc tính mở của android 8
1.2 Kiến trúc android 9
1.2.1 Android Flatform 9
1.2.2 Tầng Linux Kernel 10
1.2.3 Native Labraries 10
1.2.4 Tầng Runtime 10
1.2.5 Tầng Application Framework 11
II MÔI TRƯỜNG LẬP TRÌNH 13
2.1 Các công cụ cần thiết để lập trình trên android và hướng dẫn cài đặt 13 2.1.1 Các công cụ cần thiết để lập trình 13
2.1.2 Chúng ta có 2 bước chính: Cài đặt JDK và Adroid Studio 13
2.2 Chu kỳ sống của ứng dụng android 13
2.2.1 Chu kỳ sống thành phần 13
2.2.2 Activity Stack 13
2.2.3 Các trạng thái của chu kỳ sống 14
2.2.4 Chu kỳ sống của ứng dụng 15
2.2.5 Các sự kiện trong chu kỳ sống của ứng dụng 15
Trang 42.2.6 Thời gian sống của ứng dụng 16
2.2.7 Thời gian hiển thị của Activity 16
2.2.8 Các hàm thực thi 16
2.3 Thành phần giao diện trong android 17
2.3.1 View 17
2.3.2 ViewGroup 17
2.4 Các control 18
2.4.1 Button 18
2.4.2 ListView 19
2.4.3 EditText 19
2.4.4 TextView 19
2.4.5 CheckBox 20
2.4.6 MenuOption 20
2.4.7 ContextMenu 21
2.4.8 Tùy biến control (Custom Control) 21
III LẬP TRÌNH TRÊN ANDROID 22
3.1 Giới thiệt Intents 22
3.1.1 Thành phần Intent 22
3.1.2 Sử dụng Intent khởi động cho Activities 23
3.1.3 Intent không tường minh thực thi Activity 23
3.1.4 Intent tường minh thực thi Activity 24
3.1.5 Sử dụng Intent để truyền thông tin ra ngoài Activity 24
3.2 Giới thiệu Adapter 24
3.2.1 Một số Adapter 25
3.2.2 Sử dụng Adapter hiển thị dữ liệu 25
3.3 Kỹ thuật lưu trữ dư liệu trong android 25
3.4 Lưu trữ dữ liệu ứng dụng một cách đơn giản 26
3.4.1 Tạo và lưu dữ liệu với Shared Preferences 26
Trang 53.4.2 Truy xuất Shared Preferences 27
3.5 Cơ sở dữ liệu trong android 27
3.5.1 Giới thiệu SQLite 27
3.5.2 Cursors và ContentValues 27
3.5.3 Sử dụng SQLiteOpenHelper 28
3.5.4 Truy xuất và tạo cơ sở dữ liệu không dung SQLiteHelper 28
3.5.5 Truy vấn cơ sở dữ liệu 29
3.5.6 Lấy kết quả từ Cursors 29
3.5.7 Thêm, cập nhật và xóa dòng 30
CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG 31
DEMO CHƯƠNG TRÌNH 31
I PHÂN TÍCH THIẾT KẾ HỆ THỐNG 31
1.1 Thực trạng 31
1.2 Mục tiêu của đề tài 31
1.3 Đối tượng 31
1.4 Ý nghĩa của phần mềm 31
1.5 Yêu cầu chức năng 32
1.6 Yêu cầu phi chức năng 33
II Biểu đồ 33
2.1 Biểu đồ UseCase 33
2.2 Biểu đồ trình tự 43
III DEMO CHƯƠNG TRÌNH 51
3.1 Giao diện chính của phần mềm 51
3.2 Giao diện chức năng luyện nghe 53
3.3 Giao diện chức năng luyện nói 55
3.4 Giao diện chức năng luyện đọc 56
3.5 Chức năng luyện viết 57
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 58
Trang 6TÀI LIỆU THAM KHẢO: 59 NHẬN XÉT CỦA GIÁO VIÊN 60
Trang 7DANH MỤC HÌNH ẢNH
Hình 1.1 Kiến trúc Android 12
Hình 2.1 UseCase tổng quan 34
Hình 2.2 UseCase tra cứu từ vựng 35
Hình 2.3 UseCase luyện nghe 36
Hình 2.4 UseCase luyện nói 37
Hình 2.10 Biểu đồ trình tự chức năng luyện nghe 43
Hình 2.11 Biểu đồ trình tự chức năng luyện nói44
Hình 2.12 Biểu đồ trình tự chức năng luyện đọc45
Hình 2.13 Biểu đồ trình tự chức năng luyện viết46
Hình 2.14 Biểu đồ trình tự học ngữ pháp47
Hình 2.15 Biểu đồ tuần tự kiểm tra - test48
Hình 2.16 Biểu đồ trình tự tra cứu từ vựng 49
Hình 2.17 Biểu đồ trình tự phương pháp học 50
Hình 2.18 Giao diện mở đầu của phần mềm 51
Hình 2.19 Giao diện tùy chọn chính 52
Hình 2.20 Danh sách các bài nghe 53
Hình 2.21 Màn hình nghe đoạn hội thoại54
Hình 2.22 Giao diện chức năng luyện nói 55
Hình 2.23 Chức năng đọc sách 56
Hình 2.24 Màn hình đang đọc chuyện "The sleeping beauty" 57Hình 2.25 Chức năng viết 57
Trang 9MỞ ĐẦU:
Với hơn 1,5 tỉ người dùng, tiếng Anh là ngôn ngữ phổ biến nhất thế giới Tiếng Anh được coi là ngôn ngữ chung quốc tế.Tất cả các nước phát triển đều sử dụng tiếng Anh Như vậy, tiếng Anh có thể coi là cầu nối để hội nhập với thế giới tốt hơn Với ý nghĩa lớn như vậy, em đã mạnh dạn làm đồ án với đề tài “xây dựng phần mềm học tiếng Anh tổng hợp trên hệ điều hành Android” để người Việt mình
có thêm một công cụ học tiếng Anh tiện lợi, hiệu quả
Trên cửa hàng Google Play đã có khá nhiều phần mềm học tiếng Anh cho thiết bị chạy Android như “tflat” nhưng chỉ tập trung vào từng khía cạnh riêng lẻ của tiếng Anh Do đó, em mạnh dạn làm đề tài xây dựng phần mềm học tiếng Anh tổng hợp cho thiết bị chạy Android Phần mềm tổng hợp 4 kỹ năng chính trong việc học tiếng Anh cũng giống như các ngôn ngữ khác đó là: nghe, nói, đọc, viết, và một số chức năng khác….Hy vọng phần mềm sẽ giúp ích cho người Việt học tốt tiếng Anh
Mặc dù đã cố gắng hết sức, tập trung tâm huyết làm đồ án này, em nghĩ rằng vẫn không tránh khỏi thiếu sót Em rất mong nhận được phản hồi, đóng góp quý báu từ thầy cô, bạn bè, và người dùng để phần mềm ngày càng hoàn thiện hơn
Em xin chân thành cảm ơn các thầy cô khoa Công nghệ thông tin đã tạo mọi điều kiện để em hoàn thành đề tài này Em xin cảm ơn chân thành giảng viên Th.S Nguyễn Văn Việt trực tiếp nhiệt tình hướng dẫn em làm đề tài này Lời cuối, em xin chúc thầy cô và các bạn sức khỏe, công tác tốt
Thái Nguyên, tháng 5 năm 2016
Sinh viênNguyễn Văn Phú
Trang 11CHƯƠNG 1: LÝ THUYẾT ANDROID
GIỚI THIỆU ANDROID
Khái niệm android
Trước hết Android là nền tảng phần mềm dựa trên mã nguồn mở Linux
OS (Kernel 2.6) cho máy di động và những phần mềm trung gian(middleware) để hổ trợ các ứng dụng mà người sử dụng cần đến Một cáchđịnh nghĩa không quá chuyên môn thì có thể coi Android là tên một nền tảng
mở cho thiết bị di động của Google (gồm hệ điều hành, middleware và một sốứng dụng cơ bản) Android sẽ đương đầu với một số hệ điều hành (viết tắt làHDH) dành cho thiết bị di dộng khác đang hâm nóng thị trường như Windows Mobile, Symbian và dĩ nhiên là cả OS X (iPhone)
Có thể nói một cách nôm na rằng Android là một HDH chạy trên thiết bị di động, cũng giống như Windows, Linux hay Mac chạy trên máy vi tính vậy
Android khác với các hệ điều hành chạy trên thiết bị di động khác
Android đã thu hút sự chú ý của giới công nghệ toàn cầu khi đứa con của Google sử dụng giấy phép mã nguồn mở Đó là sản phẩm kết tinh từ ý tưởng của khối Liên minh thiết bị cầm tay do Google dẫn đầu, gồm 34 thành viên là các công
ty hàng đầu về công nghệ và di động toàn cầu như Qualcomm, Intel, Motorola, Texas Instrucments, LG Electronics, các nhà mạng như T-Mobile, Sprint Nextel, NTT Comodo, và China Mobile
Các nhà phát triển có thể sử dụng miễn phí bộ Kit Android Software Developement để xây dựng các ứng dụng của mình
Đặc tính mở của 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ả các tính năng của một chiếc điện thoại cung cấp
Trang 12Nó được xay dựng để thực sự mở Ví dụ, một ứng dụng có thể 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 sử dụng bằng máy ảnh, giúp nhà phát triển tạo ra các ứng dụng phong phú cho người dử dụng Android được xây dựng trên mã nguồn mở Linux Kernel Hơn nữa, nó sử dụng 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 của thiết bị di động.
Android không phân biệt giữa các ứng dụng lõi và các ứng dụng của bên thứ 3 Tất cả có thể được xây dựng để có thể truy cập bằng khả năng của một thiết
bị di động cung cấp cho người sử dụng với một dải rộng các ứng dụng và dịch vụ Với các thiết bị xây dựng trên android, người dụng hoàn toàn có thể thích ứng với điện thoại đến lợi ích của họ Với android, một nhà phát triển có thể xây dựng một ứng dụng cho phép người dùng xem vị trí của bạn bè của họ và thông báo khi họ đang có trong vùng phụ cận cho phép kết nối
Android cung cấp truy cấp đến một loạt các thư viện công cụ hữu ích và có thể được sử dụng để xây dựng các ứng dụng phong phú Ví dụ, android cho phép các thiết bị giao tiếp với nhau tạo điều kiện cho đồng đẳng rich-to-peer trong ứng dụng xã hội Ngoài ra, android bao gồm một tập đầy đủ các công cụ đã được xây dựng công phu, với việc cung cấp nền tảng phát triển, với năng suất và cái nhìn sâu vào ứng dụng
Kiến trúc android.
“Understanding Android” là cách mà ta tiếp cận lập trình Android và thấu hiểu kiến trúc hệ thống của nó Chúng ta có thể không cần hiểu rõ cấu trúc của một
hệ điều hành nhưng chúng ta vẫn có thể lập trình trên hệ điều hành đó, đây là điều
mà nhà sản xuất muốn khi release SDK với một framework có sẵn của họ Như chúng ta đã biết điều này cũng có mặt tốt mặt xấu Framework là một nền tảng cao cấp dành cho lập trình viên, nó đều có giới hạn của nó, chúng ta có thể chỉ lập trình ứng dụng phổ biến, không nên tiến tới những ứng dụng cao cấp đi xâu vào hệ thống của hệ điều hành
Trang 13 Android Flatform.
Bao gồm hệ điều hành Android với dày đủ tính năng, các ứng dụng và các tầng trung gian để developer có thể mở rộng, tùy chỉnh hoặc thêm vào các component của họ
Có 4 tầng cơ bản trong hệ điều hành android: Application Framework, Android Runtime, Native Libraries, Linux Kernel Mỗi tầng làm việc đều nhờ sự giúp đỡ của tầng bên dưới
Tầng Linux Kernel.
Đây là nhân của hệ điều hành Android, mọi xử lý của hệ thống đều phải thông qua tầng này Linux Kernel cung cấp các trình điều khiển thiết bị phần cứng (driver) như: camera, USB, Wifi, Bluetooth, Display Power Management Android dựa trên phiên bản Linux 2.6 lựa chọn các tính năng cốt lõi như bảo mật, quản lý bộ nhớ, quản lý tiến trình, mạng stack, và các trình điều khiển phần cứng Kernel hoạt động như một lớp trừu tượng giữa phần cứng và phần mềm của hệ thống
Surface Manager: quản lý việc hiển thị và kết hợp đồ họa 2D và 3D
LibWebCore: Android dùng lại webkit engine cho việc render trình duyệt mặc định của HĐH android browser và cho dạng web nhúng (như HTML nhúng)
SGL – 2D engine
3D libraries – thư viện 3D dựa trên OpenGL ES 1.0 API, có nâng cấp tăng tốc
“hardware 3D acceleration”
Trang 14 FreeType – render bitmap và vector font.
SQLite – quản lý database và ứng dụng
Tầng Runtime.
Mỗi ứng dụng Android chạy trên một proccess riêng của Dalvik VM (máy ảo) Dalvik được viết để chạy nhiều máy ảo cùng lúc một cách hiệu quả trên cùng một thiết bị
Máy ảo Dalvik thực thi các file mang định dạng dex (Dalvik Excutable), định dạng này là định dạng đã được tối ưu hóa chỉ để chiếm một vùng nhớ vừa đủ
và nhỏ nhất có thể VM chạy các class (đã được compile trước đó bởi một trình biên dịch ngôn ngữ java), sở dĩ VM chạy được các class nhớ này nhờ chương trình
DX tool đã convert các định dạng dex
Tầng Application Framework
Đây là tầng mà Google xây dựng cho các developer để phát triển các ứng dụng của họ trên Android, chỉ bằng cách gọi các hàm API có sẵn mà Google đã viết để sử dụng các tính năng của phần cứng mà không cần hiểu cấu trúc các tầng phía dưới
Bằng cách cung cấp một nền phát triển mở Android 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 chỉ truy cập, các dịch vụ chạy nền, thiết bị hệ thống báo thức, thêm thông báo cho các thanh trạng thái, và nhiều hơn nữa
Tất cả các ứng dụng thường gồm một số các dịch vụ và hệ thống cơ bản sau:
View UI dùng để xây dựng các layout của ứng dụng bao gồm: list view, text field, button, dialog, form
Content Providers cho phép các ứng dụng có thể truy cập dữ liệu từ các ứng dụng khác, hoặc để chia sẻ dữ liệu của riêng ứng dụng
Trang 15 Resources Manager: cung cấp cách thức truy cập đến non-code resource như các asset, graphic, image, music, video,
Notification Manager: cho phép tất cả các ứng dụng hiển thị thông báo của mình trên hệ điều hành
Activity Manager: quản lý vòng đời của các ứng dụng
Hình 1.1 Kiến trúc Android
Trang 17 MÔI TRƯỜNG LẬP TRÌNH.
Các công cụ cần thiết để lập trình trên android và hướng dẫn cài đặt.
Các công cụ cần thiết để lập trình.
Hệ điều hành: window 7, 8, 8.1 và 10, Ubuntu
Công cụ lập trình: JDK và Android Studio
Chúng ta có 2 bước chính: Cài đặt JDK và Adroid Studio.
Bước 1: Vào địa chỉ
http://www.oracle.com/technetwork/java/javase/downloads/index.htmlđể
download JDK Download xong tiến hành cài đặt
Bước 2: Vào địa chỉ
http://developer.android.com/intl/vi/sdk/index.html#topđể download
Android Studio và tiến hành cài đặt
Chu kỳ sống của ứng dụng android.
Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng dụng khi codes cần được xây dựng, khởi chạy và sẽ còn chạy cho đến khi:
Nó không phụ thuộc
Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác.Một sự khác thường và đặc tính cơ bản của Android là thời gian sống của tiến trình ứng dụng không được điều khiển trực tiếp bởi chính nó Thay vào đó, nó được xác định bởi hệ thống qua một kết hợp của:
Những phần của ứng dụng mà hệ thống biết đang chạy
Những phần đó quan trọng như thế nào đối với người dùng
Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống
Chu kỳ sống thành phần.
Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu khởi tạo cho đến thời điểm kết thúc, đôi lúc chúng ta có thể actice (visible
Trang 18hoặc invisible) hoặc inactive.
Activity Stack.
Bên trong hệ thống các activity được quản lý như một activity stack Khi một activity mới được start, nó được đặt ở đỉnh của stack và trở thành activity đang chạy, activity trước sẽ ở dưới activity mới và sẽ không thấy trong suốt quá trình activity mới tồn tại
Nếu người dùng nhấn nút Back thì activity kế tiếp của stack sẽ di chuyển lên trên và trở thành active
Các trạng thái của chu kỳ sống.
Trang 19có thể bị kết thúc bởi hệ thống trong trường hợp thiếu vùng nhớ.
Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác Nó vẫn còn trạng thái và thông tin thành viên trong nó Người dùng không thấy nó và thường bị loại bỏ trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác
Trang 20 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 paused 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 đó
Chu kỳ sống của ứng dụng.
Trong một ứng dụng Android có chứa nhiều thành phần và mỗi thành phần đều có một chu kỳ sống riêng Ứng dụng chỉ được gọi là kết thúc khi tất cả các thành phần trong ứng dụng kết thúc Activity là một thành phần cho phép người dùng giao tiếp với ứng dụng Tuy nhiên khi tất cả các activity kết thúc và người dùng không còn giao tiếp được với ứng dụng nữa không có nghĩa là ứng dụng đã kết thúc Bởi vì ngoài activity là thành phần có khả năng tương tác với người dùng còn có các thành phần khác có khả năng tương tác với người dùng như Service, Broadcast receier Có nghĩa là những thành phần không tương tác với người dùng có thể chạy background dưới sự giám sát của HDH cho đến khi người dùng tự tắt chúng
Các sự kiện trong chu kỳ sống của ứng dụng.
Nếu một Activity được tạm dừng hoặc dừng hẳn, hệ thống có thể bỏ qua thông tin của nó từ vùng nhớ bởi việc gọi hàm finish() của nó, hoặc đơn giản là kill tiến trình của nó Khi nó được hiển thị lần nữa với người dùng, nó phải được hoàn toàn restart và phục hồi lại trạng thái trước đó Khi một Activity chuyển qua chuyển lại giữa các trạng thái, nó phải khai báo việc chuyển của nó bằng việc gọi hàm transition
Tất cả các phương thức là những móc nối mà chúng ta có thể override để
Trang 21làm tương thích công việc trong ứng dụng khi thay đổi trạng thái Tất cả các Activity bắt buộc phải có onCreate() để khởi tạo ứng dụng Nhiều Activity sẽ cũng thực hiện onPause() để xác nhận việc thay đổi dữ liệu và mặt khác chuẩn bị dừng hoạt động với người dùng.
Thời gian sống của ứng dụng.
Bảy phương thức chuyển tiếp định nghĩa trong chu kỳ sống của một Activity Thời gian sống của một Activity diễn ra giữa lần gọi onCreate() đến trạng thái cuối cùng gọi onDestroy() Một Activity khởi tạo toàn bộ trạng thái toàn cục trong onCreate(), giải phóng các tài nguyên đang tồn tại trong onDestroy()
Thời gian hiển thị của Activity.
Visible lifetime của một activity diễn ra giữa lần gọi một onStart() cho đến khi gọi onStop() Trong suốt khảng thời gian này người dùng có thể lấy activity hiển thị trên màn hình, có nghĩa là nó không bị foreground hoặc đang tương tác với người dùng Giữa 2 phương thức người dùng có thể duy trì tài nguyên để hiển thị activity đến người dùng
Các hàm thực thi.
OnCreate( ): hàm này được gọi khi lớp Activity được khởi tạo, dùng để thiết lập giao diện ứng dụng và thực thi những thao tác cơ bản
onStart(): hàm này được gọi khi lớp ứng dụng xuất hiện trên màn hình
onResume(): hàm được gọi ngay sau OnStart hoặc khi người dùng focus ứng dụng, hàm này sẽ đưa ứng dụng lên top màn hình
onPause(): hàm được gọi khi hệ thống đang focus đến 1 activity trước đó
onStop(): hàm được gọi khi một activity khác được khởi động và focus
onRestart(): đưọc gọi khi ứng dụng chuyển sang onStop(), nhưng muốn khởi động lại bằng onStart()
Trang 22
Trang 23 Thành phần giao diện trong android
View
Trong android giao diện người dùng thường được xây dựng từ các đối tượng View Trong android flatform, các screen luôn được bố trí theo một kiểu cấu trúc phân cấp như hình trên 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 gọi một hàm là setContentView(R.layout.main), hàm này sẽ load giao diện từ file main.xml để phân tích thành mã bytecode
ViewGroup
ViewGroup là sự mở rộng của class view hay nói cách khác ViewGroup chính là các WidgetLayout được dùng để bố trí các đối tượng khác trong một screen Có các loại ViewGroup sau:
Linear layout: dùng để bố trí các thành phần giao diện theo chiều ngang hay chiều dọc nhưng trên một line duy nhất mà không có xuống dòng
Frame layout: được dùng để bố trí các đối tượng theo kiểu giống như các layout trong Photoshop Những đối tượng nào thuộc layer bên dưới sẽ bị che khuất bởi các đối tượng khác thuộc layer nằm trên Frame layout thường được sử dụng muốn tạo các đối tượng có khung hình bền ngoài chẳng hạn như contact image button
Table layout: được sử dụng khi cần thiết kế một table chứa dữ liệu hoặc cần bố trí các widget theo row hoặc column
Absolute Layout: được sử dụng để bố trí các widget vào vị trí bất kỳ trong layout dựa vào 2 thuộc tính tọa độ x, y Tuy nhiên, kiểu layout này rất ít khi được sử dụng bởi tọa độ của các đối tượng luôn luôn cố định và không
Trang 24điều chỉnh được khoảng cách giữa các đối tượng Khi chuyển đối tượng sang màn hình khác với màn hình thiết kế ban đầu thig vị trí của các đối tượng sẽ không còn được chính xác như ban đầu.
Relative layout: cho phép bố trí các widget theo một trục đối xứng ngang hoặc dọc Để đặt được đúng vị trí thì các widget cần được xác định mối quan hệ ràng buộc nào đó với các widget khác Các ràng buộc này là các ràng buộc trái, phải, trên, dưới so với một weidget hoặc so với layout parrent Dựa vào những mối ràng buộc đó mà relative layout cũng không phụ thuộc vào kich thước của screen thiết bị Ngoài ra, nó còn có ưu điểm giúp tiết kiệm các layout sử dụng nhằm mục đích giảm tài nguyên sử dụng khi load đồng thời đẩy nhanh quá trình xử lý
Các control
Button
Sở dĩ widget button được giới thiệu đầu tiên trong số các widget khác là
vì đây là đối tượng có thể nói là được dùng nhiều nhất trong hầu hết các ứngdụng Android
Để thiết kế giao diện với một button ta có 2 cách như sau:
<Button Android:layout_width="wrap_content"
ListView.
Trang 25Đượ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 thông 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 phải có 3 yếu tố chính:
Data Source: có thể là một array list, hashmap hoặc bất kỳ một cấu trúc
dữ liệu kiểu danh sách nào đó
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ị trên List View
List View: là đối tượng để thể hiện 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 đó
EditText
Trong android, đối tượng Edit Text được xử dụng như một Text Field hoặc một Text Box Giá trị android:singleLine bằng false, edittext sẽ là một TextBox, ngược lại nó là một TextField
Trang 26 TextView
TextView có tác dụng là để hiển thị văn bản
<TextView Android:layout_width="fill_parent"
Android:layout_height="wrap_conte nt" Android:text="Hello World!
cở chữ, Android:gravity="" dùng để canh chỉnh cho đoạn text Nếu muốn tìm
hiểu thêm, hãy gõ Android: sau đó nhấn Crtl+ Space để tìm hiểu thêm về các
Trang 28 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 Button trên màn hình Để 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
Phương thức: 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
Trang 29 Tùy biến control (Custom Control)
Chúng ta đã biết andoid đã cung cấp cho chúng ta rất nhiều Control hứu ích Tuy nhiên, ứng dụng của chúng ta đôi khi cũng cần những control do chính chúng
ta tạo ra để đáp ứng các nhu cầu của ứng dụng mà việc sử dụng các control có sẵn rất khó khăn
LẬP TRÌNH TRÊN ANDROID
Giới thiệt Intents
Intent là cầu nối giữa các Activity Intent chính là người đưa thư, giúp
Trang 30chúng ta triệu gọi cũng như truyền các dữ liệu cần thiết để thực hiện một activity
từ activity khác
Thành phần Intent
Thực ra Intent là một cấu trúc dữ liệu được mô tả trong android.content.Intent
Các action định nghĩa sẵn:
Trang 31Tự định nghĩa action:
Về nguyên tắc chúng ta có thể đặt tên action của một intent là bất cứthứ gì theo chuẩn đặt tên thông thường, hay thậm chí dùng luôn hằngaction đã định nghĩa sẵn như ACTION_VIEW (hay
“Android.intent.action.VIEW”) Cái tên VIEW thực chất chỉ là mộttên gợi tả, chúng ta có thể dùng nó với mục đích thực hiện mộtactivity để … gửi mail! Tuy nhiên điều đó rõ ràng là rất “ngớ ngẩn”.Thay vào đó ta hãy dùng ACTION_SEND hay ACTION_SENDTO
Việc đặt tên action cho intent đúng tên gợi tả còn có một ý nghĩa khác
đó là app của chúng ta có thể được triệu gọi từ một app khác Ví dụchúng ta viết một app có activity đáp ứng intent ACTION_SEND và đểchia sẻ một bức ảnh lên trang web của chúng ta (giống như ta làmvới Facebook, Flickr etc.) Khi đó có thể app của chúng ta sẽ là mộtlựa chọn chia sẻ ảnh của người dùng điện thoại
Sử dụng Intent khởi động cho Activities
Phổ biến nhất trong Intents là việc liên kết dữ liệu giữa các thành phần ứng dụng, Intents được dùng để bắt đầu, dừng lại và chuyển tiếp giữa các
Trang 32Activities trong ứng dụng.
Để mở một ứng dụng khác trong một ứng dụng có sẵn thì chúng ta gọi startActivity như sau: startActivity(myIntent);
Để theo dõi thông tin phản hồi từ phương thức mở ta sử dụng phương thức : startActivityForResult(Intent)
Intent không tường minh thực thi Activity
Trong trường hợp này intent không chỉ định một lớp cụ thể mà thay vào đó dùng các dữ liệu khác (action, data, type, etc ) và để hệ thống tự quyết định xem lớp nào (app nào) sẽ thích hợp để đáp ứng các Intent đó
Thông tin của action với category của activity trong một app đáp ứng intent
đó phải được khai báo trong AndroidManifast của app (AndroidManifast.xml) dưới dạng Intent – filter (tất nhiên nếu chúng ta muốn gọi một built-in action thì ta không cần quan tâm đến vấn đề này)
Intent tường minh thực thi Activity
Như đã trình bày ở trên, Intent có thể dùng thuộc tính phụ component để chỉ đích danh tên lớp sẽ được thực thi Activity Để thực hiện điều này, lớp Intent cung cấp các hàm đó là setComponent(Component Name) và setClass(Context,class) và setClassName(Context,String)
Trang 33Chỉ được dùng để gọi các Activities trong cùng một app.
Sử dụng Intent để truyền thông tin ra ngoài Activity
Là một cơ chế truyền tin cấp hệ thống, có khả năng gửi tin đến một tiến trình Chúng ta có thể sử dụng Broadcast Receivers để nhận, để trả lời hoặc phát đi các dữ liệu mà chúng ta muốn
Broadcast Intent dùng để thông báo cho các ứng dụng khác các sự kiện của
hệ thống hay ứng dụng, mở ra các mô hình lập trình hướng sự kiện giữa các ứng dụng Broadcast Intent giúp cho ứng dụng của chúng ta cởi mở hơn bởi vì nó phát
đi một sự kiện băng cách sử dụng Intent
Cách thực hiện gửi dữ liệu dung Intent trong Activity
Broadcast Intent thực tế khá đơn giản, trong các thành phần ứng dụng của chúng ta, chúng ta xây dựng một Intent mà chúng ta muốn quảng bá bằng cách sử dụng sentBroadcast để gửi đi
Nhận dữ liệu với BroadcastReceiver
BroadcastReceivers được dùng để nhận dữ liệu từ Broadcast Intents, để kích hoạt BroadcastReceivers thì nó cần phải được đăng ký hoăc khai trong code hoặc trong Mainifest và chúng ta cần phải sử dụng Intents Filter để xác định Intent được phép gửi dữ liệu đến
Giới thiệu Adapter
Adapter là cầu nối để liên kết dữ liệu với giao diện người dùng
Trang 34 Một số Adapter
Để sử dụng được adapter ta phải kế thừa lớp trừu tượng AdapterView, và chúng ta cũng có thể tạo ra adapter tùy ý băng cách này
ArrayAdapter: Là một lớp chung để gắn các Adapter Views vào một
mảng đối tượng, theo mặc định thì ArrayAdapter liên kết cá giá trị toString củatừng đối tượng ra TextView trong layout, chúng ta có thể thay thế TextViewbằng các điều khiển khác phức tạp hơn bằng cách sử dụng kỹ thuật Overridingphương thức getView()
SimpleCursorAdapter: Dùng để liên kết các View với con trỏ để trả về
câu truy vấn cho Content Provider, nó được định nghĩa trong file XML layout
và liên kết các giá trị ràng buộc bên trong mỗi cột kết quả với View tronglayout
Sử dụng Adapter hiển thị dữ liệu
Để áp dụng một adapter đến một class adapterView ta chỉ cần gọi phương thức setAdapter của View đưa vào trong tập tin adapter được minh họa trong đoạn code:
ArrayList<String> myStringArray = new ArrayList<String>(); ArrayAdapter<String> myAdapterInstance;
Kỹ thuật lưu trữ dư liệu trong android
Trang 35Các kỹ thuật lưu trữ dữ liệu trong Android nhanh chóng, gọn nhẹ và hiệu quả
và mạnh mẽ:
Shared Preferences: Khi muốn lưu trữ UI state ,user preferences hay application setting, chúng ta muốn có một cơ chế gọn nhẹ để lưu trữ một tập hợp các giá trị được biết đến, Shared Preferences cho phép chúng ta lưu trữ nhóm của key/value của dữ liệu gốc
Files: Android cho phép tạo và tải các tập tin trên thiết bị di động
SQLite Databases: quản lý cấu trúc dữ liệu là cách tốt nhất Android cung cấp thư viện quan hệ cơ sở dữ liệu SQLite, mỗi ứng dụng có thể tạo ra một cơ sở dữ liệu của mình để nó kiểm soát hoàn toàn trên đó
Content Providers: Thay vì theo cơ chế lưu trữ riêng ,Content Providers cung cấp nội dung cho phép đưa ra một giao diện để sử dụng và chia sẻ
dữ liệu các nhân Chúng ta có thể truy cập ContentProvider để sử dụng
hệ thống được phép
Lưu trữ dữ liệu ứng dụng một cách đơn giản
Có 2 cơ chế lưu dữ liệu trong android là kiểu lưu dữ liệu name/value hoặc key/value
Tạo và lưu dữ liệu với Shared Preferences
Để tạo hoặc sửa đổi dữ liệu dùng shared preferences chúng ta gọi hàm getSharedPreferences trong ứng dụng Context, đưa vào tên Shared Preferences muốn thay đổi, Shared Preferences sẽ chia sẻ giữa các thành phần dữ liệu trong ứng dụng hiện sử dụng nó nhưng không có sẵn trong ứng dụng khác
Để sửa đổi Shared Preferences Chúng ta gọi lớp Shared Preferences.Editor, nhận đối tượng Editor bằng cách gọi edit trong đối tượng ShardePreferences muốn thay đổi Để sửa, lưu gọi commit trên Editor,như doạn code sau:
public static final String MYPREFS =
“mySharedPreferences”; protected void
Trang 36// tạo đối tượng lưu trữ và truy xuất dữ liệu shared preference int mode = Activity.MODE_PRIVATE;
SharedPreferences mySharedPreferences = getSharedPreferences(MYPREFS, mode);
// nhận về một editor để sửa đổi shared preferences.
SharedPreferences.Editor editor = mySharedPreferences.edit(); // lưu trữ vào shared preference
Truy xuất Shared Preferences
Để lưu truy cập Shared Preferences thì cũng dùng phương thức getSharedPreferences, đưa vào tên của Shared Preferences mà chúng ta muốn truy cập, dùng phương thức type-safe get<type> để trích xuất các giá trị lưu
Cơ sở dữ liệu trong android
Android cung cấp đầy đủ các quan hệ cơ sở dữ liệu thông qua thư viên SQLite mà không áp đặt bất kỳ hạn chế nào Sử dụng SQLite có thể tạo cơ sở dữ liệu quan hệ độc lập cho mỗi ứng dụng
Tất cả các co sở dữ liệu trong android được lưu trữ trong thư mục /data/data/<package name>/database để chia sẻ cơ sở dữ liệu qua các ứng dụng ta dùng Content Provider
Những phần sau đây sẽ tập trung vào tính thiết thực của việc tạo và quản lý
cơ sở dư liệu SQLite trong Android
Giới thiệu SQLite
SQLite là hệ thống quản lý các cơ sở dữ liệu (RDBMS), nó cũng được coi là:
Trang 37Content Values là một đối tượng sử dụng để chèn các dòng mới vào bảng
cơ sở dữ liệu, mỗi đối tượng Content Values đại diện giá trị cho một dòng
Truy vấn trong Android được trả về là đối tượng Cursor Thay vì giải nén và trả lại một bản sao của các giá trị kết quả, Cursors hành động như con trỏ đến một tập hợp các dữ liệu nằm bên dưới Cursor quản lý việc kiểm soát vị trí (row) trong tập kết quả truy vấn cơ sở dữ liệu
Các lớp con trỏ bao gồm một số chức năng để điều hướng kết quả truy vấn bao gồm, nhưng không giới hạn, những điều sau đây:
moveToFirst :chuyển con trỏ tới dòng đầu tiên
moveToNext : chuyển con trỏ tới dòng tiếp theo
moveToPrevious: chuyển con trỏ tới dòng duyệt trước đó
getCount :trả về số dòng của kết quả truy vấn
Trang 38startManagingCursor vào kết thúc vòng đời con trỏ thì gọi: stopManagingCursor.
Sử dụng SQLiteOpenHelper
SQLiteOpenHelper là một lớp trừu tượng và là môi trường tốt để tạo lập, truy xuất và cập nhật cơ sử dữ liệu Gọi getReadableDataBases hoặc getWriteableDataBases để mở hoặc trả về dữ liệu trong trường hợp đọc ghi trong
cơ sở dữ liệu như sau:
dbHelper = new myDbHelper(context, DATABASE_NAME, null,
db = dbHelper.getReadableDatabase();
}
Truy xuất và tạo cơ sở dữ liệu không dung SQLiteHelper
Chúng ta có thể truy xuất đến cơ sở dữ liệu mà không cần sử dụng lớp SQLiteHelper với phương thức openorCreateDataBases trong ứng dụng Context như sau:
private static final String DATABASE_NAME =
“myDatabase.db”; private static final String DATABASE_TABLE = “mainTable”; private static final String DATABASE_CREATE =
“create table “ + DATABASE_TABLE +
“ ( _id integer primary key autoincrement,”
+ “column_one text not null);”;
SQLiteDatabase myDatabase; private void createDatabase() {
(DATABASE_NAME, Context.MODE_PRIVATE, null); myDatabase.execSQL(DATABASE_CREATE);
}
Trang 39 Truy vấn cơ sở dữ liệu
Ví dụ:
// trả về tất cả các cột 1,3 và ID String[] result_columns = new String[] {KEY_ID, KEY_COL1, KEY_COL3}; Cursor allRows = myDatabase.query(true, DATABASE_TABLE, result_columns,
null, null, null, null, null, null);
//trả về tất các cột với cột 3 có giá trị định sẵn // sắp xếp theo cột 5
String where = KEY_COL3 + “=” + requiredValue; String order = KEY_COL5;
Cursor myResult = myDatabase.query(DATABASE_TABLE, null, where, null, null, null, order);
Lấy kết quả từ Cursors
Thêm, cập nhật và xóa dòng
Thêm:
ContentValues newValues = new ContentValues();
//đưa giữ liệu vào content newValues.put (COLUMN_NAME, newValue); [ các cột khác tương tự ]
// thêm vào CSDL myDatabase.insert(DATABASE_TABLE, null, newValues);
Trang 40Cập nhật:
ContentValues updatedValues = new ContentValues();
// đưa giữ liệu vào content updatedValues.put (COLUMN_NAME, newValue);
[ các cột khác tương tự ]
String where = KEY_ID + “=” + rowId;
// cập nhật.
myDatabase.update(DATABASE_TABLE, updatedValues, where, null);
Xóa dòng:
myDatabase.delete(DATABASE_TABLE, KEY_ID + “=” + rowId, null);