Ban đầu nó đuợc phát triển bởi Android Inc sau đó được Google mua lại và gần đây nó trở thành một trong những phần mềm đứng đầu của liên minh OHA với khoảng 78 thành viên bao gồm cả nhà
Trang 1Khánh Hòa, năm 2015
Trang 2CÁN BỘ HƯỚNG DẪN
TH.S NHỮ KHẢI HOÀN
Khánh Hòa, năm 2015
Trang 3LỜI CẢM ƠN Trong quá trình thực hiện đề tài: “Nghiên cứu thiết kế chế tạo bộ điều khiển Led ma trận bằng Smartphone chạy hệ điều hành Android” em xin chân thành
cảm ơn đến quý Thầy, Cô giáo trong bộ môn, khoa Điện – Điện tử đã tận tình giảng dạy, cung cấp cho em nhiều kiến thức trong suốt quá trình học tập tại trường đại học Nha Trang
Xin gửi lời cảm ơn sâu sắc đến Thầy giáo Nhữ Khải Hoàn đã trực tiếp hướng dẫn đồ án cho em Cảm ơn Thầy đã tận tình chỉ bảo, hướng dẫn, cung cấp những tài liệu, kinh nghiệm, bài học quý giá và tạo điều kiện thuận lợi cho em hoàn thành đồ
Xin chân thành cảm ơn!
Nha Trang, tháng 06 năm 2015
Sinh viên
Nguyễn Khắc Huy
Trang 4LỜI MỞ ĐẦU
Lý do chọn đề tài
Ngày nay với sự phát triển mạnh của khoa học – công nghệ, đời sống con người ngày càng được nâng cao rõ rệt nhờ ứng dụng các thành tựu của khoa học – công nghệ Nó cũng thúc đẩy sự phát triển mạnh mẽ nhiều lĩnh vực trong đó có lĩnh vực Điện – Điện tử
Những chiếc điện thoại thông minh Smartphone ngày càng được cải tiến không chỉ phục vụ nhu cầu nghe, gọi, xem phim… mà nó còn thay thế được các chức năng của một chiếc máy tính (PC) Ưu điểm của những chiếc điện thoại này là nhỏ gọn, bộ
vi xử lý tốc độ ngày càng cao, bộ nhớ trong lớn, tích hợp đầy đủ các ứng dụng cơ bản, kết nối không dây Bluetooth, Wifi, 3G, sử dụng được nhiều giờ liên tục… Chính
vì vậy, Smartphone rất được ưa chuộng và dần dần được thay thế cho máy tính phục
vụ các ứng dụng cơ bản Hầu hết các thiết bị di động đều tích hợp chuẩn truyền thông Bluetooth Nếu như USB giúp chuẩn hóa các kết nối giữa các thiết bị ngoại vi với máy tính (PC), thì Bluetooth có thể coi như chuẩn không dây tiêu chuẩn giúp kết nối hầu hết các thiết bị phụ trợ thông qua giao tiếp không dây như tai nghe, chuột, bàn phím, máy in, loa Sử dụng Bluetooth trong các thiết bị nhúng có thể giúp chúng ta kết nối không dây dễ dàng với máy tính, điện thoại di động, máy tính bảng, laptop
Từ đó mở ra rất nhiều ứng dụng điều khiển, giao tiếp, kết nối giữa các hệ thống nhúng
và thiết bị di động
Trong đề tài này em sử dụng Smartphone chạy hệ điều hành Android để điều khiển Led ma trận thông qua vi điều khiển AVR bằng Bluetooth Điều khiển Led ma trận bằng Smartphone rất thuận tiện trong việc cập nhật dữ liệu, tiết kiệm được thời
gian, tính thẩm mỹ cao, không cần sử dụng máy tính
Mục tiêu của đề tài
Thiết kế được bảng quang báo Led ma trận qua Bluetooth
– Phải hiển thị được các thông tin cần thiết,
– Bảng quang báo Led ma trận cập nhật được nội dung mỗi khi truyền dữ liệu từ Smartphone chạy hệ điều hành Android qua Bluetooth
Trang 5 Xây dựng giao diện điều khiển Led ma trận trên Smartphone Android truyền
dữ liệu cho vi điều khiển thông qua mô đun Bluetooth HC-06
Đối tượng và phạm vi nghiên cứu
– Đối tượng nghiên cứu
Nghiên cứu mô đun Led ma trận P10 màu đỏ, mô đun Bluetooth HC-06, vi điều
khiển AVR, hệ điều hành Android
– Phạm vi nghiên cứu
Tìm hiểu, thiết kế bo mạch điều khiển Led ma trận, ứng dụng mô đun Bluetooth HC-06, mô đun Led ma trận P10 để thiết kế bảng quang báo ma trận 32 x 128 màu
đỏ, hiển thị được số và chữ cái tiếng việt có dấu truyền thông qua Bluetooth
Phương pháp nghiên cứu
– Phương pháp lý thuyết: Cách cấp nguồn và nguyên lý hoạt động của mô đun Led ma trận, kỹ thuật điều khển Led ma trận, kỹ thuật lập trình Android
– Phương pháp thực nghiệm: Thiết kế, chế tạo mạch điều khiển, bảng quang
báo Led ma trận, xây dựng giao diện trên Android cho Smartphone Kết nối, chạy
thử, kiểm tra, sửa chữa hoàn thiện
Nội dung nghiên cứu
– Nghiên cứu các mô đun Led ma trận, mô đun Bluetooth HC-06
– Tìm hiểu Smartphone, nghiên cứu ứng dụng hệ điều hành Android và viết giao diện điều khiển Led ma trận dựa trên Android
– Thiết kế bảng quang báo bằng mô đun Led ma trận
– Thiết kế bộ điều khiển Led ma trận
– Đánh giá kết quả đạt được và phương hướng phát triển của đề tài
Sản phẩm này không chỉ phục vụ cho đào tạo mà còn được ứng dụng vào thực tiễn xã hội Vì hiện nay quang báo bằng Led rất phổ biến, nó đáp ứng được các nhu cầu phát triển xã hội, bởi tính thẩm mỹ, độ bắt mắt cao, dễ dàng cập nhật nội dung, tiện ích mà Led mang lại
Bố cục đồ án
- Chương 1: Tổng quan về hệ điều hành Android và Led trong quang báo
Trang 6- Chương 2: Thiết kế phần cứng hệ thống
- Chương 3: Phần mềm lập trình hệ thống
- Kết luận và phương hướng phát triển đề tài
Mặc dù đã hết sức nỗ lực, cố gắng trong quá trình thực hiện đồ án nhưng với trình độ, kiến thức, kinh nghiệm thực tế còn hạn chế và thời gian có hạn nên không thể tránh khỏi những sai sót nhất định Do đó, em rất mong muốn nhận được sự góp
ý, chỉ bảo của quý Thầy, Cô và ý kiến đóng góp của bạn bè để đồ án được hoàn thiện hơn
Em xin chân thành cảm ơn!
Trang 7MỤC LỤC
LỜI CẢM ƠN i
LỜI MỞ ĐẦU ii
MỤC LỤC v
DANH SÁCH CÁC HÌNH VẼ viii
DANH SÁCH CÁC BẢNG BIỂU x
DANH SÁCH CÁC LƯU ĐỒ xi
DANH SÁCH CÁC TỪ VIẾT TẮT xii
CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ANDROID VÀ LED TRONG QUANG BÁO 1
1.1 Tổng quan về hệ điều hành Android 1
1.1.1 Giới thiệu về hệ điều hành Android 1
1.1.2 Đặc điểm của hệ điều hành Android 2
1.1.3 So sánh giữa các hệ điều hành Smartphone 4
1.2 Kiến trúc hệ điều hành Android 5
1.2.1 Lớp ứng dụng 6
1.2.2 Lớp khung tổ chức ứng dụng 6
1.2.3 Lớp thư viện 7
1.2.3.1 Library 7
1.2.3.2 Android runtime 8
1.2.4 Lớp nhân Linux phiên bản 2.6 8
1.3 Các thành phần của ứng dụng Android 9
1.3.1 Activity 10
1.3.1.1 Khái niệm Activity 10
1.3.1.2 Vòng đời của Activity 10
1.3.2 Service 13
1.3.2.1 Khái niệm Service 13
1.3.2.2 Vòng đời của một Service 13
1.3.3 Inten 15
Trang 81.3.4 Broadcast Receivers 16
1.3.5 Content Provider 17
1.3.6 Notification 18
1.4 Cấu trúc một Project Android 18
1.4.1 Cấu trúc một Project Android trong Eclipse 18
1.4.2 Một số tập tin quan trọng của Android 20
1.4.2.1 MainActivity.java 20
1.4.2.2 AndroidManifest.xml 21
1.4.2.3 Strings.xml 23
1.4.2.4 R.java 23
1.4.2.5 Activity_main.xml 25
1.5 Tổng quan về Led 26
1.5.1 Khái niệm về Led 26
1.5.2 Lịch sử hình thành Led 26
1.5.3 Cấu tạo và nguyên lý hoạt động của đèn Led 27
1.5.3.1 Cấu tạo của đèn Led 27
1.5.3.2 Nguyên lý hoạt động của đèn Led 27
1.5.4 Ưu nhược điểm và ứng dụng của đèn Led 28
1.5.4.1 Ưu nhược điểm của đèn Led 28
1.5.4.2 Ứng dụng của đèn Led 29
CHƯƠNG 2: THIẾT KẾ PHẦN CỨNG HỆ THỐNG 31
2.1 Tổng quát về phần cứng 31
2.1.1 Sơ đồ tổng quát phần cứng 31
2.1.2 Chức năng của các khối 31
2.2 Một số linh kiện sử dụng trong mạch 33
2.2.1 Vi điều khiển Atmega 32 33
2.2.1.1 Giới thiệu chung về Atmega 32 33
2.2.1.2 Cấu trúc Atmega 32 34
2.2.1.3 Cấu trúc bộ nhớ 36
Trang 92.2.1.4 Thanh ghi trạng thái của AVR 38
2.2.1.5 Các cổng vào ra 39
2.2.2 IC chốt dịch 74HC595 41
2.2.3 IC giải mã địa chỉ 74HC138 43
2.3 Phân tích hệ thống 45
2.3.1 Nguyên lý hoạt động của bảng quang báo Led ma trận 45
2.3.2 Phân tích hệ thống 45
2.4 Thiết kế phần cứng 46
2.4.1 Khối hiển thị 46
2.4.2 Khối điều khiển trung tâm 50
2.4.3 Khối giao tiếp giữa vi điều khiển và Smartphone 51
CHƯƠNG 3: PHẦN MỀM LẬP TRÌNH HỆ THỐNG 54
3.1 Các phần mềm lập trình sử dụng cho vi điều khiển 54
3.1.1 Phần mềm Proteus 8.0 54
3.1.2 Phần mềm Codevision AVR V2.05.0 55
3.2 Công cụ hỗ trợ lập trình Android 56
3.2.1 Java SE Development Kit 56
3.2.1.1 Tổng quát về Java SE Development Kit 56
3.2.1.2 Cài đặt Java SE Development Kit 56
3.2.2 Eclipse IDE 58
3.2.2.1 Tổng quát Eclipse IDE 58
3.2.2.2 Tích hợp Android SDK Manager vào Eclipse 59
3.2.3 Android Virtual Device 61
3.3 Lưu đồ thuật toán điều khiển bảng Led ma trận
65
3.4 Giao diện trên Smartphone Android giao tiếp với vi điều khiển 68
KẾT LUẬN VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN ĐỀ TÀI 69
TÀI LIỆU THAM KHẢO 71
PHỤ LỤC 72
Trang 10DANH SÁCH CÁC HÌNH VẼ
Hình 1.1: Mô hình kiến trúc nền tảng Android 5
Hình 1.2: Vòng đời của một Activity 12
Hình 1.3: Sơ đồ chuyển đổi trạng thái của Service 14
Hình 1.4: Chức năng của Intent 15
Hình 1.5: Ví dụ về Notification 18
Hình 1.6: Cấu trúc hình cây của Project Android 19
Hình 1.7: Hình ảnh Led thực tế 26
Hình 1.8: Cấu tạo và nguyên lý hoạt động của Led 27
Hình 1.9: Ứng dụng của đèn Led trong thực tế 29
Hình 2.1: Sơ đồ khối tổng quát hệ thống phần cứng 31
Hình 2.2: Atmega 32 loại chân cắm 33
Hình 2.3: Atmega 32 loại chân dán 33
Hình 2.4: Cấu trúc bên trong của vi điều khiển AVR 35
Hình 2.5: Cấu trúc bộ nhớ vi điều khiển Atmega 32 36
Hình 2.6: Thanh ghi 8 bit của vi điều khiển Atmega 32 37
Hình 2.7: Cấu trúc thanh ghi trạng thái của AVR 38
Hình 2.8: Hình ảnh thực tế IC 74HC595 41
Hình 2.9: Sơ đồ chân IC 74HC595 41
Hình 2.10: Ghép nối tiếp các IC 74HC595 43
Hình 2.11: Hình ảnh thực tế IC 74HC138 43
Hình 2.12: Sơ đồ chân IC 74HC138 43
Hình 2.13: Nguyên tắc tạo ảnh cho Led ma trận 45
Hình 2.14: Mô đun Led ma trận P10 47
Hình 2.15: Sơ đồ chân mô đun Led P10 47
Hình 2.16: Sơ đồ nguyên lý kết nối mô đun Led P10 với vi điều khiển Atmega32
48
Hình 2.17: Sơ đồ mạch in kết nối mô đun Led P10 với vi điều khiển Atmega32 48
Hình 2.18: Nguyên lý đưa dữ liệu vào IC 74HC595 của Led ma trận P10 48
Trang 11Hình 2.19: Nguyên lý quét mô đun Led ma trận P10 49
Hình 2.20: Hình ảnh thực tế IC 74HC254 49
Hình 2.21: Sơ đồ chân IC 74HC254 49
Hình 2.22: Sơ đồ nguyên lý mạch điều khiển trung tâm Atmega 32 50
Hình 2.23: Sơ đồ mạch in khối điều khiển trung tâm Atmega 32 50
Hình 2.24: Mô đun Bluetooth HC06 51
Hình 2.25: Cấu trúc của một khung truyền phổ biến 52
Hình 2.26: Mô hình sản phẩm thực tế 53
Hình 3.1: Giao diện chính của phần mềm Proteus 8.0 54
Hình 3.2: Giao diện của phần mềm Codevision AVR V2.05.0 55
Hình 3.3: Lựa chọn Java Platform 57
Hình 3.4: Chọn phiên bản JDK phù hợp với Windowns 57
Hình 3.5: Chọn Workspace cho việc phát triển ứng dụng trên Android 58
Hình 3.6: Giao diện Eclipse 59
Hình 3.7: Tham chiếu đến Android SDK 60
Hình 3.8: Lựa chọn các gói Android SDK (API) 60
Hình 3.9: Cài đặt Android SDK Manager 61
Hình 3.10: Chọn cài đặt Android Virtual Device 61
Hình 3.11: Cài đặt thông số cho Android Virtual Device 62
Hình 3.12: Khởi động Android Virtual Device 62
Hình 3.13: Thiết lập kích thước màn hình cho Android Virtual Device 63
Hình 3.14: Android Virtual Device được khởi tạo 63
Hình 3.15: Giao diện trên Smartphone Android giao tiếp với vi điều khiển 68
Trang 12DANH SÁCH CÁC BẢNG BIỂU
Bảng 1.1: So sánh giữa các hệ điều hành Smartphone 4 Bảng 2.1: Chức năng hoạt động của 74HC595 41 Bảng 2.2: Bảng giá trị logic của IC 74HC138 44
Trang 13DANH SÁCH CÁC LƯU ĐỒ
Lưu đồ 3.1: Lưu đồ thuật toán tổng quát quét Led ma trận 65 Lưu đồ 3.2: Lưu đồ thuật toán quét hàng và cột của Led ma trận 66 Lưu đồ 3.3: Lưu đồ thuật toán dịch chữ từ trái sang phải 67
Trang 14DANH SÁCH CÁC TỪ VIẾT TẮT
PC: Máy vi tính
JDK: Java Development Kit
OHA: Open Handset Alliance
Trang 15
CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ANDROID VÀ LED
TRONG QUANG BÁO 1.1 Tổng quan về hệ điều hành Android
1.1.1 Giới thiệu về hệ điều hành Android
Android là một hệ điều hành dành cho thiết bị di động như điện thoại, máy tính bảng và netbooks Android được phát triển bởi Google, dựa trên nền tảng Linux kernel và các phần mềm nguồn mở khác Ban đầu nó đuợc phát triển bởi Android Inc sau đó được Google mua lại và gần đây nó trở thành một trong những phần mềm đứng đầu của liên minh OHA (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).[7]
Tháng 11 năm 2007, OHA – Liên minh thiết bị cầm tay mở rộng ra đời với các thành viên Texas Instruments, Tập đoàn Broadcom, Google, HTC, Intel, LG, Tập đoàn Marvell Technology, Motorola, Nvidia, Qualcomm, Samsung Electronics, Sprint Nextel và T-Mobile
Tháng 10 năm 2008, hệ điều hành Android đã chính thức trở thành phần mềm
mã nguồn mở
Tháng 12 năm 2008, có thêm 14 thành viên mới gia nhập dự án Android được công bố, gồm có ARM Holdings, Atheros Communications, Asustek Computer Inc, Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, và Vodafone Group Plc Andorid đượ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), BlackBerry OS, Windows Mobile (Microsoft), Symbian (Nokia), Samsung (Bada), WebOS (Palm) Android chiếm 75% thị phần điện thoại thông minh trên toàn thế giới vào thời điểm quý 3 năm 2012,với tổng cộng 500 triệu thiết
bị đã được kích hoạt và 1,3 triệu lượt kích hoạt mỗi ngày Sự thành công của hệ điều hành cũng khiến nó trở thành mục tiêu trong các vụ kiện liên quan đến bằng phát minh, góp mặt trong cái gọi là “cuộc chiến điện thoại thông minh” giữa các công ty công nghệ.[8],[9]
Android có một cộng đồng phát triển ứng dụng rất lớn, hiện có khoảng hơn 70.000 ứng dụng có sẵn cho Android và đang liên tục đuợc cập nhật Ứng dụng được
Trang 16phát triển bằng ngôn ngữ Java kết hợp với thư viện Java có sẵn của Google Các nhà phát triển ứng dụng có thể sử dụng máy tính chạy hệ điều hành Windows hoặc MacOS hoặc Linux kết hợp với Android SDK để phát triển ứng dụng cho Android Hệ điều hành Android bao gồm 12.000.000 dòng mã trong đó có 3.000.000 dòng XML, 2.800.000 dòng C, 2.100.000 dòng Java, và 1.750.000 dòng C++
Ðể phát triển phần mềm trên Android, các lập trình viên có thể tải về bộ công
cụ phát triển (Android SDK) Bộ công cụ bao gồm các công cụ và các API cần thiết,
bộ nhớ và phần cứng với môi trường di động Android là một mã nguồn mở, nó có thể được mở rộng để kết hợp tự do giữa các công nghệ nổi trội Nền tảng này sẽ tiếp tục phát triển bởi cộng đồng phát triển để tạo ra các ứng dụng di động hoàn hảo
Tính ngang hàng của các ứng dụng
Với Android, không có sự khác nhau giữa các ứng dụng điện thoại cơ bản với ứng dụng của bên thứ ba Chúng được xây dựng để truy cập như nhau tới một loạt các ứng dụng và dịch vụ của điện thoại Với các thiết bị được xây dựng trên nền tảng Android, người dùng có thể đáp ứng đầy đủ các nhu cầu mà họ thích Chúng ta có thể đổi màn hình nền, kiểu gọi điện thoại, hay bất kể ứng dụng nào, thậm chí có thể cài đặt điện thoại chỉ xem những hình ảnh mình thích
Phá vỡ rào cản phát triển ứng dụng
Android phá vỡ rào cản để tạo ứng dụng mới và cải tiến Một người phát triển
có thể kết hợp thông tin từ trang Web với dữ liệu trên điện thoại cá nhân Ví dụ như
Trang 17danh bạ, lịch hay vị trí trên bản đồ để cung cấp chính xác hơn cho người khác Với Android, người phát triển có thể xây dựng một ứng dụng mà cho phép người dùng xem vị trí của những người bạn và thông báo khi họ đang ở vị trí lân cận Tất cả được lập trình dễ dàng thông qua sự hỗ trợ của MapView và dịch vụ định vị toàn cầu GPS
Tất cả các ứng dụng có thể được 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ứ ba Họ tất cả có thể được xây dựng để có thể truy cập bằng khả năng của một người cung cấp cho người sử dụng điện thoại 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 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 dialog hoặc bất kỳ ứng dụng nào 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
Dễ dàng và nhanh chóng xây dựng ứng dụng
Android cung cấp bộ thư viện giao diện lập trình ứng dụng đồ sộ và các công
cụ để viết các ứng dụng phức tạp Ví dụ Android có thể cho phép người phát triển biết được vị trí của thiết bị và cho phép các thiết bị giao tiếp với nhau để có thể tạo nên mạng xã hội chia sẻ ngang hàng rộng khắp thế giới Thêm nữa, Android còn bao gồm một bộ công cụ đầy đủ giúp cho việc phát triển trở nên dễ dàng
Dễ dàng và nhanh chóng xây dựng ứng dụng
Rất nhiều nhà phát triển hệ điều hành Android đã vào cuộc và các Rom cho Android độc đáo được ra đời với nhiều tích năng nổi trội được tích hợp và đầy sáng tạo Danh sách các nhà phát triển Rom nổi bật:
Trang 181.1.3 So sánh giữa các hệ điều hành Smartphone
Bảng 1.1: So sánh giữa các hệ điều hành Smartphone
Ưu điểm
- Tùy biến màn hình
và cập nhật thời gian thực (real time)
- Hệ thống thông báo nhanh
- Chia sẻ mạng với các thiết bị tương thích khác
- Chức năng xem Google Maps là tiêu chuẩn vàng của nhiều ứng dụng điều hướng
- Tích hợp một vài mạng xã hội rất tốt
- Hỗ trợ tìm kiếm bằng giọng nói
- Chia sẻ nội dụng bằng NFC
- Phù hợp với nhiều API trên nhiều nền
tảng
- Tích hợp liền mạch phần mềm
và phần cứng
- Hỗ trợ nhiều trang web thông qua trình duyệt safari
- Thống nhất về giao diện người dùng ngay cả khi nâng cấp lên iOS 6
- Hỗ trợ truy cập email thông qua nhiều tài khoản
- Tích hợp với mạng xã hội
- Thích hợp với nhiều API trên nhiều nền tảng khác
- Tùy biến màn hình
và cập nhật thời gian thực (real time)
- Tích hợp với các ứng dụng kinh doanh phổ biến có trên Microsoft
- Phù hợp với giao diện đồ họa người dùng (GUI) và nhiều API trên tất
cả các nền tảng di động
- Hiệu suất điện năng tốt thông qua
hệ điều hành đa nền tảng
Trang 19Nhược
điểm
- Tách rời hệ điều hành và phần cứng
- Tốn chi phí phát triển
- Dễ phát sinh các vấn đề an ninh do nguồn mở
- Không hỗ trợ Flash, có một vài trang web không xem
được
- Phần cứng phân mảnh
- Cảm ứng màn hình
có trực quan kém hơn so với iOS và Android
- Tích hợp mạng xã hội không tốt
- Giao diện thay đổi lớn so với trước
đó
1.2 Kiến trúc hệ điều hành Android
Kiến trúc của hệ điều hành Android gồm 4 thành phần:
- Lớp ứng dụng (Applications)
- Lớp khung tổ chức ứng dụng (Applications Framework)
- Lớp thư viện (Librabries – Runtime)
- Lớp nhân Linux phiên bản 2.6 (Linux kernel)
Hình 1.1: Mô hình kiến trúc nền tảng Android
Trang 20từ điển, các ứng dụng của bên thứ ba…Các ứng dụng viết sẽ có những đặc tính sau:
- Viết bằng Java, phần mở rộng là apk
- Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine (máy ảo) đượ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 phân quyền và tự hệ thống sẽ hủy nếu mức ưu tiên thấp
- Các ứng dụng được gán số ID của người sử dụng nhằm 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
1.2.2 Lớp khung tổ chức ứng dụng
Ở lớp này các nhà phát triển ứng dụng có thể truy cập vào phần cứng thiết bị, thông tin định vị vị trí, chạy các dịch vụ nền, đặt các cảnh báo, thông báo vào thanh
trạng thái, và quan trọng nhất đó là các API của framework
Phía duới tất cả các ứng dụng là một tập các dịch vụ của hệ thống bao gồm:
- View Manage: 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,
Trang 21relative layout, table layout,
- 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
- 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
- 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ó Email 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
tập tin 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)
- 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ẽ như HTML5, JavaScript, CSS, DOM, AJAX
- Surface Manage: Quản lý hiển thị 2D và 3D
Trang 22- SGL: Công nghệ 2D
- SQLite: Quản lý database của ứng dụng
- Free Type: Dùng cho hiển thị hình ảnh, font
- SSL(Secure Socket Layer): Tầng thiết lập giao dịch an toàn trên 2 ứng dụng trên một cổng (socket)
- Open GL/EL: Hỗ trợ thư viện tùy chọn 3D tĩnh và động
1.2.3.2 Android runtime
Phần này chứa các thư viện mà một chương trình viết bằng ngôn ngữ Java có thể hoạt động Phần này gồm có 2 bộ phận tương tự như mô hình chạy Java trên máy tính thông thường Thứ nhất là các thư viện lõi (Core Library), chứa các lớp như JAVA 10, Collections, File Access Thứ hai là một máy ảo Java (Dalvik Virtual Machine)
Mặc dù cũng được viết từ ngôn ngữ Java nhưng một ứng dụng Java của hệ điều hành Android không được chạy bằng JRE (Java Runtime Environment) của Sun (nay
là Oracle) (JVM) mà chạy bằng máy ảo Dalvik (máy ảo Dalvik được đặt tên sau khi một nhà phát triển phần mềm của Google tạo ra nó sau chuyến đi thăm một ngôi làng
ở nơi tổ tiên ông sinh sống), do Google phát triển Máy ảo Davik thực thi các tập tin davik (dex), khác với java là chuyển sang dạng bytecode Định dạng này được tối ưu hóa cho bộ nhớ tối thiểu
1.2.4 Lớp nhân Linux phiên bản 2.6
Android sử dụng nhân Linux 2.6 làm nhân cho các dịch vụ hệ thống như bảo mật, quản lý bộ nhớ, quản lý tiến trình (xử lý tiến trình, đa luồng, ), ngăn xếp mạng
và trình điều khiển thiết bị (giao tiếp USB, giao tiếp hồng ngoại, không dây,…) Nhân Linux này cũng có vai trò như một lớp trừu tượng giữa phần cứng và phần mềm 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) Tuy được phát triển dựa vào nhân Linux nhưng thực ra nhân Linux đã được nâng cấp và sửa đổi rất nhiều để phù hợp với tính chất của những thiết bị cầm tay
Trang 23như hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cầu kết nối mạng không dây,…
Các thành phần của nhân Linux:
- 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 khiể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
- Power Madagement: Giám sát việc tiêu thụ điện năng
- M-System Driver: Quản lý việc đọc ghi lên các thiết bị nhớ như thẻ SD, Flash
- 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
Các thành phần này không nhất thiết phải có mặt đầy đủ trong ứng dụng Chúng
ta có thể xem các thành phần nào được sử dụng trong ứng dụng bằng việc xem khai
báo trong file AndroidManifest.xml
Trang 241.3.1 Activity
1.3.1.1 Khái niệm Activity
Một Activity là một giao diện đồ họa trực quan mà người dùng có thể thực hiện trên đó mỗi khi được kích hoạt Một ứng dụng có thể có nhiều Activity và chúng có
thể gọi qua lại lẫn nhau Mỗi Activity là một dẫn xuất của lớp Android.app.activity
Một ứng dụng gọi điện thoại có thể gồm các hoạt động như hiển thị một danh sách các liên hệ để gọi tới, hoạt động thứ hai là gọi tới số điện thoại liên hệ được chọn, ngoài ra còn có các hoạt động khác nữa như xem nhật ký cuộc gọi hay thay đổi cài đặt Mặc dù, chúng làm việc cùng nhau để tạo thành một giao diện người dùng nhưng mỗi Activity độc lập với những cái khác Mỗi Activity là một lớp con của lớp
cơ sở Activity
Một ứng dụng có thể gồm chỉ một Activity hay nhiều Activity tùy theo yêu cầu của mỗi ứng dụng Thông thường, một trong số các Activity được đánh dấu là Activity đầu tiên phải được chạy đầu tiên khi ứng dụng được khởi động Để chuyển
từ một Activity hiện tại sang Activity khác bằng cách cho Activity hiện tại khởi động Activity kế tiếp
Mỗi Activity được đưa ra một cửa sổ mặc định để vẽ vào Thông thường, cửa
sổ này sẽ lấp đầy màn hình, nhưng ta có thể tùy chọn để nó nhỏ hơn màn hình và nằm trên các cửa sổ khác Ngoài ra nó cũng có thể có thêm các cửa sổ con khác như là hộp thoại,… Nội dung của cửa sổ của hoạt động được cung cấp bởi một hệ thống cấp bậc các View (là đối tượng của lớp Views)
Android có một số View đã xây dựng sẵn mà người dùng có thể sử dụng Gồm
có các: Buttons, text fields, scroll bars, menu items, check box, image view, image view button, video view, Một cây phân cấp View được đặt trong một cửa sổ của Activity bằng phương thức Activity.setContentView() ContentView là đối tượng View ở gốc của cây phân cấp
1.3.1.2 Vòng đời của Activity
Các Activity trong hệ thống được quản lý bởi một cấu trúc dữ liệu ngăn xếp Khi có một hoạt động được khởi tạo nó được đẩy vào trong ngăn xếp, chuyển sang
Trang 25trạng thái thực thi và hoạt trộng trước đó sẽ chuyển sang trạng thái chờ Hoạt động này chỉ trở lại trạng thái kích hoạt khi mà hoạt động vừa khởi tạo kết thúc việc thực thi
- Stopped: Khi một Activity hoàn toàn bị che khuất, nó sẽ rơi vào trạng thái
Stopped Tuy nhiên, nó vẫn còn lưu trữ toàn bộ thông tin trạng thái và nó thường bị
hệ thống đóng lại khi có tình trạng thiếu bộ nhớ
Khi chuyển giữa các trạng thái, ứng dụng sẽ gọi các hàm callback ứng với các bước chuyển:
- OnCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên
- OnStart(): Được gọi khi hoạt động trở nên hữu hình so với người dùng
- OnResume(): Được gọi khi hoạt động bắt đầu tương tác với người sử dụng
- OnPause(): Được gọi để dừng các hoạt động hiện tại và nối lại các hoạt động
trước đó
- OnStop(): Được gọi khi hoạt động không còn hiển thị với người dùng
- OnDestroy(): Được gọi trước khi hoạt động bị phá hủy bởi hệ thống (bằng tay
Vòng đời của một Activity có thể được thể hiện trong những quá trình sau:
Trang 26Hình 1.2: Vòng đời của một Activity
Toàn bộ thời gian sống của một Activity bắt đầu từ lời gọi đầu tiên tới phương
thức onCreate() cho tới lời gọi phương thức onDestroy() Trong quá trình này, một
Activity sẽ khởi tạo lại tất cả các tài nguyên cần sử dụng trong phương thức
onCreate() và giải phóng chúng khi phương thức onDestroy() được thực thi
Thời gian sống có thể nhìn thấy của một Activity bắt đầu từ lời gọi tới phương
thức onStart() cho tới khi phương thức onStop() của nó được thực thi Toàn bộ các
tài nguyên đang được sử dụng bởi Activity vẫn tiếp tục được lưu giữ, người dùng có
Trang 27thể thấy giao diện nhưng không tương tác được với hoạt động do trong qua trình này Activity không ở trạng thái chạy tiền cảnh
Thời gian sống tiền cảnh của một Activity là quá trình bắt đầu từ khi có lời gọi
tới phương thức onResume() và kết thúc bằng lời gọi tới phương thức onPause()
Trong thời gian này, hoạt động chạy ở tiền cảnh và có thể tương tác với người dùng
1.3.2 Service
1.3.2.1 Khái niệm Service
Một Service (dịch vụ) là các đoạn mã được thực thi ngầm bởi hệ thống mà người
sử dụng không thấy được Service sử dụng để cập nhật dữ liệu, đưa ra các cảnh báo
Mỗi Service đều được mở rộng từ lớp cơ sở là Service trong gói Android.app.service
Có thể kết nối tới hoặc kích hoạt một Service thông qua Interface mà Service đưa ra
Ví dụ như một chương trình phát nhạc trên điện thoại, sẽ có vài hoạt động cho phép người dùng duyệt danh sách các bài hát và lựa chọn bài hát nào để phát Tuy nhiên, chức năng phát nhạc không được thiết kế như một Activity bởi chúng ta sẽ muốn chuyển qua cửa sổ khác, như khi soạn tin nhắn thì bài hát vẫn tiếp tục được phát Trong trường hợp này, ứng dụng phát nhạc sẽ khởi tạo một dịch vụ bằng cách
sử dụng phương thức Context.startservice()
Một ứng dụng có thể dễ dàng thực hiện liên kết tới một Service đang chạy (thậm
chí khởi động nếu nó chưa thực thi) bằng phương thức Context.bindservice() Khi đó
Service này sẽ cung cấp cho ứng dụng cơ chế để giao tiếp với chúng thông qua giao
diện gọi là IBinder (đối với dịch vụ phát nhạc có thể cho phép dừng hoặc chuyển qua
bài nhạc kế tiếp)
1.3.2.2 Vòng đời của một Service
Vòng đời của một Service được hiểu là quá trình hoạt động từ khi nó được tạo
ra cho tới khi bị loại khỏi hệ thống
Có hai cách thức để một dịch vụ có thể được chạy trong hệ thống:
– Khi hệ thống có lời gọi tới phương thức Context.startService() Trong trường
hợp này, dịch vụ sẽ được thực hiện liên tục cho tới khi hệ thống gọi phương thức
Context.stopService()
Trang 28– Khi các ứng dụng gọi phương thức Context.bindService() để tạo kết nối với
dịch vụ (dịch vụ sẽ được khởi tạo nếu tại thời điểm đó nó đang không hoạt động)
Ứng dụng sẽ nhận được một đối tượng IBinder do dịch vụ trả lại để có thể gọi các
phương thức Callback phù hợp để truy cập tới các trạng thái của dịch vụ Nếu do lời
gọi Context.bindService() mà dịch vụ được khởi tạo thì nó sẽ được thực thi cho tới
khi nào kết nối trên (tức là đối tượng IBinder) vẫn còn tồn tại
Hình 1.3 cho ta thấy được hai phương thức để một dịch vụ có thể được khởi
chạy trong hệ thống.……… ………
Hình 1.3: Sơ đồ chuyển đổi trạng thái của Service
Trang 291.3.3 Inten
Intent là nền tảng để truyền tải các thông báo Intent được sử dụng để gửi các thông báo đi nhằm khởi tạo một Activity hay Service để thực hiện công việc bạn mong muốn Ví dụ, khi mở một trang Web bạn gửi một Intent đi để tạo một Activity mới hiển thị trang Web đó
Intent là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của một Activity, là cầu nối giữa các Activity với nhau Ứng dụng Android thường bao gồm nhiều Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc khác nhau Intent chính là người đưa thư, giúp các Activity có thể triệu gọi cũng như truyền các dữ liệu cần thiết tới một Activity khác Điều này cũng giống như việc
di chuyển qua lại giữa các Forms trong lập trình Windows Form
Hình 1.4: Chức năng của Intent
Content provider được kích hoạt khi chúng được gọi từ một ContentResolver
Ba thành phần khác (Activity, service và Broadcast Rreceiver) được kích hoạt bởi thông điệp không đồng bộ từ các Intent Một Intent là một đối tượng có kiểu Intent chứa nội dung của thông điệp Với các hoạt động và dịch vụ, nó gọi tên hành động được yêu cầu và xác định URI của dữ liệu tác động tới ở giữa Ví dụ, nó có thể truyền tải một yêu cầu cho một hoạt động hiển thị một hình ảnh cho người dùng hay cho phép người dùng sửa văn bản Với bộ nhận quảng bá, đối tượng Intent gọi tên của hành động được thông báo Ví dụ, bộ nhận quảng bá có thể thông báo các phần nó quan tâm là nút chụp ảnh đã được bấm hay chưa
Trang 30 Có vài phương thức cho việc kích hoạt mỗi thành phần:
Một hoạt động được khởi động thông qua một đối tượng Intent
Context.startActivity() hay Activity.startActivityForResult() Hoạt động đáp lại có thể
theo dõi Intent được tạo ra đó bằng phương thức getIntent() và cập nhật thông qua
phương thức setIntent(Intent) Android gọi phương thức onNewIntent() để bỏ qua các
Intent đến trước nó
Một Activity (hoạt động) thường bắt đầu bằng một Activity khác Nếu nó muốn
trả lại kết quả của một Activity (hoạt động) nó đã khởi chạy, nó sẽ gọi phương thức
startActivityForResult() thay cho phương thức startActivity() Ví dụ, nếu nó khởi
chạy một hoạt động mà cho phép người dùng lấy một ảnh, nó có thể muốn lấy kết quả của ảnh được chọn Kết quả được trả về trong một đối tượng Intent thông qua
phương thức onActivityResult()
Một Service (dịch vụ) được bắt đầu thông qua một đối tượng Intent là
Context.startService() Android gọi phương thức onStart() của dịch vụ và thông qua
đối tượng Intent của nó
Tương tự, một Intent có thể thông qua Context.bindService() để thiết lập một
kết nối liên tục giữa các thành phần và dịch vụ đích Dịch vụ nhận đối tượng Intent
qua lời gọi onBind(), nếu dịch vụ chưa được kích hoạt bindService() có thể chọn bắt
đầu nó Ví dụ, một hoạt động có thể thiết lập kết nối với dịch vụ phát nhạc đề cập ở phần trước để nó có thể cung cấp cho người dùng giao diện sử dụng để điều khiển
phát lại Hoạt động sẽ gọi bindService() để thiết lập kết nối và sau đó gọi phương thức
đã định nghĩa bởi dịch vụ để áp dụng phát lại ca khúc
Một ứng dụng có thể khởi tạo một quảng bá thông qua đối tượng Intent bằng
phương thức như Context.setBroadcast(), Context.setOrderedBroadcast() và
Context.sendStickyBroadcast() Android chuyển những Intent tới tất cả các bộ nhận
quảng bá nào quan tâm bằng việc gọi phương thức onReceive() của nó
1.3.4 Broadcast Receivers
Broadcast Receiver là một thành phần không làm gì ngoài việc nhận và đáp lại các thông báo Broadcast Nhiều Broadcast khởi đầu trong mã hệ thống
Trang 31Ví dụ như thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay người dùng đã thay đổi ngôn ngữ, Các ứng dụng có thể tạo ra các Broadcast, chẳng hạn
để ứng dụng khác biết được một số dữ liệu đã được tải về thiết bị và sẵn sàng cho việc sử dụng chúng
Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ thông báo nào mà nó cho là quan trọng Tất cả các Receiver mở rộng từ lớp cơ sở
BroadcastReceiver
Có hai bước quan trọng để cho Broadcast Receivers làm việc:
- Bước 1: Tạo Broadcast Receiver
- Bước 2: Đăng ký Broadcast Receiver
Có thêm một bước nữa trong trường hợp bạn implement các Intents tùy chỉnh
của bạn thì bạn sẽ phải tạo Broadcast các Intents đó
Broadcast Receiver không hiển thị một giao diện người dùng Tuy nhiên chúng
có thể bắt đầu một Activity để đáp lại thông tin mà chúng nhận hay chúng có thể sử
dụng NotificationManager để cảnh báo người dùng Notifications có thể lấy sự chú ý
của người dùng bằng nhiều cách khác nhau như là: Sáng màn hình, hiển thị thông báo, rung thiết bị, bật âm thanh nào đấy,… Thông thường, chúng thường lấy một biểu tượng bền vững trong thanh trạng thái và đặt thông báo trên thanh trạng thái, nơi người dùng có thể nhận được thông báo
1.3.5 Content Provider
Content providers là thành phần cung cấp dữ liệu từ một ứng dụng đến một
ứng dụng khác dựa trên các Request Mỗi Request được xử lý bằng các phương thức của class ContentResolver Một Content Provider có thể sử dụng các cách lưu trữ dữ liệu khác nhau, dữ liệu có thể được lưu trữ trong databases, file, thậm chí thông qua Network
Mỗi ứng dụng Android chạy trong các tiến trình riêng của chính mình và nó có các điều khoản riêng của nó, điều mà giữ dữ liệu của ứng dụng ẩn với các ứng dụng khác Tuy nhiên, thỉnh thoảng nó được yêu cầu chia sẻ dữ liệu đến các ứng dụng khác
sử dụng Content Provider trong việc này rất hữu ích
Trang 32Content Providers cho phép bạn tập trung dữ liệu ở một nơi và các ứng dụng khác nhau sẽ truy xuất vào nó khi cần thiết Content Provider hoạt động rất giống với một cơ sở dữ liệu và bạn có thể truy vấn nó, chỉnh sửa nội dung, cũng như là thêm, xóa các nội dung sử dụng các phương thức: Insert(), update(), delete(), query() Trong nhiều trường hợp dữ liệu được lưu trữ trong SQLite
Content Provider sẽ kế thừa class ContentProvider và phải implement một chuẩn tập các API để cho phép các ứng dụng khác thực hiện xử lý các giao dịch
1.3.6 Notification
Đưa ra các cảnh báo mà không làm cho các Activity phải ngừng hoạt động Notification là một cơ chế cho phép tại một thời điểm nhất định trình bày một thông tin trên thanh trạng thái (Status bar) ở phía trên màn hình Mỗi khi thanh trạng thái được mở ra thì một danh sách những Notification được hiển thị, khi người dùng chọn vào một Notification thì có thể một Activity được kích hoạt
Một Nofication thông thường gồm các thành phần sau đây:
– Một Icon (xuất hiện trên Status bar và ở nội dung chi tiết của Notification)
– Ticker text (xuất hiện trên status bar)
– Notification title text (xuất hiện ở nội dung chi tiết)
– Notification body text (xuất hiện ở nội dung chi tiết)
– Một Intent (Launch Activity khi ta kích vào nội dung chi tiết)
Hình 1.5: Ví dụ về Notification
1.4 Cấu trúc một Project Android
1.4.1 Cấu trúc một Project Android trong Eclipse
Cấu trúc hình cây của một Project Android trong Eclipse như hình 1.6
Trang 33Hình 1.6: Cấu trúc hình cây của Project Android
Ta thấy rằng cấu trúc một Project Android gồm các thành phần chính như sau:
- Src: Chứa các Package gồm các lớp ứng dụng và xử lý liên quan đến Activity,
các xử lý
- Gen: Chứa các tập tin Java được phát sinh ra tự động Tốt nhất là không được
thêm hay sửa đổi bất kì giá trị gì của các tập tin nằm trong Gen Nếu không tất cả các giá trị vừa thêm hay sửa đổi đó sẽ được phục hồi về giá trị ban đầu Trong tập tin R.java của thư mục Gen chứa các định danh (địa chỉ ID) cho tất các đối tượng trên giao diện của tất cả màn hình, của tất cả các nguồn tài nguyên gồm hình ảnh, giá trị, layout, màu sắc, trong thư mục Res
- Google APIs: Nếu ta chọn Target name là Android 4.2.2 thì thư mục sẽ trở
thành Android 4.2.2 Trong đây chứa các tập tin có đuôi jar là toàn bộ các hàm API của Android và Google là Android.jar và maps.jar Ngoài ra, nếu chương trình của chúng ta cần sự hỗ trợ các hàm do bên thứ 3 cung cấp thì ta có thể thêm tham chiếu
và chúng ta sẽ có thêm thư mục Referenced Libraries chứa các tập tin jar gồm các
bộ hàm hỗ trợ của bên thứ 3
- Bin: Nơi chứa tập tin cài đặt ứng dụng và có phần mở rộng là apk
Trang 34- Asset: Các tài nguyên trong thư mục này sẽ không được Android đánh định
danh ID cho nó
- Res: Chứa các nguồn tài nguyên có trong chương trình như thư mục drawable
chứa các hình ảnh hay hình nền của chương trình gồm các tập tin hình ảnh hoặc xml Thư mục layout chứa các khung giao diện chương trình và thư mục values chứa các
giá trị như chuỗi, màu sắc, Tập tin AndroidManifest.xml chứa các thiết lập cho
chương trình như các quyền cho phép truy cập vào phần cứng, thiết lập màn hình chính, các thuộc tính của chúng và còn rất nhiều thiết lập khác
1.4.2 Một số tập tin quan trọng của Android
1.4.2.1 MainActivity.java
Khi một ứng dụng được tạo ra thì thông thường sẽ có một Activity để khởi chạy ứng dụng Ở đây ta hiểu rằng MainActivity.java chính là class chứa toàn bộ source code, còn activity_main.xml chính là phần giao diện Đối với Android khi một Activity tạo ra thì thường nó đi kèm với một Layout giao diện nào đó (tức là nó luôn được tách thành 2 phần: Phần source code riêng và phần giao diện riêng)
Đây là code mặc định của file MainActivity.java
Trang 35// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// as you specify a parent Activity in AndroidManifest.xml
- Bất cứ thành phần nào được triển khai như một phần trong ứng dụng, phải được
khai báo trong tập tin AndroidManifest.xml Tệp tin này giống như một giao diện để
giao tiếp giữa hệ điều hành Android và ứng dụng của bạn Vì vậy, nếu thành phần nào bạn dùng mà không khai báo trong tập tin này, thì hệ điều hành sẽ không xem xét đến chúng
- Đây là code mặc định củaAndroidManifest.xml
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.nguyenhuy"
android:versionCode="1"
android:versionName="1.0">
Trang 36<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</Activity>
</application>
</manifest>
- <application>…</application>: Thẻ bao quanh các thành phần có liên quan
trong ứng dụng Thuộc tính Android:icon sẽ trỏ đến các Icon có sẵn trong thư mục res/drawable-hdpi Ứng dụng này sẽ sử dụng hình ic_launcher làm Icon
- <Activity>…</Activity>: Thẻ này được sử dụng để nêu chi tiết về một
Activity Thuộc tính android:name được sử dụng để mô tả chi tiết về tên class của một Activity Thuộc tính android:label xác định một chuỗi ký tự được sử dụng là nhãn cho Activity đó Nếu trong ứng dụng của bạn có nhiều Activity thì bạn sẽ phải tạo nhiều thẻ <Activity>
- <action />: Thuộc tính Android.intent.action.main để cho Android biết rằng
Activity này sẽ được khởi động lên đầu tiên khi chạy ứng dụng
Trang 37- <category />: Thuộc tính Android.intent.category.launcher để cho Android biết
ứng dụng có thể được chạy từ một Icon trên thiết bị
- @string: Sẽ được chỉ định đến file strings.xml, @string/app_name sẽ được dẫn
đến chuỗi app_name nó là HelloWord
Sau đây là một số thẻ khác mà chúng ta có thể sử dụng trong tập tin
AndroidManifest.xml
- <Activity> là thẻ dành cho các Activity
- <Service> là thẻ dành cho các Services
- <receiver> là thẻ dành cho các Broadcast Receivers
- <provider> là thẻ dành cho các Content Providers
1.4.2.3 Strings.xml
- Strings.xml đây là tập tin được đặt trong thư mục res/values chứa tất cả các
chuỗi kí tự mà ứng dụng của bạn sử dụng Ví dụ tên của các buttons, các labels, các text mặc định bạn nên để trong tập tin này
Code mặc định của tập tin Strings.xml:
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
<stringname="app_name">NGUYENHUY</string>
<stringname="hello_world">Hello world!</string>
<stringname="action_settings">Settings</string>
</resources>
1.4.2.4 R.java
R.java tạo ra mối liên kết giữa các tập tin Activity và các tập tin Resource (ví
dụ như giữa tập tin MainActivity.java và tập tin strings.xml) Tệp tin này được tạo ra
tự động và bạn không nên thay đổi nội dung trong tệp tin này
Sau đây là một ví dụ về nội dung của tệp tin R.java:
package com.example.radiobutton;
public final class R {
public static final class attr {
Trang 38}
public static final class dimen {
public static final int Activity_horizontal_margin=0x7f040000;
public static final int Activity_vertical_margin=0x7f040001;
}
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class id {
public static final int TableLayout1=0x7f080000;
public static final int action_settings=0x7f080008;
public static final int rbBeDe=0x7f080005;
public static final int rbNam=0x7f080003;
public static final int rbNu=0x7f080004;
public static final int rbgGioiTinh=0x7f080002;
public static final int textView1=0x7f080001;
public static final int tvKetQua=0x7f080007;
}
public static final class layout {
public static final int Activity_main=0x7f030000;
}
public static final class menu {
public static final int main=0x7f070000;
}
public static final class string {
public static final int action_settings=0x7f050002;
public static final int app_name=0x7f050000;
public static final int hello_world=0x7f050001;
}
Trang 39public static final class style {
public static final int AppBaseTheme=0x7f060000;
public static final int AppTheme=0x7f060001;
}
}
1.4.2.5 Activity_main.xml
Activity_main.xml là một tệp tin layout nằm trong thư mục res/layout Tệp tin
này sẽ được tham chiếu bởi ứng dụng khi tạo ra giao diện trên màn hình Bạn sẽ phải thay đổi nội dung tệp tin này rất nhiều trong khi tạo giao diện cho ứng dụng
Đây code mặc định của tệp tin Activity_main.xml
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- RelativeLayout: Là một trong số nhiều các layout của Android
- TextView: Là một trong nhiều thành phần của layout trong việc xây dựng giao
diện TextView có nhiều thuộc tính như:
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
Trang 401.5 Tổng quan về Led
1.5.1 Khái niệm về Led
Led (viết tắt của Light Emitting Diode,
có nghĩa là điốt phát quang) là các điốt có khả
năng phát ra ánh sáng hay tia hồng ngoại, tử
ngoại Cũng giống nhưđiốt, Led được cấu tạo
từ một khối bán dẫn loại P ghép với một khối
bán dẫn loại N
Với các ưu điểm ánh sáng lớn, độ bền cao, ít tiêu tốn điện năng, Led được ứng dụng rộng rãi trên các lĩnh vực: Bảng quảng cáo ngoài trời, đồng hồ cỡ lớn đặt tại các biển quảng cáo tấm lớn trên đường cao tốc, hệ thống đèn giao thông, biển chỉ dẫn, và các sản phẩm khác như bảng chạy chữ điện tử, bảng hệ thống giờ, bảng tỷ giá, bảng chứng khoán, hệ thống xếp hàng tự động… Việc sử dụng rộng rãi thiết bị chiếu sáng bằng loại đèn này có thể giúp chúng ta tiết kiệm đuợc nhiều năng lượng.[10]
1.5.2 Lịch sử hình thành Led
Đèn Led đã có mặt từ những thập niên 60, nhưng hầu hết chỉ dùng hiển thị thời gian của đồng hồ báo thức hay dung lượng pin của máy ghi hình Một thời gian dài, đèn Led đã không được dùng làm nguồn sáng bởi vì chúng chỉ cho ánh sáng đỏ, xanh
lá cây và vàng mà không cho ánh sáng trắng
Đến năm 1993, công ty hoá chất Nichia của Nhật Bản cho ra đời loại đèn Led xanh dương, là sự kết hợp giữa ánh sáng đỏ và xanh lá cây để là cơ sở để phát triển đèn Led cho ra ánh sáng trắng Sự kiện này đã mở ra một lĩnh vực mới về công nghệ Led Đèn Led dựa trên công nghệ bán dẫn ngày càng tăng về độ chiếu sáng, hiệu suất
và tuổi thọ, giống như bộ vi xử lý của máy tính, phát triển ngày càng nhanh và giá thành ngày càng giảm theo thời gian
Năm 1960: Phát minh ra đèn Led ánh sáng đỏ
Năm 1970: Phát minh ra Led 7 đoạn
Năm 1980: Phát minh ra Led xanh lá cây
Hình 1.7: Hình ảnh Led thực tế