86
Đồ á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

Do an Tot Nghiep (12!6!13)

Embed Size (px)

DESCRIPTION

Điều khiển thiết bị SmartHome qua android

Citation preview

Page 1: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 2: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 3: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 4: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 5: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 6: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 7: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 8: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 9: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 10: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 11: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 12: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 13: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 14: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 15: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 16: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 17: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 18: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 19: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 20: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 21: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 22: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 23: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 24: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 25: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 26: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 27: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 28: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 29: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 30: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 31: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 32: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 33: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 34: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 35: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 36: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 37: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 38: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 39: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 40: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 41: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 42: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 43: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 44: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 45: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 46: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 47: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 48: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 49: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 50: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 51: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 52: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 53: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 54: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 55: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 56: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 57: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 58: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 59: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 60: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 61: Do an Tot Nghiep (12!6!13)

Đồ á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

Page 62: Do an Tot Nghiep (12!6!13)

Đồ á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