CÁC KÝ HIỆU VIẾT TẮT
Ký hiệu, viết tắt và thuật
ngữ
Giải nghĩa
SDK Software develop kit
Android Platform Nền tảng Android
Soft-keyboard Bàn phím ảo trong điện thoại
VM Visual Machine (Máy ảo)
Android Emulator
Thiết bị giả lập điện thoại Android để chạy các ứng
dụng.
Activity
(danh từ) Một đối tượng trong Android. Cần phân
biệt với động từ active
Running Trạng thái đạng thực thi của một ứng dụng
Issue Vấn đề phát sinh trong quá trình xây dựng ứng dụng
Bug Lỗi phát sinh trong quá trình xây dựng ứng dụng
Uri
Đường dẫn chỉ đến các dữ liệu trong hệ thống
Android
Content Provider
Một thành phần trong hệ thống Android hỗ trợ truy
vấn vào các dữ liệu trong hệ thống.
Callback
Gọi lại một hàm nào đó khi xảy ra một sự kiện
tương ứng.
SIM Thẻ SIM điện thoại
Trang 1
MỤC LỤC
\
MỞ ĐẦU
nền tảng phần mềm mở Android để tạo ra một phần mềm có tính thực tiễn cao, ứng
dụng hiệu quả vào cuộc sống. Báo cáo của đề tài bao gồm 3 chương:
Chương 1: Giới thiệu các vấn đề lý thuyết liên quan.
Chương 2: Đặt vấn đề, trình bày giải pháp, phân tích và thiết kế.
Chương 3: Triển khai ứng dụng và demo.
Trang 3
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Sơ lược về các hệ điều hành
1.1.1 Khái niệm hệ điều hành
Hệ điều hành (operating system) là chương trình chạy trên hệ thống máy tính, quản
lý các tài nguyên trên máy tính và là môi trường cho các chương trình ứng dụng chạy
trên nó. Ngày nay, khái niệm hệ điều hành không chỉ là trên máy vi tính mà còn được
mở rộng cho nhiều thiết bị điện tử khác chẳng hạn như điện thoại thông minh
(smartphones), máy tính bảng (tablet computers) và hiện nay là cả trên một số đầu phát
HD, HD Player, TV, các thiết bị cầm tay PDA
Như vậy hệ điều hành di động là hệ điều hành chạy trên hệ thống máy có tính di
động cao. Với đặc thù đó, hệ điều hành di động phải có những khả năng đặc biệt mà
những hệ điều hành thông thường không có được. Chẳn hạn như nó phải chạy trên hệ
thống máy có cấu hình máy hạn chế về tốc độ bộ vi xử lý, bộ nhớ sử dụng, phải chạy
được ổn định liên tục trong một thời gian dài mà chỉ sử dụng một lượng điện năng nhỏ,
trong suốt thời gian chạy đó có thể duy trì các kết nối mạng không dây để đảm bảo việc
liên lạc.
1.1.2 Một số hệ điều hành tiêu biểu
- Trên máy tính cá nhân : MS Dos, MS Window, Mac OS, Linux, Unix…
- Trên điện thoại thông minh : Android, Sybian, Window Mobile, iOS, RIM OS,
Bada OS, Palm OS.
- Ngoài ra còn có các hệ điều hành chạy trên mainframe, server, thẻ chíp,
1.1.3 Các chức năng chính của hệ điều hành
Quản lý chia sẻ tài nguyên.Tài nguyên ở đây là bao gồm:
- Tài nguyên phần cứng (CPU, Bộ nhớ, các thiết bị IO).
- Hệ thống xử lý theo lô đa chương.
- Hệ thống chia sẻ thời gian.
- Hệ thống song song.
- Hệ thống phân tán.
- Hệ thống xử lý thời gian thực.
1.1.6 So sánh giữa các hệ điều hành
1.1.7 So sánh giữa hệ điều hành di động và hệ điều hành trên desktop
Giống nhau: về bản chất hệ điều hành, những thành phần lõi hệ điều hành.
Khác nhau:
- Hệ điều hành di động: hoạt động trên các thiết bị nhỏ gọn, hạn chế nhất là về
vấn đề năng lượng. Pin thì có hạn, vì thế tất cả các thành phần trên thiết bị
đều phải tối ưu để tiết kiệm pin, điều đó nảy sinh nhiều mâu thuẫn với nhu
cầu sử dụng của người dùng.
• Màn hình càng lớn và càng sáng thì sẻ tốn điện càng nhiều.
• Bộ nhớ lớn thì chi phí về điện cũng sẻ cao.
• Bộ vi xử lý càng nhanh thì càng tốn điện. Điều đó chưa kể đến việc
thiết bị di động thì phải nhỏ gọn, nhẹ nhàng, vì vậy càng đè nặng việc
phải tối ưu phần cứng. Khi đó hệ điều hành di động cũng có trách
nhiệm phải tối ưu hoạt động của mình để tiết kiệm năng lượng một
cách tối đa.
• Nó phải quản lý các ứng dụng không để các ứng dụng chạy chiếm quá
nhiều tài nguyên, tránh sự độc quyền, xung đột, tranh chấp tài nguyên
giữa các ứng dụng trong khi các hệ điều hành chạy desktop thì ít chú ý
hơn. Hệ điều hành di động luôn có bộ công cụ quản lý điện năng sử
dụng trong máy, trong những tình huống cần thiết thì hệ thống sẻ tự
Trang 6
tắt những ứng dụng không cần thiết để duy trì các chương trình cần
thiết hơn hoạt động.
• Đa số các hệ điều hành trên desktop đều cho phép nhiều ứng dụng
chạy đồng thời (đa nhiệm) và khá tự do. Trong khi đó, các hệ điều
HD Player, TV). Đầu tiên được ra đời bởi công ty liên hợp Android Inc, sau đó được
Google mua lại và phát triển từ năm 2005 và trở thành một hệ điều hành di động mã
nguồn mở, miễn phí, mạnh mẽ và được ưa chuộng cao trên thế giới.
Hệ điều hành Android một hệ điều hành rất mạnh mạnh, có bảo mật cao, hỗ trợ
được nhiều công nghệ tiên tiến như 3G, GPS, EDGE, Wifi tương thích với nhiều
phần cứng, hỗ trợ nhiều loại bộ nhập dữ liệu như keyboard, touch và trackball.
Android là hệ điều hành di động nên có khả năng kết nối cao với các mạng không dây.
Hỗ trợ công nghệ OpenGL nên có khả năng chơi các phương tiện media, hoạt hình
cũng như trình diễn các khả năng đồ họa khác cực tốt, là tiền đề để phát triển các ứng
dụng có giao diện phức tạp chẳng hạn như là các trò chơi.
Android liên tục được phát triển, mỗi bản cập nhật từ Google là mỗi lần Android
được tối ưu hóa để hoạt động tốt hơn, nhanh và ổn định hơn, hỗ trợ thêm công nghệ
mới. Chẳng hạn như theo một đánh giá thì Android phiên bản 2.2 hoạt động nhanh hơn
bản 2.1 tới 450%. Hiện nay, phiên bản mới ổn định là 3.2 phát hành 7/2011 với tên gọi
theo “họ” 3.x trước đó là Honeycomb. Tuy nhiên phiên bản Android tiếp theo – tên mã
Trang 8
Hình 1-1 Logo Android
Ice Cream Sandwich (Android 4.0) – trong quá trình được Google hoàn thiện và được
tung ra vào quý 4 năm 2011.
Hình 1-2 Sự phân bố của các phiên bản Android tính đến ngày 03/10/2011
Năm 2008, hệ điều hành Android đã chính thức mở toàn bộ mã nguồn, điều đó cho
phép các hãng điện thoại có thể đem mã nguồn về tùy chỉnh, thiết kế lại sao cho phù
hợp với mỗi mẫu mã điện thoại của họ và điều quan trọng nữa là hệ điều hành mở này
hoàn toàn miễn phí, không phải trả tiền nên giúp họ tiết kiệm khá lớn chi phí phát triển
hệ điều hành. Những điều đó là cực kỳ tốt không chỉ đối với các hãng sản xuất điện
thoại nhỏ mà ngay cả với những hãng lớn như Samsung, HTC
Với Google, vì Android hoàn toàn miễn phí, Google không thu tiền từ những hãng
sản xuất điện thoại, tuy không trực tiếp hưởng lợi từ Android nhưng bù lại, những dịch
vụ của hãng như Google Search, Google Maps, nhờ có android mà có thể dễ dàng
xâm nhập nhanh vào thị trường di động vì mỗi chiếc điện thoại được sản xuất ra đều
1.4 Kiến trúc của Android
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành Android.
Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây.
Trang 10
Hình 1-3 Cấu trúc stack hệ thống Android
1.4.1 Tầng ứng dụng (application)
Đây là lớp ứng dụng giao tiếp với người dùng, bao gồm các ứng dụng như:
- Các ứng dụng cơ bản được tích hợp sẵn như: gọi điện (Phone), quản lý danh bạ
(Contacts), duyệt web (Browser), nhắn tin (SMS), lịch làm việc (Calendar), đọc
e-mail (Email-Client), bản đồ (Map), quay phim chụp ảnh (camera)
- Các ứng dụng được cài thêm như các phần mềm chứng khoán (Stock), các trò
chơi (Game), từ điển
Các chương trình có các đặc điểm là:
- Viết bằng ngôn ngữ Java, phần mở rộng là apk.
- Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine được dựng
lên để phục vụ cho nó. Nó có thể là một Active Program : Chương trình có giao
diện với người sử dụng hoặc là một background: chương trình chạy nền hay là
dịch vụ.
- Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng một thời điểm,
có thể có nhiều chương trình cùng chạy một lúc, tuy nhiên, với mỗi ứng dụng thì
Trang 11
có duy nhất một thực thể (instance) được phép chạy mà thôi. Điều đó có tác
dụng hạn chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn.
- Các ứng dụng được gán số ID của người sử dụng nhằn phân định quyền hạn khi
sử dụng tài nguyên, cấu hình phần cứng và hệ thống.
- Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành di động
khác, android cho phép một ứng dụng của bên thứ ba được phép chạy nền. Các
ứng dụng đó chỉ có một hạn chế nhỏ đó là nó không được phép sử dụng quá
5~10% công suất CPU, điều đó nhằn để tránh độc quyền trong việc sử dụng
CPU.
có e-mail mới ).
- Resource Manager : Quản lý tài nguyên tĩnh của các ứng dụng bao gồm các file
hình ảnh, âm thanh, layout, string. (Những thành phần không được viết bởi ngôn
ngữ lập trình).
1.4.3 Tầng Library
Android bao gồm một tập hợp các thư viên C/C++ được sử dụng bởi nhiều thành
phần khác nhau trong hệ thống Android. Điều này được thể hiện thông qua nền tảng
ứng dụng Android. Một số các thư viện cơ bản được liệt kê dưới đây:
- Thư viện hệ thống (System C library): thư viện dựa trên chuẩn C, được sử dụng
chỉ bởi hệ điều hành.
- Thư viện Media (Media Libraries): Có nhiều codec để hỗ trợ việc phát và ghi
các loại định dạng âm thanh, hình ảnh, video thông dụng.
- Thư viện web (LibWebCore) : Đây là thành phần để xem nội dung trên web,
được sử dụng để xây dựng phần mềm duyệt web (Android Browse) cũng như để
Trang 13
các ứng dụng khác có thể nhúng vào. Nó cực kỳ mạnh, hỗ trợ được nhiều công
nghệ mạnh mẽ như HTML5, JavaScript, CSS, DOM, AJAX…
- SGL: thư viện hỗ trợ đồ họa 2D.
- 3D libraries: thư viện đồ họa 3D.
- Free Type : bitmap and vector font rendering.
- Thư viện SQLite : Hệ cơ sở dữ liệu để các ứng dụng có thể sử dụng, nó không
có quan hệ như các cơ sở dữ liệu khác.
1.4.4 Android Runtime
Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp hầu hết các chức
năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java. Tất cả các ứng dụng
Android đều chạy trong tiến trình riêng. Máy ảo Dalvik đã được viết để cho một thiết bị
có thể chạy nhiều máy ảo hiệu quả. Các VM Dalvik thực thi các tập tin thực thi Dalvik
(dex). Định dạng được tối ưu hóa cho bộ nhớ tối thiểu. VM là dựa trên register-based,
và chạy các lớp đã được biên dịch bởi một trình biên dịch Java để chuyển đổi thành các
định dạng dex. Các VM Dalvik dựa vào nhân Linux cho các chức năng cơ bản như
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 lập
trình viên 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.
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 ( ) được phát triển bởi Fabrice
Bellard.
Trang 15
Hình 1-4 Android Emulator
1.6 Các thành phần trong một Android Project
1.6.1 AndroidManifest.xml
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ư màn hình chính sẽ chạy đầu tiên.
File này được tự động sinh ra khi tạo một Android project. Trong file manifest bao
giờ cũng có 3 thành phần chính đó là: application, permission và version
• 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ư:
Trang 16
- android:icon = “drawable resource” Ở đây đặt đường dẫn đến file icon
của ứng dụng khi cài đặt. Ví dụ: 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…
1.7.1 Chu kỳ sống thành phần
Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu
khởi tạo và đến thời điểm kết thúc. Giữa đó, đôi lúc chúng có thể là active( trạng thái
hoạt động) hoặc inactive (không hoạt động), hoặc là trong trường hợp Activies nó có
thể visible (ẩn) hoặc invisible (hiển thị).
Chu kỳ sống một ứng dụng Android
Activity/Inactivity
Visiable/Invisible
Start
End
Hình 1-5 Chu kỳ sống thành phần
Trang 18
1.7.2 Activity Stack
Bên trong hệ thống các activity được quản lý như một activity stack. Khi một
Activity mới được start, nó được đặt ở đỉnh của stack và trở thành activity đang chạy
activity trước sẽ ở bên dưới activity mới và sẽ không thấy trong suốt quá trình activity
mới tồn tại.
Nếu nhấn nút Back thì activity kết tiếp của stack sẽ di duyển lên và trở thành active.
Hình 1-6 Activity stack
Trang 19
1.7.3 Các trạng thái của chu kỳ sống
Hình 1-7 Chu kỳ sống của Activity
Một Activity chủ yếu có 3 chu kỳ chính sau:
- Active hoặc running: Khi Activity là được chạy trên màn hình. Activity này tập
trung vào những thao tác của người dùng trên ứng dụng.
- Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dùng
vẫn trông thấy. Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ
đầy màn hình. Một Activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi
hệ thống trong trường hợp thiếu vùng nhớ.
- Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác. Nó vẫn còn trạng thái và
1.7.7 Thời gian hiển thị của Activity
Thời gian hiển thị của một activity diễn ra giữa lần gọi một onStart() cho đến khi
gọi onStop(). Trong suốt khoảng thời gian này người dùng có thể thấy activity trên màn
hình và có thể tương tác với ứng dụng.
1.7.8 Các phương thức của chu kỳ sống
Phương thức: onCreate()
- Được gọi khi activity lần đầu tiên được tạo.
- Ở đây bạn 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ượng Bundle 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ế 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.
Trang 22
- Nó nê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ó
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:
1.8.3 Linear Layout (bố trí giao diện)
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.
Trang 24
Hình 1-10 Bố trí các widget sử dụng LinearLayout
1.8.4 Frame Layout (khung)
Learn-Android.com
ImageView
TextView
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 1-11 Bố trí các widget trong FrameLayout
1.8.5 Absolute Layout(tọa độ của giao diện)
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.
1.8.6 Retalive Layout
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