Upload
trananhquoc
View
221
Download
0
Embed Size (px)
DESCRIPTION
Điều khiển thiết bị SmartHome qua android
Citation preview
Đồ án tốt nghiệp Khoa: Điện Tử
LỜI CẢM ƠN
Lời đầu tiên em xin cảm ơn đến các thầy, cô và các bạn sinh viên trong
trường đã giúp đỡ em trong suốt quãng thời gian học vừa qua. Từ những kiến
thức thu được là cơ sở để em thực hiện đồ án tốt nghiệp này.
Em cũng xin gửi lời cảm ơn chân thành đến thầy ThS.Nguyễn Tiến Duy
người đã tận tình hướng dẫn, giúp đỡ và tạo cho em những điều kiện tốt nhất từ
khi bắt đầu đến khi hoàn thành đề tài này.
Mặc dù trong quá trình thực hiện đề tài em đã nỗ lực rất nhiều để hoàn
thành đồ án, song thời gian thực hiện để tài có hạn, kiến thức còn hạn chế nên
nội dung không thể tránh khỏi sai sót. Rất mong nhận được những ý kiến đóng
góp của thầy, cô và các bạn sinh viên để đồ án tốt nghiệp của em được hoàn
thiện hơn.
Em xin chân thành cảm ơn!
Thái nguyên, ngày 09 tháng 06 năm 2013
Sinh viên
Nguyễn Văn Hiếu
SVTH: Nguyễn Văn Hiếu - 1 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
DANH MỤC CÁC HÌNH VẼ
HÌNH 2.1: CÁC THÀNH VIÊN CỦA "LIÊN MINH DI ĐỘNG MỞ"........10
HÌNH 2.2: CẤU TRÚC STACK HỆ THỐNG ANDROID............................11
HÌNH 2.3: ANDROID EMULATOR..............................................................14
HÌNH 2.4: CẤU TRÚC THƯ MỤC VÀ FILE CỦA MỘT DỰ ÁN PHẦN
MỀM ANDROID TRÊN ECLIPSE.................................................................15
HÌNH 2.5: LƯỢC ĐỒ VÒNG ĐỜI CỦA 1 ACTIVITY................................21
HÌNH 2.6: TRUYỀN DỮ LIỆU GIỮA 2 ACTIVITY...................................24
HÌNH 2.7: LƯỢC ĐỒ VÒNG ĐỜI CỦA 1 SERVICE..................................26
HÌNH 2.8: CÁC THÀNH PHẦN CỦA 1 URI...............................................27
HÌNH 2.9: BỐ TRÍ CÁC WIDGET SỬ DỤNG LINEARLAYOUT...........30
HÌNH 2.10: BỐ TRÍ CÁC WIDGET SỬ DỤNG FRAMELAYOUT..........30
HÌNH 2.11: BỐ TRÍ WIDGET TRONG RETALIVELAYOUT.................31
HÌNH 2.12: BỐ TRÍ WIDGET TRONG TABLELAYOUT.........................32
HÌNH 2.13: MINH HOẠ CHO MỘT LISTVIEW........................................34
HÌNH 2.14: SQLITE MANAGER....................................................................38
HÌNH 2.15: LẬP TRÌNH SOCKET VỚI TCP..............................................41
HÌNH 2.16: SƠ ĐỒ CHÂN CỔNG COM........................................................42
HÌNH 3.1: SƠ ĐỒ TỔNG QUÁT CỦA HỆ THỐNG.....................................47
HÌNH 3.2: SƠ ĐỒ USECASE TỔNG QUÁT..................................................49
HÌNH 3.3: BIỂU ĐỒ SEQUENCE CHO CHỨC NĂNG LOGIN VÀ
RESTORE ACCOUNT.....................................................................................50
HÌNH 3.4: BIỂU ĐỒ SEQUENCE CHO CHỨC NĂNG CHANGE
PROFILE............................................................................................................51
HÌNH 3.5: BIỂU ĐỒ SEQUENCE CHO CHỨC NĂNG PHONE SETTING
..............................................................................................................................52
HÌNH 3.6: BIỂU ĐỒ SEQUENCE CHO CHỨC NĂNG INTERNET
SETTING............................................................................................................53
HÌNH 3.7: BIỂU ĐỒ SEQUENCE CHO CHỨC NĂNG CONTROL..........53
HÌNH 3.8: BIỂU ĐỒ SEQUENCE CHO CHỨC NĂNG ALARM...............54
HÌNH 3.9: BIỂU ĐỒ TRẠNG THÁI CHANGE PROFILE..........................55
SVTH: Nguyễn Văn Hiếu - 2 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
HÌNH 3.10: BIỂU ĐỒ TRẠNG THÁI ANDROID SEND DATA.................55
HÌNH 3.11: BIỂU ĐỒ TRẠNG THÁI SEND DATA TO SERIAL PORT. .56
HÌNH 3.12: BIỂU ĐỒ TRẠNG THÁI SERIAL PORT SEND DATA TO
SERVER.............................................................................................................56
HÌNH 3.13: BIỂU ĐỒ TRẠNG THÁI SERVER SEND DATA TO
ANDROID...........................................................................................................57
HÌNH 3.14: BIỂU ĐỒ TRẠNG THÁI ANDROID RECEIVER SMS..........57
HÌNH 3.15: MỘT SỐ HÌNH ẢNH CÀI ĐẶT TRÊN HỆ ĐIỀU HÀNH
ANDROID...........................................................................................................58
HÌNH 3.16: ẢNH CÀI ĐẶT TRÊN PC...........................................................59
HÌNH 3.17: ẢNH CÀI ĐẶT TRÊN SERVER.................................................59
SVTH: Nguyễn Văn Hiếu - 3 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
MỤC LỤC
LỜI CẢM ƠN.......................................................................................................1
MỞ ĐẦU...............................................................................................................6
CHƯƠNG 1: GIỚI THIỆU CHUNG.................................................................7
1.1 Giới thiệu đề tài...........................................................................................71.2 Ý nghĩa khoa học của đề tài.......................................................................81.3 Mục đích nghiên cứu..................................................................................81.4 Ý tưởng thiết kế..........................................................................................81.5 Phương pháp nghiên cứu...........................................................................91.6 Đề cương nghiên cứu chi tiết.....................................................................9CHƯƠNG 2: CƠ SỞ LÝ THUYẾT.................................................................10
2.1. Tổng quan về hệ điều hành Android......................................................102.1.1. Giới thiệu về hệ điều hành Android.....................................................102.1.2. Kiến trúc hệ điều hành Android...........................................................11
2.1.2.1 Tầng ứng dụng..................................................................................122.1.2.2 Application framework.....................................................................122.1.2.3 Library...............................................................................................12
2.1.3. Android Emulator.................................................................................132.1.4. Các thành phần trong một Android project..........................................14
2.1.4.1 Tầng ứng dụng..................................................................................162.1.4.2 File R.java.........................................................................................18
2.1.5. Các thành phần cơ bản trong một ứng dụng.........................................192.1.5.1 Activity..............................................................................................192.1.5.2 Intent.................................................................................................232.1.5.3 Service...............................................................................................242.1.5.4 Content Provider...............................................................................272.1.5.5 View..................................................................................................292.1.5.6 Lưu trữ dữ liệu..................................................................................37
2.2. Socket.........................................................................................................412.2.1 Một số khái niệm.....................................................................................412.2.2 Cơ chế gọi hàm trong lập trình Socket....................................................42
2.3. Serial Port..................................................................................................432.3.1. Khái Niệm............................................................................................432.3.2. Quá trình dữ liệu...................................................................................44
SVTH: Nguyễn Văn Hiếu - 4 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
2.3.3. Ứng dụng..............................................................................................442.4. SMS............................................................................................................45
2.4.1. Giới thiệu về SMS................................................................................452.4.2. Ưu điểm của SMS................................................................................45
CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ....................................................46
3.1 Phương án thiết kế....................................................................................463.2 Sơ đồ tổng quát hệ thống.........................................................................463.3 Chức năng hệ thống..................................................................................47
3.3.1 Account Manager....................................................................................473.3.2 Controls Setting.......................................................................................473.3.3 Controls...................................................................................................483.3.4 Alarm.......................................................................................................48
3.4 Các biểu đồ của hệ thống.........................................................................493.4.1 Biểu đồ Usecase......................................................................................493.4.2 Biểu đồ Sequence....................................................................................49
3.4.2.1 Login.................................................................................................493.4.2.2 Change profile...................................................................................503.4.2.3 Phone Setting....................................................................................513.4.2.4 Server Setting....................................................................................523.4.2.5 Controls.............................................................................................533.4.2.6 Alarm.................................................................................................54
3.4.3 Biểu đồ Activity......................................................................................543.4.3.1 Change profile...................................................................................543.4.3.2 Android send data.............................................................................553.4.3.3 Send data to serial port......................................................................563.4.3.4 Serial port send data to Server..........................................................563.4.3.5 Server send data to Android..............................................................573.4.3.6 Android receiver Sms........................................................................57
3.5 Cài đặt hệ thống........................................................................................573.5.1 Một số hình ảnh trên hệ điều hành Android............................................583.5.2 Hình ảnh cài đặt trên Pc và Server..........................................................59
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI................................60
TÀI LIỆU THAM KHẢO....................................................................................62
SVTH: Nguyễn Văn Hiếu - 5 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
MỞ ĐẦUTrong quá trình công nghiệp hóa và hiện đại hóa đất nước, sự phát triển
mang tính cách mạng của khoa học kỹ thuật và công nghệ đã làm thay bộ mặt
nền sản xuất và xã hội nước ta. Trong đó sự phát triển mạnh mẽ trong lĩnh vực
điện tử, công nghệ thông tin và viễn thông đóng một vai trò rất quan trọng.
Hiện nay, điện thoại thông minh phát triển nhanh chóng, rất nhiều thiết bị
dân dụng và thiết bị sản xuất đã ứng dụng thành công các tính năng của điện
thoại thông minh vào việc điều khiển từ xa.
Ngôi nhà thông minh là một mô hình thu nhỏ của những tiến bộ khoa học
kỹ thuật. Với ngôi nhà này, chủ nhân có thể điều khiển được các vật dụng trong
nhà: bật, tắt một bóng đèn; đóng hoặc mở rèm của; điều chỉnh nhiệt độ trong
phòng; … hay theo dõi quá trình hoạt động trong nhà ở bất cứ nơi đâu thông qua
một hệ thống điều khiển.
Điều khiển thiết bị từ xa qua điện thoại di động đã ra đời và ngày càng
phát triển. Hệ thống này ngày càng hoàn thiện, không phụ thuộc vào khoảng
cách, độ tin cậy cao. Xuất phát từ thực tiễn này, em đã quyết định chọn đề tài:
“Thiết kế chương trình điều khiển thiết bị trên nền Android cho hệ thống
nhà thông minh”. Đề tài này còn khá đơn giản, nhưng em mong đề tài này sẽ
giúp ích cho nhưng ai quan tâm và mong muốn phát triển theo công nghệ điều
khiển kiểu này.
SVTH: Nguyễn Văn Hiếu - 6 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
CHƯƠNG 1: GIỚI THIỆU CHUNG1.1 Giới thiệu đề tài
Ngày nay cùng với sự phát triển mạnh mẽ của các ngành khoa học kỹ
thuật, công nghệ kỹ thuật điện tử mà trong đó đặc biệt là kỹ thuật điều khiển tự
động đóng vai trò quan trong mọi lĩnh vực khoa học kỹ thuật, quản lý, công
nghiệp, cung cấp thông tin…
Như chúng ta đã biết, gần như các thiết bị tự động trong nhà máy, trong
đời sống của các gia đình ngày nay là đều hoạt động độc lập với nhau. Mỗi thiết
bị có một quy trình sử dụng khác nhau tùy thuộc vào thiết lập, cài đặt của người
sử dụng. Chúng chưa có sự liên kết nào về mặt dữ liệu. Nhưng đối với hệ thống
điều khiển từ xa qua di động thì lại khác. Ở đây, các thiết bị tự động được kết nối
với nhau thành một hệ thống hoàn chỉnh qua một thiết bị trung tâm có thể giao
tiếp với nhau về mặt dữ liệu.
Điển hình của một hệ thống điều khiển thiết bị trong nhà thông minh qua
một chiếc điện thoại Smarth Phone gồm các thiết bị đơn giản như bóng đèn, quạt
máy, lò sưởi, đến các thiết bị tinh vi phức tạp như ti vi, máy giặt, máy điều hòa,
hệ thống báo động… Nó hoạt động như một ngôi nhà thông minh. Nghĩa là tất cả
các thiết bị này có thể giao tiếp với nhau về mặt dữ liệu thông qua một đầu não
trung tâm. Đầu não trung tâm ở đây có thể là một máy vi tính hoàn chỉnh, hoặc
có thể là một bộ vi xử lý đã được lập trình sẵn tất cả các chương trình điều khiển.
Bình thường, các thiết bị trong ngôi nhà này có thể điều khiển từ xa thông qua
một chiếc điện thoại Smarth Phone. Chẳng hạn với việc tắt đèn, bật máy điều
hòa… người chủ nhà chỉ cần thao tác một cách đơn giản trên chiếc Smarth
Phone của mình. Hơn nữa nếu có tình huống báo động như: rò rỉ gas, chống
trộm, có cháy… thì hệ thống sẽ tự động gửi cảnh báo đến chiếc Smarth Phone.
Hệ thống còn mang tính chất bảo mật. Nghĩa là chỉ có chủ nhà mới có account
để điều khiển được ngôi nhà này.
Từ những yêu cầu thực tế, những đòi hỏi ngày càng cao của cuộc sống,
cộng với sự phát triển mạnh mẽ của công nghệ Smarth Phone nên em đã chọn đề
SVTH: Nguyễn Văn Hiếu - 7 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
tài “Thiết kế chương trình điều khiển thiết bị trên nền Android cho hệ thống
nhà thông minh”.
1.2 Ý nghĩa khoa học của đề tài
Ngày nay cũng với sự tiến bộ của khoa học kỹ thuật, các thiết bị điện tử ra
đời ngày càng nhiều về chủng loại cũng như tính năng sử dụng. Bên cạnh đó nhu
cầu sử dụng các thiết bị một cách tự động ngày càng cao, con người ngày càng
muốn có nhiều thiết bị giải trí cũng như các thiết bị sinh hoạt với kỹ thuật và
công nghệ ngày càng cao. Có thể ở Việt Nam chưa phát triển mạnh mẽ trong lĩnh
vực này nhưng hiện nay ở trên thế giới, nhất là các quốc gia thuộc Châu Âu hay
Mỹ thì mô hình ngôi nhà thông minh được điều khiển từ xa phát triển rất mạnh
mẽ.
Từ những nhu vầu thực tế đó, em muốn đưa một phần những kỹ thuật hiện
đại của thế giới áp dụng vào điều kiện thực tế trong nước để có thể tạo ra một hệ
thống điều khiển thiết bị trong nhà từ xa thông qua một chiếc Smarth Phone. Đề
tài lấy cơ sở là SMS và TCP để điều khiển thiết bị. Việc điều khiển thiết bị có
cho phép người sự dụng có thể chọn một trong hai phương án. Nếu có Internet,
sử dụng cách truyền qua Internet sẽ tốn ít chi phí. Nhưng nếu bị mất Internet thì
người sử dụng có thể dùng SMS (khi có sóng điện thoại). Do đó người sử dụng
có thể điều khiển thiết bị trong nhà trong những trường hợp khác nhau.
1.3 Mục đích nghiên cứu
Đồ án được nghiên cứu và khảo sát và thực hiện với mục đích áp dụng
những kiến thức đã học trong nhà trường để thiết kế tạo ra một hệ thống “Điều
khiển từ xa bằng điện thoại di động’’ hoàn chỉnh.
Hệ thống điều khiển thiết bị từ xa bằng smarth phone bao gồm những
chức năng sau:
Người dùng cài đặt điều khiển SMS hoặc Internet.
Người dùng lựa chọn gửi dữ liệu điều khiển thiết bị bằng SMS hoặc
Internet.
Nhận dự liệu và hiện thị trạng thái cho thiết bị.
Cảnh báo cho người dùng biết sự cố.
1.4 Ý tưởng thiết kế
SVTH: Nguyễn Văn Hiếu - 8 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Thiết kế một phần mềm chạy trên điều hành Android là phần cốt lõi của
đề tài để điều khiển thiết bị, thiết kế một ứng dụng Client-Server để trao đổi dữ
liệu từ thiết bị với Android thông qua Internet.
1.5 Phương pháp nghiên cứu
Trong đề tài này, em đã sử dụng các phương pháp nghiên cứu.
Nghiên cứu tài liệu: bằng cách thu thập tài liệu từ sách, tạp chí, truy cập
tài liệu trên Internet, các đồ án khóa trước.
Tham khảo các hệ thống đã có: xem video thiết kế trên internet, tìm và lựa
chọn thiết bị điện thoại phù hợp cho thiết kế.
Phương pháp thực nghiệm: từ những ý tưởng và kiến thức của em kết hợp
với sự hướng dẫn tận tình của giáo viên hướng dẫn, em đã thử nghiệm và kiểm
thử để thiết kế được phần mềm một cách tối ưu nhất.
1.6 Đề cương nghiên cứu chi tiết
Đề tài này thực hiện gồm 3 chương:
Chương 1: Tập trung giới thiệu về đề tài, ý nghĩa khoa học, mục đích
nghiên cứu của đề tài, ý tưởng thiết kế, phương pháp nghiên cứu, đề cương
nghiên cứu chi tiết.
Chương 2: Nêu ra cơ sở lý thuyết liên quan: tổng quan về hệ điều hành
Android, Socket, Serial Port, Sms.
Chương 3: Nêu ra phương án thiết kế, sơ đồ tổng quát, chức năng của hệ
thống, biểu đồ Usecase, Ssequence, Activity. Quá trình cài đặt cho hệ thống
được thực hiện trên phần mềm Eclipse.
Đưa ra kết luận và phương hướng phát triển cho đề tài.
SVTH: Nguyễn Văn Hiếu - 9 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
1. Tổng quan về hệ điều hành Android
2.1.1. Giới thiệu về hệ điều hành Android
Android là hệ điều hành điện thoại di động mở nguồn mở miễn phí do
Google phát triển dựa trên nền tảng của Linux. Bất kỳ một hãng sản xuất phần
cứng nào cũng đều có thể tự do sử dụng hệ điều hành Android cho thiết bị của
mình, miễn là các thiết bị ấy đáp ứng được các tiêu chuẩn cơ bản do Google đặt
ra (có cảm ứng chạm, GPS).
Tháng 7/2005, Google mua lại công ty phát triển phần mềm điện thoại
Android, nhưng chưa công bố sẽ sử dụng cho mục đích gì. Để trả lời cho câu hỏi
đó, tháng 11/2007, sau 2 năm phát triển, Google công bố hệ điều hành điện thoại
di động mã nguồn mở Android, cùng với sự thành lập “Liên minh di động mở”
(Open Handset Alliance) bao gồm hơn 65 nhà sản xuất phần cứng điện thoại lớn
trên thế giới như Intel, HTC, China Mobile, T-Mobile,....
Hình 2.1: Các thành viên của "Liên minh di động mở"
Tứ năm 2007, hệ điều hành Android đã trải qua nhiều lần cập nhật, với
phiên bản gần đây nhất là Gingerbread 2.3, ra ngày 06/12/2010. Tính đến tháng
6/2010, đã có khoảng 70 mẫu điện thoại di động sử dụng hệ điều hành Android,
chưa kể các thiết bị điện tử khác như máy tính bảng (tablet computers), ebook
readers, Google TV,...
Android là nền tảng cho thiết bị di động bao gồm một hệ điều hành,
midware và một số ứng dụng chủ đạo. Bộ công cụ Android SDK cung cấp các
SVTH: Nguyễn Văn Hiếu - 10 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
công cụ và bộ thư viên các hàm API cần thiết để phát triển ứng dụng cho nền
tảng Android sử dụng ngôn ngữ lập trình java.
Những tính năng mà nền tảng Android hỗ trợ:
Application framework: Cho phép tái sử dụng và thay thế các thành phần
sẵn có của Android.
Dalvik virtual macine: Máy ảo java được tối ưu hóa cho thiết bị di động.
Intergrated browser: Trình duyệt web tích hợp được xây dựng dựa trên
WebKit engine.
Optimized graphics: Hỗ trợ bộ thư viện 2D và 3D dựa vào đặc tả
OpenGL ES 1.0.
SQLite: DBMS dùng để lưu trữ dữ liệu có cấu trúc.
Hỗ trợ các định dạng media phổ biến như: MPEG4, H.264, MP3, AAC,
ARM, JPG, PNG, GIF.
Hỗ trợ thoại trên nền tảng GSM (Phụ thuộc vài phần cứng thiết bị).
Bluetooth, EDGE, 3G và WiFi (Phụ thuộc vài phần cứng thiết bị).
Camera, GPS, la bàn và cảm biến (Phụ thuộc vài phần cứng thiết bị).
Bộ công cụ phát triển ứng dụng.
2.1.2. Kiến trúc hệ điều hành 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 2.2: Cấu trúc stack hệ thống Android
SVTH: Nguyễn Văn Hiếu - 11 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
2.1.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.
2.1.2.2 Application framework
Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấ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, thêm các thông
báo để các thanh trạng thái, và nhiều, nhiều hơn nữa.
Nhà phát triển có thể truy cập vào các API 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.
Activity Maanager được dùng để quản lý chu trình sống của ứng dụng và
điều hướng các Activity.
2.1.2.3 Library
SVTH: Nguyễn Văn Hiếu - 12 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
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. Một số các thư viện cơ bản được liệt kê dưới đây:
System C library - a BSD-derived implementation of the standard C
system library (libc), tuned for embedded Linux-based devices.
Media Libraries - based on PacketVideo's OpenCORE; the libraries
support playback and recording of many popular audio and video
formats, as well as static image files, including MPEG4, H.264, MP3,
AAC, AMR, JPG, and PNG.
Surface Manager - quản lý việc truy xuất vào hệ thống hiển thị.
LibWebCore - a modern web browser engine which powers both the
Android browser and an embeddable web view.
SGL - the underlying 2D graphics engine.
3D libraries - an implementation based on OpenGL ES 1.0 APIs, the
libraries use either hardware 3D acceleration (where available) or the
included, highly optimized 3D software rasterizer.
FreeType - bitmap and vector font rendering.
SQLite - a powerful and lightweight relational database engine available to
all applications.
2.1.2.4 Kernel
Android dựa trê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.
2.1.3. Android Emulator
Android SDK và Plugin Eclipse được gọi là một Android Deverloper Tool
(ADT). Các Android coder sẽ cần phải sử dụng công cụ IDE (Integrated
Development Enveronment) này để phát triển, debugging và testing cho ứng
dụng. Tuy nhiên, các coder cũng có thể không cần phải sử dụng IDE mà thay
vào đó là sử dụng command line để biên dịch và tất nhiên là vẫn có Emulator
như thường.
SVTH: Nguyễn Văn Hiếu - 13 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Android Emulator được trang bị đầy đủ hầu hết các tính năng của một
thiết bị thật. Tuy nhiên, một số đã bị giới hạn như là kết nối qua cổng USB,
camera và video, nghe phone, nguồn điện giả lập và bluetooth.
Android Emulator thực hiện các công việc thông qua một bộ xử lý mã
nguồn mở, công nghệ này được gọi là QEMU (http://bellard.org/qemu/) được
phát triển bởi Fabrice Bellard.
Hình 2.3: Android emulator
SVTH: Nguyễn Văn Hiếu - 14 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
2.1.4. Các thành phần trong một Android project
Hình 2.4: Cấu trúc thư mục và file của một dự án phần mềm Android trên
Eclipse
AndroidManifest.xml: file XML mô tả ứng dụng và các thành phần được cung cấp bởi ứng dụng (activities, Services,...).
build.xml: Một file chứa mã script Ant (ant.apache.com) nhằm compile và cài đặt ứng dụng lên máy.
default.properties: file property tạo bởi script Ant trên.
bin/ : nơi chứa ứng dụng sau khi được compile.
bin/classes/ : chứa các lớp Java đã được compile.
bin/classes.dex : chứa các file executable tạo bởi các lớp Java.
SVTH: Nguyễn Văn Hiếu - 15 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
bin/yourapp.ap_ : chứa các tài nguyên của ứng dụng, đóng gói thành 1 file zip.
bin/yourapp-debug.apk hay bin/yourapp-unsigned.apk : chứa chính ứng dụng Android.
libs/ : nơi chứa các file Java JAR ứng dụng yêu cầu (third party).
src/ : nơi chứa mã nguồn Java của ứng dụng.
res/ : chứa các tài nguyên của ứng dụng, như các icons, GUI layouts,...
res/drawable/ : chứa file hình ảnh (PNG, JPEG,...).
res/layout/ : chứa UI layout, dưới dạng XML.
res/menu/ : chi tiết các menu, dưới dạng XML.
res/raw/ : chứa các file khác (CSV chứa thông tin account,...).
res/values/ : chứa các strings, dimensions,...
res/zml/ : chứa các file XML khác cần cho ứng dụng.
assets/ : nơi chứa các files tĩnh (static) được yêu cầu đi kèm với ứng dụng.
2.1.4.1 Tầng ứng dụng
Trong bất kì một 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 screen 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ư main Activity 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.
Dưới đây là nội dung của một file AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tnut.edu.control.device"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
SVTH: Nguyễn Văn Hiếu - 16 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_SMS"/>
<application
android:allowBackup="true"
android:icon="@drawable/air"
android:theme="@android:style/Theme.NoTitleBar">
<Activity
android:name="tnut.edu.control.login.LoginActivity"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</application>
</manifest>
Application
Thẻ <application>, bên trong thẻ này chứa các thuộc tính được định nghĩa
cho ứng dụng Android như:
android:icon = “drawable resource” Ở đây đặt đường dẫn đến file icon
của ứng dụng khi cài đặt. VD: android:icon = “@drawable/icon”.
android:name = “string” thuộc tính này để đặt tên cho ứng dụng
Android. Tên này sẽ được hiển thị lên màn hình sau khi cài đặt ứng
dụng.
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…
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 như sau:<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
SVTH: Nguyễn Văn Hiếu - 17 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_SMS"/>
SDK version
Thẻ xác định phiên bản SDK được khai báo như sau:<uses-sdk android:minSdkVersion="8"/>
Ở đây chỉ ra phiên bản SDK nhỏ nhất mà ứng dụng hiện đang sử dụng.
2.1.4.2 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ư 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.
Dưới đây là nội dung của một file R.java:package com.example.tnut.edu.control.device;
public final class R {
public static final class array {
public static final int baudrate=0x7f060003;
public static final int databits=0x7f060001;
public static final int lamp=0x7f060004;
public static final int optionphone=0x7f060005;
public static final int optionssenddata=0x7f060006;
public static final int optiontemperature=0x7f060007;
public static final int parity=0x7f060000;
public static final int stopbits=0x7f060002;
}
public static final class attr {
SVTH: Nguyễn Văn Hiếu - 18 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
}
public static final class color {
public static final int disenable=0x7f040004;
public static final int tabDark=0x7f040001;
public static final int tabMedium=0x7f040000;
public static final int tabTransparent=0x7f040002;
public static final int white=0x7f040003;
}
public static final class dimen {
/** Default screen margins, per the Android Design guidelines.
*/
public static final int Activity_horizontal_margin=0x7f050000;
public static final int Activity_vertical_margin=0x7f050001;
public static final int corner_radius=0x7f050002;
public static final int tab_space=0x7f050004;
public static final int tab_space_bottom_line=0x7f050006;
public static final int tab_space_plus1=0x7f050005;
public static final int tab_space_top=0x7f050003;
public static final int tab_space_unselected_top=0x7f050007;
}
public static final class drawable {
public static final int about=0x7f020000;
public static final int about1=0x7f020001;
public static final int add=0x7f020002;
}
}
2.1.5. Các thành phần cơ bản trong một ứng dụng
2.1.5.1 Activity
Định nghĩa Activity
Là thành phần tối quan trọng của bất kỳ một ứng dụng Android nào. Thuật
ngữ Activity chỉ một việc mà người dùng có thể thực hiện trong một ứng dụng
Android. Do gần như mọi Activity đều tương tác với người dùng, lớp Activity
đảm nhận việc tạo ra một cửa sổ (window) để người lập trình đặt lên đó một giao
diện UI với setContentView(View). Một Activity có thể mang nhiều dạng khác
nhau. Một cửa sổ toàn màn hình (full screen window), một cửa sổ floating (với
windowsIsFloating) hay nằm lồng bên trong 1 Activity khác (với
ActivityGroup).
SVTH: Nguyễn Văn Hiếu - 19 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Có 2 phương thức mà gần như mọi lớp con của Activity đều phải hiện
thực:
onCreate(Bundle) - Nơi khởi tạo Activity. Quan trọng hơn, đây chính
người lập trình gọi setContentView(int) kèm theo layout để thể hiện UI của riêng
mình. Đồng thời còn có findViewById(int) giúp gọi các widget (buttons, text
boxes, labels, ...) để dùng trong UI.
onPause() - Nơi giải quyết sự kiện người dùng rời khỏi Activity. Mọi dữ
liệu được người dùng tạo ra tới thời điểm này cần phải được lưu vào
ContentProvider.
Vòng đời của một Activity
Các Activity được quản lí dưới dạng các Activity stack - First-In-Last-
Out: Khi một Activity mới được khởi tạo, nó sẽ được đưa lên trên cùng stack,
các Activity khác muốn chạy trên nền (foreground) trở lại thì cần phải chờ tới
khi Activity mới này kết thúc.
Một Activity có 4 trạng thái:
Active hay Running: Khi một Activity đang chạy trên màn hình.
Paused: Khi một Activity vẫn đang chạy trên màn hình nhưng đang bị
một Activity trong suốt (transparent) hay không chiếm toàn màn hình hiển thị
phía trên. Tuy vẫn lưu trữ dữ liệu, nhưng các paused Activity này sẽ bị hệ thống
bắt chấm dứt khi đang thiếu bộ nhớ trầm trọng.
Stopped: Khi 1 Activity bị che khuất hoàn toàn bởi 1 Activity khác. Tuy
vẫn lưu trữ dữ liệu, nhưng các stopped Activity này sẽ thường xuyên bị hệ thống
bắt chấm dứt để dành chỗ cho các tiến trình khác.
Killed hay Shut down: Khi 1 Activity đang paused hay stopped, hệ thống
sẽ xóa Activity ấy ra khỏi bộ nhớ.
SVTH: Nguyễn Văn Hiếu - 20 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hình 2.5: Lược đồ vòng đời của 1 Activity
Dựa vào lược đồ trên, thấy được có 3 vòng lặp quan trọng sau:
Vòng đời toàn diện (Entire Lifetime): Diễn ra từ lần gọi
onCreate(Bundle) đầu tiên và kéo dài tới lần gọi onDestroy() cuối cùng.
Vòng đời thấy được (Visible Lifetime): Diễn ra từ khi gọi onStart() và
kéo dài tới khi gọionStop(). Ở vòng đời này, Activity được hiển thị trên màn
SVTH: Nguyễn Văn Hiếu - 21 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
hình nhưng có thế không tương tác với người dùng ở trên nền. Các phương thức
onStart() và onStop() có thể được gọi nhiều lần.
Vòng đời trên nền (Foreground Lifetime): Diễn ra từ khi gọi
onResume() và kéo dài tới khi gọi onPause(). Ở vòng đời này, Activity nằm trên
mọi Activity khác và tương tác được với người dùng. Một Activity có thể liên
tục thay đổi giữa 2 trạng thái paused và resumed, chẳng hạn khi thiết bị sleep hay
1 intent mới được đưa tới.
Toàn bộ vòng đời của 1 Activity được định nghĩa nhờ các phương thức
sau:
Phương thức: onCreate()
Được gọi khi Activity lần đầu tiên được tạo. Ở đây làm tất cả các cài
đặt tĩnh, tạo các view, kết nối dữ liệu đến list,…
Phương thức này gửi qua một đối tượngBundle chứa đựng từ trạng thái
trước của Activity.
Luôn theo sau bởi onStart().
Phương thức: onRestart()
Được gọi sau khi Activity đã được dừng, chỉ một khoảng đang khởi
động lần nữa (stared again)
Luôn theo sau bởi onStart().
Phương thức: onStart()
Được gọi trước khi một Activity visible với người dùng.
Theo sau bởi onResume() nếu Activity đến trạng thái foreground
hoặc onStop() đế nó trở nên ẩn.
Phương thức: onResume()
Được gọi trước khi Activity bắt đầu tương tác với người dùng
Tại thời điểm này Activity ở trên đỉnh của stack Activity.
Luôn theo sau bởi onPause().
Phương thức: onPause()
Được gọi khi hệ thống đang resuming Activity khác.
Phương thức này là điển hình việc giữ lại không đổi dữ liệu.
SVTH: Nguyễn Văn Hiếu - 22 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Nó lên được diễn ra một cách nhanh chóng bởi vì Activity kế tiếp sẽ
không được resumed ngay cho đến khi nó trở lại.
Theo sau bởi onResume nếu Activity trở về từ ở trước, hoặc bởi
onStop nếu nó trở nên visible với người dùng.
Trạng thái của Activity có thể bị giết bởi hệ thống.
Phương thức: onStop()
Được gọi khi Activity không thuộc tầm nhìn của người dùng.
Nó có thể diễn ra bởi vì nó đang bị hủy, hoặc bởi vì Activity khác vữa
được resumed và bao phủ nó.
Được theo sau bởi onRestart() nếu Activity đang trở lại để tương tác
với người dùng, hoặc onDestroy() nếu Activity đang bỏ.
Trạng thái của Activity có thể bị giết bởi hệ thống.
Phương thức: onDestroy()
Được gọi trước khi Activity bị hủy.
Đó là lần gọi cuối cùng mà Activity này được nhận.
Nó được gọi khác bởi vì Activity đang hoàn thành, hoặc bởi vì hệ
thống tạm thởi bị hủy diệt để tiết kiệm vùng nhớ.
Có thể phân biệt giữa 2 kịch bản với phương isFinshing().
Trạng thái của Activity có thể được giết bởi hệ thống.
2.1.5.2 Intent
Khái niệm 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, ứ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.
SVTH: Nguyễn Văn Hiếu - 23 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hình 2.6: Truyền dữ liệu giữa 2 Activity
Thành phần chính của Intent
Action: Xác định hành động sẽ được thực thi, các hành động này có thể
là: ACTION_VIEW, ACTION_EDIT, ACTION_SEND…
Data: Các dữ liệu được sử dụng để hành động (Action) thao tác trên nó,
như bản ghi về một người nào đó trong cơ sở dữ liệu chứa các contact của thiết
bị.
Ví dụ về thành phần action/data: Send emailIntent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
email.putExtra(Intent.EXTRA_SUBJECT, "subject");email.putExtra(Intent.EXTRA_TEXT, "message");email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an
Email client :"));
2.1.5.3 Service
Định nghĩa Service
Một Service là một thành phần của ứng dụng, thể hiện mong muốn ứng
dụng thực hiện các hành động trong khi không tương tác với người dùng hoặc
cung cấp chức năng cho các ứng dụng khác sử dụng. Nói một cách đơn giản,
Service là các tác vụ (task) chạy ngầm dưới hệ thống nhằm thực hiện một nhiệm
vụ nào đó. Mỗi class Service phải chứa thẻ <Service> được khai báo trong file
AndroidManifext.xml. Services có thể được bắt đầu bởi Context.startService()
và Context.bindService().
Cũng như các đối tượng của ứng dụng khác, Services chạy trên luồng
(Thread) của tiến trình chính. Có nghĩa là nếu Service dự định chạy các hành vi
SVTH: Nguyễn Văn Hiếu - 24 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
có cường độ lớn hoặc các hành vi có thể gây nghẽn mạch, nó sẽ tự sinh ra luồng
(Thread) của chính nó để làm thực hiện các tác vụ được đặc tả trong Service.
Service không phải là một tiến trình độc lập. Đối tượng Service không
chạy trên tiến trình (process) của riêng nó (trừ khi có một yêu cầu đặc biệt),
Service chạy trên tiến trình của chương trình.
Service không phải là một luồng (thread).
Service có chứa 2 đặc trưng cơ bản sau:
Là một chức năng để ứng dụng thông báo với hệ thống về việc mà nó
muốn thực hiện ở phía dưới nền (ngay cả khi người dùng không tương tác trực
tiếp tới ứng dụng). Điều này tương ứng với việc gọi phương thức
Context.startService(), nó sẽ yêu cầu hệ thống lên lịch cho Service để chạy cho
đến khi bị chính Service hay người nào đó dừng nó lại.
Là một chức năng cho phép ứng dụng để cung cấp các chức năng của nó
cho các ứng dụng khác. Điều đó tương ứng với việc gọi Context.bindService(),
cho phép một long-standing connection được tạo ra để Service có thể tương tác
với nó.
Khi một Service được tạo ra, việc hệ thống cần làm là tạo ra thành phần và
gọi hàm onCreate() và bất kỳ lệnh callback thích hợp nào trên luồng chính. Nó
phụ thuộc vào Service thi hành hành vi thích hợp nào, chẳng hạn tạo luồng thứ
hai để thực hiện tiến trình.
Vòng đời của 1 Service
Có 2 lý do để một Service được chạy bởi hệ thống. Bằng cách gọi phương
thức Context.startService() và Context.bindService(). Nếu người dùng gọi
phương thức Context.startService() thì hệ thống sẽ nhận về một đối tượng
Service (tạo mới nó và gọi hàm onCreate() nếu cần thiết) và sau đó lại gọi
phương thức onStartCommand(Intent, int, int) với các biến được cung cấp bởi
client. Service mới được tạo ra này sẽ chạy cho tới khi có lệnh gọi phương thức
Context.stopService() hoặc stopSelf(). Dù cho một Service có được start bao
nhiều lần đi nữa thì nó sẽ bị tắt ngay khi phương thức Context.stopService() hoặc
phương thức stopSelf() được gọi Service có thể dùng phương thức stopSelf(int)
SVTH: Nguyễn Văn Hiếu - 25 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
để đảm bảo rằng Service sẽ không được tắt cho đến khi Intent đã khởi tạo nó
được xử lý.
Hình 2.7: Lược đồ vòng đời của 1 Service
Dựa theo hình trên, 1 Service được bắt đầu bởi phương thức startService()
là Service dùng để thực hiện các tác vụ ngầm dưới nền, Service được bắt đầu bởi
phương thức bindService() là Service được dùng để cung cấp các chức năng cho
các chương trình khác
BroadcastReceiver
Là lớp nhận về các intents được gửi bởi sendBroadcast(). Có thể tạo
instance cho lớp này bằng 2 cách: hoặc với Context.registerReceiver() hay thông
qua tag <receiver> trong file AndroidManifest.xml.
Có hai lớp broadcast quan trọng cần xét đến:
Normal broadcasts: Được gửi bởi context.sendBroadcast tới các
receivers hoàn toàn không theo 1 trật tự nào, dẫn tới đôi khi tồn tại cùng 1 lúc
nhiều receivers khác nhau. Tuy nhanh nhưng không thể trao đổi kết quả nhận về
giữa các receivers với nhau.
SVTH: Nguyễn Văn Hiếu - 26 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Ordered broadcasts: Được gửi bởi Context.sendOrderedBroadcast() tới
từng receiver một. Như vậy, kết quả nhận về của 1 receiver có thể trở thành input
của 1 receiver khác, hay có thể ngay lập tức dừng việc broadcast tới các receiver
khác. Trật tự chạy các receivers được quyết định bởi thuộc tính android:priority
trong intent-filter tương ứng.
2.1.5.4 Content Provider
Là nơi lưu trữ và cung cấp cách truy cập dữ liệu do các ứng dụng tạo nên.
Đây là cách duy nhất mà các ứng dụng có thể chia sẻ dữ liệu của nhau.
Android cung cấp sẵn content providers cho 1 số kiểu dữ liệu thông dụng
như âm thanh, video, thông tin sổ điện thoại,... Người lập trình cũng có thể tự tạo
ra các class con (subclass) của Content Provider để lưu trữ kiểu dữ liệu của riêng
mình.
Cách thức hoạt động của Content Provider:
Mọi content provider, tuy có thể khác nhau về cách thức lưu trữ dữ liệu,
đều sử dụng chung 1 interface để tìm và trả về dữ liệu, bao gồm việc thêm, bớt
và sửa dữ liệu. Việc này được thực hiện thông qua các đối tượng
ContentResolver khi gọi getContentResolver()
ContentResolver cr = getContentResolver();
Content providers sử dụng dữ liệu dưới dạng 1 table đơn giản, trong đó
mỗi hàng là 1 record và mỗi cột là dữ liệu của 1 kiểu nhất định.
URI (Uniform Resource Identifier)
URI là dãy các ký tự string được dùng để:
Chỉ tới các file tài nguyên có sẵn trong máy (Ví dụ: 1 file video, danh sách
contacts,...), bắt đầu với "content://"
Hình 2.8: Các thành phần của 1 URI
A – Tiền tố mặc định của 1 URI, không thay đổi được.
B – Xác định content provider. Đối với các ứng dụng hãng thứ 3, đây chính là tên đầy đủ của 1 lớp.
SVTH: Nguyễn Văn Hiếu - 27 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
C – Xác định loại dữ liệu nào cần lấy về. Nếu nguồn cung cấp chỉ cho lấy 1 loại duy nhất thì có thể để trống, hoặc nếu có nhiều loại thì có thể phân ra từng phần 1 (land/bus, land/train, sea/ship,…)
D – ID của 1 record, khi cần lấy về chỉ duy nhất 1 record
Khi tạo 1 content provider, Android tự động tạo 1 constant cho URI của provider đó để đảm bảo code hiệu quả và dễ cập nhật sau này. Constant này - CONTENT_URI - sẽ xác định cho ContentProvider phải liên kết với bảng nào của nguồn cung cấp.
Ví dụ:
URI cho bảng liên kết số điện thoại với tên người là:
android.provider.Contacts.Phones.CONTENT_URI
URI cho bảng liên kết hình đại diện với tên người là:
android.provider.Contacts.Photos.CONTENT_URI
Tìm kiếm 1 Content Provider
Để bắt đầu tìm kiếm (query) 1 content provider, trước nhất người lập trình cần có trong tay các yếu tố sau:
URI xác định provider.
Tên các trường (field) dữ liệu sẽ lấy về.
Các kiểu dữ liệu của những trường trên.
ID, chỉ khi cần tìm 1 record xác định nào đó.
Để bắt đầu tìm kiếm, người lập trình có thể dùng 1 trong 2 phương thức:
ContentResolver.query() hoặc Activity.managedQuery(). Cả 2 phương thức trên
đều có chung arguments và đều trả về 1 đối tượng con trỏ (Cursor).public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)public final Cursor managedQuery (Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder)
Đầu tiên, dù với query() hay managedQuery() thì đều cần cung cấp URI
của bên cung cấp, tức CONTENT_URI. Chú ý nếu muốn giới hạn chỉ tìm kiếm 1
URI duy nhất, ta thêm ID vào cuốiURI như sau: “content://.../23”, với 23 là ID ta
cần tím kiếm
SVTH: Nguyễn Văn Hiếu - 28 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hoặc có thể dùng các hàm hỗ trợ như ContentUris.withAppended() và
Uri.withAppendedPath().
Các biến truyền vào khác của query() và managedQuery() là:
projection - Tên của cột dữ liệu cần trả về. Nếu NULL thì trả về tất cả các
cột.
selection - Tên các hàng dữ liệu sẽ trả về. Sử dụng với WHERE giống như
khi truy vấn SQL. Nếu NULL thì trả về tất cả các hàng.
selectionArgs - Quy định giá trị trả về. Ví dụ: selectionArgs =
{value_as_string} sẽ ép kiểu dữ liệu trả về dưới dạng string.
sortOrder - Xác định thứ tự sắp xếp các hàng. Sử dụng với ORDER BY
giống như khi truy vấn SQL. Nếu NULL thì không theo thứ tự.
2.1.5.5 View
View Group
ViewGroup thực ra chính là View hay nói đúng hơn thì ViewGroup chính
là các widget Layout được dùng để bố trí các đối tượng khác trong một screen.
Có một số loại ViewGroup như sau:
LinearLayout
LinearLayout được dùng để bố trí các thành phần giao diện theo chiều
ngang hoặc chiều dọc nhưng trên một line duy nhất mà không có xuống dòng.
LinearLayout làm cho các thành phần trong nó không bị phụ thuộc vào
kích thước của màn hình. Các thành phần trong LinearLayout được dàn theo
những tỷ lệ cân xứng dựa vào các ràng buộc giữa các thành phần.
SVTH: Nguyễn Văn Hiếu - 29 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hình 2.9: Bố trí các widget sử dụng LinearLayout
FrameLayout
FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như là
các Layer trong Photoshop. Những đối tượng nào thuộc Layer bên dưới thì sẽ bị
che khuất bởi các đối tượng thuộc Layer nằm trên. FrameLayer thường được sử
dụng khi muốn tạo ra các đối tượng có khung hình bên ngoài chẳng hạn như
contact image button.
Hình 2.10: Bố trí các widget sử dụng FrameLayout
SVTH: Nguyễn Văn Hiếu - 30 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
AbsoluteLayout
Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong
layout dựa vào 2 thuộc tính toạ độ x, y. Tuy nhiên, kiểu layout này rất ít khi
được dùng bởi vì toạ độ của các đối tượng luôn cố định và sẽ không tự điều
chỉnh được tỷ lệ khoảng cách giữa các đối tượng. Khi chuyển ứng dụng sang một
màn hình có kích thước với màn hình thiết kế ban đầu thì vị trí của các đối tượng
sẽ không còn được chính xác như ban đầu.
RetaliveLayout
Layout này 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ột mối 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 widget hoặc so với layout parent. Dựa vào những mối ràng buộc
đó mà RetaliveLayout cũng không phụ thuộc vào kích thước của screen thiết bị.
Ngoài ra, nó còn có ưu điểm là giúp tiết kiệm layout sử dụng nhằm mục đích
giảm lượng tài nguyên sử dụng khi load đồng thời đẩy nhanh quá trình xử lý.
Hình 2.11: Bố trí widget trong RetaliveLayout
SVTH: Nguyễn Văn Hiếu - 31 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
TableLayout
Layout này đượ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 các row và column. Chẳng hạn như, giao diện của một
chiếc máy tính đơn giản hoặc một danh sách dữ liệu.
Hình 2.12: Bố trí widget trong TableLayout
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 ứng dụng
Android.
Để thiết kế giao diện với một button ta có 2 cách như sau:
Thiết kế bằng XML<Button
android:id="@+id/btnokmessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="OK" />
SVTH: Nguyễn Văn Hiếu - 32 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Thiết kế bằng code
Thực ra mà nói thì nếu không phải đòi hỏi phải custom lại một
widget thì không cần phải sử dụng tới code. Trong một số trường
hợp bắt buộc chúng ta phải custom các widget để cho phù hợp với
hoàn cảnh. Chẳng hạn như trong game, các menu hay các nút điều
khiển,… Để khai báo một Button trong code làm như sau:Button btn=new Button(this);
btn.setText("OK");
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
ImageButton
Cũng tương tự như Button, ImageButton chỉ có thêm một thuộc tính.<ImageButton
android:id="@+id/kitchenmicrowavebtnon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@color/tabTransparent"
android:padding="10dp"
android:src="@drawable/on" />
ImageView
Được dùng để thể hiện một hình ảnh. Nó cũng giống như ImageButton,
chỉ khác là không có hình dáng của một cái button.
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 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 thì cần phải có 3 yếu tố
chính:
SVTH: Nguyễn Văn Hiếu - 33 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
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 2.13: Minh hoạ cho một ListView
TextView
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.
VD:TextView textView = (TextView)findViewById(R.id.tv);
CharSequence styledText =
Html.fromHtml("<i>This</i> is some <b>styled</b> <s>text</s>");
textView.setText(styledText);
Nội dung TextView cũng có thể được định dạng bằng thẻ html ngay trong
XML.
SVTH: Nguyễn Văn Hiếu - 34 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
EditText
Trong Android đối tượng EditText được sử dụng như một TextField hoặc
một TextBox.<EditText
android:id="@+id/edInputPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="phone" >
<requestFocus />
</EditText>
Các thuộc tính cần chú ý sử dụng EditText đó là:
android:inputType = “…” sử dụng để xác định phương thức
nhập cho EditText. Chẳng hạn như khi muốn một ô để nhập
Password hay một ô để nhập Email thì thuộc tính này sẽ làm điều
đó.
android:singleLine = “true” EditText sẽ trở thành một TextField,
ngược lại sẽ là TextBox.
CheckBox
Nhận 2 giá trị true hoặc false. Đối tượng CheckBox cho phép chọn nhiều
item cùng một lúc.
Khai báo: CheckBox cb = new CheckBox(Context …);<CheckBox
android:id="@+id/CheckBox01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check me"
android:checked="true"/>
Spinner
Cho phép lựa chọn một giá trị xác định. Tham số truyền vào là một mảng.
Khai báo:<Spinner
android:id="@+id/livingroomsptemperature"
android:layout_width="80dp"
android:layout_height="44dp"
android:layout_gravity="center"
SVTH: Nguyễn Văn Hiếu - 35 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
android:layout_weight="1"
android:entries="@array/optiontemperature" />
GridView
GridView sử dụng cũng giống như ListView. Điểm khác nhau ở đây là
GridView có thiết lập số cột:<GridView
android:id="@+id/gridView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/background1"
android:gravity="top"
android:numColumns="auto_fit"
android:padding="5dp"
android:stretchMode="columnWidth"
android:numColumns="3"
</GridView>
android:numColumns=″3″, Tức là Gridview sẽ ngắt dòng khi đủ 3
phần tử còn việc đưa dữ liệu lên như thế nào thì nó giống như làm với ListView.
TabHost, TabLayout
Đơn giản là nó gồm 2 phần chia ra riêng biệt, phần nhỏ hiển thị tổng
quát các chức năng và phần lớn hiển thị nội dung của mỗi chức năng.
Nó thuận tiện và dễ quản lý hơn menu rất nhiều.
VD:Phương thức thêm tabhostpublic void addTab(FragmentActivity Activity, String labelId,int drawable,TabHost tabHost,
TabInfo tabInfo)
{
TabHost.TabSpec tabSpec=tabHost.newTabSpec("tab"+ labelId);
View
tabIndicator=LayoutInflater.from(Activity).inflate(R.layout.tab_indicator,
tabHost.getTabWidget(),false);
TextView title=(TextView)tabIndicator.findViewById(R.id.title);
title.setText(labelId);
title.requestFocus();
ImageView icon=(ImageView)tabIndicator.findViewById(R.id.icon);
icon.setImageResource(drawable);
tabSpec.setIndicator(tabIndicator);
tabSpec.setContent(new TabFactory(Activity));
tabHost.addTab(tabSpec);
SVTH: Nguyễn Văn Hiếu - 36 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
}
2.1.5.6 Lưu trữ dữ liệu
SharedPreferences
SharedPreferences là kỹ thuật lưu trữ dữ liệu đơn giản, dùng để lưu trữ
những data nhỏ và không quá phức tạp, các biến khi cần dùng lại trong lần sau
Khởi tạo đối tượng:SharedPreferences preferences = Context.getSharedPreferences(name, mode);
Name: Tên của file lưu trữ preference
Mode: Chế độ thi hành của file, mặc định MODE_PRIVATE
Ghi dữ liệu:preferences.edit().put[Type]("key",value).commit();
Type: Kiểu dữ liệu lưu trữ
Key: Kên từ khóa lưu trữ
Value: Giá trị lưu trữ
Ví dụ : preferences.edit().putInt("mykey", 100).commit();
Đọc dữ liệu:preferences.get[type]("key",defaultValue);
DefaultValue: Giá trị lưu trữ mặc định trả lại trong trường hợp không tìm
thấy key tương ứng
Ví dụ: int key = preferences.getInt(“mykey”, 0);
Lấy SharedPreferences từ hệ thống, mỗi SharedPreferences có 1 key để
nhận dạng, và mỗi chương trình sẽ cần 1 key để lấy SharedPreferences ra.
MODE_PRIVATE: Cho phép truy xuất SharedPreferences từ 1 ứng
dụng.
MODE_APPEND: cho phép ghi tiếp vào nếu đã tồn tại.
MODE_WORLD_WRITEABLE: Các ứng dụng khác có thể truy
xuất 100% (đọc, ghi).
MODE_WORLD_READABLE: Các ứng dụng khác chỉ có thể đọc.
SVTH: Nguyễn Văn Hiếu - 37 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
SQLite
SQLite là một dạng CSDL tương tự như Mysql, PostgreSQL... Đặc
điểm của SQLite là gọn, nhẹ, đơn giản. Chương trình gồm 1 file duy nhất
có kích thước chưa đến 500kB, không cần cài đặt, không cần cấu hình hay khởi
động mà có thể sử dụng ngay. Dữ liệu database cũng được lưu ở một file duy
nhất. Không có khái niệm user, password hay quyền hạn trong SQLite.
SQLite không thích hợp với những hệ thống lớn nhưng ở quy mô
vừa tầm thì SQLite phát huy uy lực và không hề yếu kém về mặt chức năng hay
tốc độ. Với các đặc điểm trên SQLite được sử dụng nhiều trong việc phát triển,
thử nghiệm v..v.. và là sự lưa chọn phù hợp cho những người bắt đầu học
database. Hiện nay thì SQLite đã được ứng dụng vào smartphone như iPhone và
Android để lưu trữ dữ liệu.
Để có thể dễ dàng thao tác với SQLite chúng ta có thể sử dụng trình duyệt
FireFox và tải về plugin SQLite tại link sau:
http://code.google.com/p/sqlite-manager/
Sau khi tải về file xpi, kéo file này vào cửa sổ firefox để cài đặt plugin.
Sau khi cài đặt plugin xong thì vào Menu_tools trong firefox sẽ có
chức năng SQLite Manager. Giao diện của SQLite manager trong firefox như
sau:
Hình 2.14: SQLite Manager
Sau đây là một ví dụ đơn giản:
SVTH: Nguyễn Văn Hiếu - 38 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Tạo bảng trong SQLitepublic static final int DATABASE_VERSION=1;
public static final String DATABASE_NAME="phone.db";
public static final String TABLE_NAME="tblphone";
//tao cotKEYint
public static String KEY_PHONE="phone";
public static String KEY_DEVICE="device";
//cau lenh truy van tao bang
public static final String CREATE_TABLE=" CREATE TABLE " + TABLE_NAME +
"("+ KEY_PHONE+ " TEXT PRIMARY KEY , "
+ KEY_DEVICE + " TEXT)";
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_TABLE);
}
Ở đây :
DATABASE_VERSION: Chỉ version của database.
DATABASE_NAME: Tên database.
TABLE_NAME: Tên bảng trong database.
KEY_PHONE, KEY_DEVICE: Là thuộc tính trong bảng.
CREATE_TABLE: Chuỗi tạo bảng trong SQLite với khóa chính
KEY_PHONE kiểu Text.
onCreate: Phương thức tạo bảng.
Truy vấn SQLite
Thêm:SQLiteDatabase db=this.getWritableDatabase();
ContentValues value=new ContentValues();
value.put(KEY_PHONE, phone.getPhone());
value.put(KEY_DEVICE, phone.getDevice());
db.insert(TABLE_NAME, null, value);
db.close()
Sửa:SQLiteDatabase db = this.getWritableDatabase();
ContentValues content = new ContentValues();
content.put(KEY_PHONE , phone.getPhone());
content.put(KEY_DEVICE, phone.getDevice());
SVTH: Nguyễn Văn Hiếu - 39 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
int t=db.update(TABLE_NAME, content,
KEY_PHONE+"="+phone.getPhone(), null);
db.close();
return t>0;
Xóa:SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, KEY_PHONE + "=?", new String[] {phone});
db.close();
Import Database vào ứng dụng Android
Sau khi tạo CSDL bằng SQLite Manager, chọn menu File/Export
Database. Lưu file .sql vừa tạo vào máy.
Để import database vào ứng dụng, người lập trình cần :
Build and Run chương trình Android.
Khởi động máy ảo xong, chọn nút DDMS ở góc trên bên phải chương
trình Eclipse để xem cấu trúc file.
Vào thư mục chứa database có đường dẫn như sau :
/data/data/your.app.package/databases/your-db-name
2. Socket
1 Một số khái niệm
Socket
Socket là một cổng logic mà một chương trình sử dụng để kết nối với một
chương trình khác chạy trên một máy tính khác trên Internet. Chương trình mạng
có thể sử dụng nhiều Socket cùng một lúc, nhờ đó nhiều chương trình có thể sử
dụng Internet cùng một lúc.
Có 2 loại Socket:
Stream Socket: Dựa trên giao thức TCP( Tranmission Control Protocol)
việc truyền dữ liệu chỉ thực hiện giữa 2 quá trình đã thiết lập kết nối. Giao
thức này đảm bảo dữ liệu được truyền đến nơi nhận một cách đáng tin cậy,
đúng thứ tự nhờ vào cơ chế quản lý luồng lưu thông trên mạng và cơ chế
chống tắc nghẽn.
Datagram Socket: Dựa trên giao thức UDP (User Datagram Protocol)
việc truyền dữ liệu không yêu cầu có sự thiết lập kết nối giữa 2 quá trình.
SVTH: Nguyễn Văn Hiếu - 40 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Ngược lại với giao thức TCP thì dữ liệu được truyền theo giao thức UDP
không được tin cậy, có thể không đúng trình tự và lặp lại. Tuy nhiên vì nó
không yêu cầu thiết lập kết nối không phải có những cơ chế phức tạp nên
tốc độ nhanh…ứng dụng cho các ứng dụng truyền dữ liệu nhanh như chat,
game….
Port
Port xách định duy nhất một quá trình (process) trên một máy trong mạng.
Hay nói cách khác là cách mà phân biệt giữa các ứng dụng.
Một TCP/IP Socket gồm một địa chỉ IP kết hợp với một port ? Xác định
duy nhất một tiến trình (process ) trên mạng.Hay nói cách khác luồng thông tin
trên mạng dựa vào IP là để xác định máy một máy trên mạng còn port xác định 1
tiến trình trên 1 máy.
2 Cơ chế gọi hàm trong lập trình Socket
Hình 2.15: Lập trình Socket với TCP
SVTH: Nguyễn Văn Hiếu - 41 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Quy trình hoạt động của ứng dụng Server – Client như sau: Server có
nhiệm vụ của là lắng nghe, chờ đợi kết nối từ Client trên địa chỉ IP của mình
với Port được quy định sẵn. Khi client gởi dữ liệu tới Server thì nó phải giải
quyết một công việc là nhận dữ liệu đó -> xử lý -> trả kết quả lại cho Client.
3. Serial Port
2.3.1. Khái Niệm
Cổng nối tiếp (Serial port) là một cổng thông dụng trong các máy tính
trong các máy tính truyền thống dùng kết nối các thiết bị ngoại vi với máy tính
như: bàn phím, chuột điều khiển, modem, máy quét...Cổng nối tiếp còn có tên
gọi khác như: Cổng COM, communication.
Ngày nay, do tốc độ truyền dữ liệu chậm hơn so với các cổng mới ra đời
nên các cổng nối tiếp đang dần bị loại bỏ trong các chuẩn máy tính hiện nay,
chúng được thay thế bằng các cổng có tốc độ nhanh hơn như: USB, FireWire
Hình 2.16: Sơ đồ chân cổng Com
Chức năng của các chân như sau:
Chân 1 : Data Carrier Detect (DCD) : Phát tín hiệu mang dữ liệu.
Chân 2: Receive Data (RxD) : Nhận dữ liệu.
Chân 3 : Transmit Data (TxD) : Truyền dữ liệu.
Chân 4 : Data Termial Ready (DTR) : Đầu cuối dữ liệu sẵn sàng được
kích hoạt bởi bộ phận khi muốn truyền dữ liệu.
Chân 5 : Singal Ground ( SG) : Mass của tín hiệu.
SVTH: Nguyễn Văn Hiếu - 42 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Chân 6 : Data Set Ready (DSR) : Dữ liệu sẵn sàng, được kích hoạt bởi
bộ truyền khi nó sẵn sàng nhận dữ liệu.
Chân 7 : Request to Send : yêu cầu gửi,bô truyền đặt đường này lên
mức hoạt động khi sẵn sàng truyền dữ liệu.
Chân 8 : Clear To Send (CTS) : Xóa để gửi ,bô nhận đặt đường này lên
mức kích hoạt động để thông báo cho bộ truyền là nó sẵn sàng nhận tín
hiệu.
Chân 9 : Ring Indicate (RI) : Báo chuông cho biết là bộ nhận đang
nhận tín hiệu rung chuông.
2.3.2. Quá trình dữ liệu
Quá trình truyền dữ liệu
Truyền dữ liệu qua cổng nối tiếp RS232 được thực hiện không đồng bộ.
Do vậy nên tại một thời điểm chỉ có một bit được truyền (1 kí tự). Bộ truyền gửi
một bit bắt đầu (bit start) để thông báo cho bộ nhận biết một kí tự sẽ được gửi
đến trong lần truyền bit tiếp theo.
Tốc độ Baud
Đây là một tham số đặc trưng của RS232. Tham số này chính là đặc trưng
cho quá trình truyền dữ liệu qua cổng nối tiếp RS232 là tốc độ truyền nhận dữ
liệu hay còn gọi là tốc độ bit. Tốc độ bit được định nghĩa là số bit truyền được
trong thời gian 1 giây hay số bit truyền được trong thời gian 1 giây. Tốc độ bit
này phải được thiết lập ở bên phát và bên nhận đều phải có tốc độ như nhau.
Một số tốc độ Baud thường dùng: 50, 75, 110, 150, 300, 600, 1200, 2400,
4800, 9600, 19200, 28800, 38400, 56000, 115200 …
Bit chẵn lẻ hay Parity bit
Đây là bit kiểm tra lỗi trên đường truyền. Thực chất của quá trình kiểm tra
lỗi khi truyền dữ liệu là bổ sung thêm dữ liệu được truyền để tìm ra hoặc sửa một
số lỗi trong quá trình truyền . Do đó trong chuẩn RS232 sử dụng một kỹ thuật
kiểm tra chẵn lẻ.
2.3.3. Ứng dụng
Ứng dụng trong sử dụng thông thường của một máy tính:
o Bàn phím máy tính (trước đây).
SVTH: Nguyễn Văn Hiếu - 43 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
o Chuột điều khiển (trước đây, hiện nay bàn phím và chuột sử dụng
các cổng PS/2 hoặc USB).
o Modem (quay số).
Ứng dụng trong các chuyên ngành khác
o Kết nối với các thiết bị điều khiển (các cổng RS-232, RS-422...).
trong ngành tự động hoá điều khiển.
o Kết nối với các thiết bị điện tử dân dụng.
o Kết nối với các điện thoại thông minh.
4. SMS
2.4.1. Giới thiệu về SMS
SMS là từ viết tắt của Short Message Service. Đó là một công nghệ cho
phép gửi dữ liệu từ một máy mobile tới một thiết bị đầu cuối như email, máy
nhắn tin...Nó gửi tin nhắn qua một mạng không dây.
SMS xuất hiện trong truyền thông không dây năm 1991 ở Châu Âu, nơi
mạng truyền thông không dây kỹ thuật số đầu tiên được hình thành và SMS
được xem như một phần của mạng thông tin di động toàn cầu GSM.
Như chính tên đầy đủ của SMS là Short Message Service, dữ liệu có thể
lưu trữ được bởi một SMS là rất giới hạn. Một SMS có thể chứa tối đa là 140
byte. Vì vậy, một SMS có thể chứa tối đa là 160 ký tự.
SMS dạng text hỗ trợ được nhiều ngôn ngữ khác nhau. Nó có thể hoạt
động tốt với nhiều ngôn ngữ mà có hỗ trợ mã Unicode. Bao gồm Arabit, Trung
Quốc, Nhật Bản…
2.4.2. Ưu điểm của SMS
Tin nhắn có thể gửi và đọc tại bất cứ thời điểm nào.
Tin nhắn SMS có thể được gửi tới các điện thoại dù chúng đang bị tắt
nguồn.
SVTH: Nguyễn Văn Hiếu - 44 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Được sử dụng trên các điện thoại khác nhau và có thể gửi tin nhắn
cùng mạng hoặc khác mạng…
SVTH: Nguyễn Văn Hiếu - 45 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ
1 Phương án thiết kế
Phương án 1: Thiết kế phần mềm điều khiển trên Android sử dụng giao
tiếp qua Bluetooth và Wifi.
o Bluetooth là công nghệ không dây được thiết kế để truyền dữ liệu đến
các thiết bị như ĐTDĐ, máy tính xách tay và các thiết bị khác trong
phạm vi 10 mét.
o Công nghệ Wi-Fi dành cho mạng nội bộ (LAN) cho phép mở rộng hệ
thống mạng hay thay thế cho mạng có dây trong phạm vi khoảng 100
mét.
Phương án 2: Thiết kế phần mềm điều khiển trên Android sử dụng giao
tiếp qua tin nhắn SMS và Internet
o Giao tiếp qua Internet giữa các thiết bị với nhau ngày nay được sử
dụng rất rộng rãi, thông tin truyền đi chính xác và nhanh chóng.
o Tin nhắn SMS hoạt động trong phạm vi có sóng điện thoại. Hiện nay
sóng điện thoại đã gần như được phủ cả nước. Như vậy nó rất thích
hợp cho việc điều khiển từ xa.
Từ 2 phương án trên: thì phương án 2 là thích hợp nhất cho việc thiết kế
phần mềm điều khiển.
2 Sơ đồ tổng quát hệ thống
SVTH: Nguyễn Văn Hiếu - 46 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hình 3.1: Sơ đồ tổng quát của hệ thống
3 Chức năng hệ thống
3.1 Account Manager
Login
Để đảm bảo rằng chỉ có chủ nhân của của nó mới được điều khiển thiết bị.
Change profile
Khi người dùng lần đầu tiên cài đặt ứng dụng. Sẽ được cấp một Account.
Sau khi người dùng đăng nhập thì có thể thay đổi thông tin: Account.
Restore account
Khi quên username hoặc password thì người dùng có thể sử dụng chức
năng này để khôi phục lại tài khoản của họ. Ứng dụng sẽ tự động gửi username
và password tới email mà người dùng đã cài đặt
3.2 Controls Setting
SVTH: Nguyễn Văn Hiếu - 47 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Cho phép người sử dụng có thể thiết lập cho hệ thống điều khiển.
Cài đặt SMS:
Người dùng có thể thay đổi số sim: Thêm, Sửa, Xóa.
Cài đặt Server:
Thay đổi địa chỉ Ip và Port.
3.3 Controls
Ở đây cho phép người sử dụng chọn nơi điều khiển.
Phòng ngủ
Điều hòa nhiệt độ: Bât/Tắt/Điều chỉnh nhiệt.
Đèn: Bật/Tắt/Điều chỉnh độ sáng.
Rèm: Mở/Đóng.
Phòng khách
Âm thanh: Bật/Tắt.
Điều hòa nhiệt độ: Bât/Tắt/Điều chỉnh nhiệt.
Đèn: Bật/Tắt.
Rèm: Mở/Đóng.
Bếp
Đèn: Bật/Tắt.
Lò vi sóng: Bật/Tắt.
Phòng tắm
Bình nóng lạnh: Bật/Tắt.
Bồn tắm: Mở van nước/Đóng van nước.
Vườn
Tười cây: Đóng van nước/Mở van nước.
Đèn chiếu sáng: Bật/Tắt.
Bảo vệ
Camera: Bật/Tắt.
Chuông báo động: Tắt.
3.4 Alarm
Cho phép cảnh báo đến người sử dụng khi có sự cố sảy ra: báo cháy, báo
rò rỉ gas, báo có người đột nhập.
SVTH: Nguyễn Văn Hiếu - 48 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
4 Các biểu đồ của hệ thống
3.4.1 Biểu đồ Usecase
Hình 3.2: Sơ đồ Usecase tổng quát
3.4.2 Biểu đồ Sequence
3.4.2.1 Login
SVTH: Nguyễn Văn Hiếu - 49 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hình 3.3: Biểu đồ Sequence cho chức năng Login và Restore Account
Bước 1: Người dùng nhập Account.
Bước 2: Thực hiện kiểm tra dữ liệu trong database.
Bước 3,4: Trả lại kết quả về.
Nếu người dùng quên mật khẩu thì thực hiện
Bước 5: Kích vào quên mật khẩu, hệ thống sẽ hiển thị ra một message
thông báo rằng: Account sẽ được gửi tới email của người sử dụng .
Bước 6: Kiểm tra kết nối internet. Nếu có thì thực hiện bước 7, bước 8,
Bước 9: Trả lại kết quả .
3.4.2.2 Change profile
SVTH: Nguyễn Văn Hiếu - 50 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hình 3.4: Biểu đồ Sequence cho chức năng Change profile
Bước 1: Nhập thông tin cần thay đổi.
Bước 2: Kiểm tra thông tin thay đổi có hợp lệ không.
Bước 3: Thực thi thay đổi đến dữ liệu.
Bước 4: Trả lại kết quả.
3.4.2.3 Phone Setting
SVTH: Nguyễn Văn Hiếu - 51 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hình 3.5: Biểu đồ Sequence cho chức năng Phone setting
Bước 1: Lựa chọn 1 trong các thao tác: thêm, sửa, xóa.
Bước 2: Thực hiện query đến database.
Bước 3: Trả lại kết quả.
3.4.2.4 Server Setting
SVTH: Nguyễn Văn Hiếu - 52 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hình 3.6: Biểu đồ Sequence cho chức năng Internet setting
Bước 1: Nhập Ip và Port cần cài đặt.
Bước 2: Kiểm tra Ip và Port có hợp lệ không.
Bước 3: Kết nối đến Server.
Bước 4, 5: Server trả lại kết quả.
3.4.2.5 Controls
Hình 3.7: Biểu đồ Sequence cho chức năng Control
Bước 1: Chọn nơi điểu khiển và nhấn nút điều khiển.
Bước 2: Kiểm tra phần cài đặt.
Bước 3: Gửi lại thống báo nếu chưa được cài đặt.
Bước 4, 5, 6:
Nếu chọn là Internet thì thực hiện truyền dữ liệu tới Server. Sever nhận
được dữ liệu sẽ gửi tới Client chạy trên PC. Client nhận được sẽ xử lý rùi gửi tới
bo mạch điều khiển ghép nối qua cổng Com. Nếu quá trình có lỗi sẽ gửi thông
báo cho người dùng.
SVTH: Nguyễn Văn Hiếu - 53 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Nếu chọn là SMS thì gửi dữ liệu tới GSM nằm trên bo mạch điều khiển.
Nếu quá trình có lỗi sẽ gửi thông báo cho người dùng.
Bước 7, 8: Bo mạch điều khiển nhận được sẽ gửi đến cho thiết bị, thiết bị
sẽ thực hiện và trả lại kết quả.
Bước 9, 10: Quá trình ngược lại như bước 5 và 6.
Bước 11: Trả lại kết quả quá trình điều khiển.
3.4.2.6 Alarm
Hình 3.8: Biểu đồ Sequence cho chức năng Alarm
Bước 1: Khi hệ thống cảm biến phát hiện thấy sự cố nó sẽ thực hiện gửi
một thông báo có sự cố: theo bước 9, 10 (Biểu đồ Sequence cho chức năng
Control).
Bước 2: Hiển thị thống báo cho người dùng biết.
3.4.3 Biểu đồ Activity
3.4.3.1 Change profile
SVTH: Nguyễn Văn Hiếu - 54 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Hình 3.9: Biểu đồ trạng thái Change profile
3.4.3.2 Android send data
Hình 3.10: Biểu đồ trạng thái Android send data
SVTH: Nguyễn Văn Hiếu - 55 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
3.4.3.3 Send data to serial port
Hình 3.11: Biểu đồ trạng thái Send data to serial port
3.4.3.4 Serial port send data to Server
Hình 3.12: Biểu đồ trạng thái Serial port send data to server
SVTH: Nguyễn Văn Hiếu - 56 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
3.4.3.5 Server send data to Android
Hình 3.13: Biểu đồ trạng thái Server send data to Android
3.4.3.6 Android receiver Sms
Hình 3.14: Biểu đồ trạng thái Android receiver Sms
5 Cài đặt hệ thống
SVTH: Nguyễn Văn Hiếu - 57 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
3.5.1 Một số hình ảnh trên hệ điều hành Android
Hình 3.15: Một số hình ảnh cài đặt trên hệ điều hành Android
SVTH: Nguyễn Văn Hiếu - 58 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
3.5.2 Hình ảnh cài đặt trên Pc và Server
Hình 3.16: Ảnh cài đặt trên PC
Hình 3.17: Ảnh cài đặt trên Server
SVTH: Nguyễn Văn Hiếu - 59 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
Kết quả thực hiện
Sau 2 tháng thực hiện đề tài, em đã hoàn thành việc thiết kế mô hình điều
khiển từ xa trên hệ điều hành Android. Hệ thống đã được kiểm tra và chạy khá
ổn định.
Hệ thống bao gồm các tính năng sau:
Bảo mật – Người dùng phải nhập Account.
Điều khiển – Gửi và nhận dữ liệu thông qua SMS hoặc Internet.
Cài đặt – Thiết lập thông số cho SMS hoặc Internet.
Quên mật khẩu – Nếu người dùng quên mật khẩu thì có thể yêu cầu
lấy lại mật khẩu. Mật khẩu sẽ được gửi về email đã cài đặt.
Thay đổi thông tin – Người dùng có thể thay đổi Account.
Ưu khuyết điểm của hệ thống
Ưu điểm
Hệ thống được bảo mật bằng pass.
Điều khiển thiết bị được ở bất kỳ đâu nếu có sóng hoặc Internet.
Cho phép lựa chọn gửi dữ liệu theo 2 phương án khác nhau: Internet hoặc
Sms.
Nếu người dùng không may tắt chương trình điều khiển. Nhưng khi có
báo động bằng tin nhắn Sms trong ngôi nhà gửi tới. Thì phần mềm sẽ tự động
bật và thông báo cho chủ nhà biết.
Khi người dùng quên mật khẩu hệ thống sẽ tự động gửi Account tới email
đã cài đặt.
Khuyết điểm
Khi gửi dữ liệu qua internet thì phải thông qua một Server ảo. Server này
có thể bị gián đoạn. Có thể gây nên dữ liệu bị trục trặc trên đường truyền.
Phần mềm thiết kế chưa đươc fix bug hoàn chỉnh. Trong quá trình sử dụng
có thể gây ra lỗi, phải khởi động lại.
Tốn chi phí thuê Server, tốn chi phí nhắn tin Sms.
Account là cục bộ không có tương tác với Service.
SVTH: Nguyễn Văn Hiếu - 60 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
Nhận dữ liệu phải có thời gian trễ cao để xử lý. Nên không thể nhận liên
tiếp được dữ liệu cùng một lúc.
Cơ sở dữ liệu lưu trữ quá trình điều khiển chưa có.
Phần mềm chỉ chạy trên được hệ điều hành Android.
Hệ thống phần cứng cần thiết kế phức tạp để tiếp nhận.
Khả năng ứng dụng của hệ thống
Đề tài đáp ứng được nhu cầu của xã hội:
o Điều khiển thiết bị từ xa thông qua một chiếc điện thoại Smarth Phone.
o Nhận dữ liệu điều khiển để biết trạng thái của thiết bị.
o Với những đặc điểm và tính năng trên, hệ thống có thể trở thành sản
phẩm tiêu dùng, đáp ứng nhu cầu của xã hôi. Đề tài mang tính hiện đại,
thực tiễn và có tính khả thi tốt trong thực tế.
Hướng phát triển của đề tài
Đây là một đề tài khá mới, nên có rất nhiều hướng phát triển trong tương
lai:
o Theo dõi hoạt động của ngôi nhà qua điện thoại di dộng.
o Lưu trữ trạng thái của thiết bị….
SVTH: Nguyễn Văn Hiếu - 61 - GVHD: Nguyễn Tiến Duy
Đồ án tốt nghiệp Khoa: Điện Tử
TÀI LIỆU THAM KHẢO
[1] Copyright © 2008 by Chris Haseman. Android Essentials. Appres
[2] Copyright © 2009 by Mark L. Murphy. Beginning Android. Appress
[3] Copyright © 2009 by Sayed Y. Hashimi and Satya Komatineni.
Pro Android. Appress
[4] Copyright © 2008 by The McGraw-Hill Companies. Android™
Programmer’s Guide
[5] Copyright © 2008 by Ed Burnette. Hello, Android. (Introducing
oogle’s Mobile Development Platform)
[6] Copyright © 2009 by W. FRANK ABLESON, CHARLIE
COLLINS, ROBI SEN. Unlocking Android
[7] Một số tài liệu về công nghệ thông tin trên internet:
http://www.google.com.vn
http://tutorial.vn/cach-gui-tin-nhan-sms-android/
http://nhipsongdidong.vn
http://www.vn-zoom.com/
http://tailieu.vn/
SVTH: Nguyễn Văn Hiếu - 62 - GVHD: Nguyễn Tiến Duy