Các nhà phát triển chỉ cầnphát triển cho Android là các ứng dụng đó có thể chạy trên rất nhiều thiết bị khácnhau, miễn là thiết bị đó hỗ trợ Android.. Trong thế giới của điện thoại thông
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
THỰC TẬP CHUYÊN NGÀNH
Đề tài: TÌM HIỂU VỀ PHƯƠNG PHÁP LẬP TRÌNH
TRÊN ANDROID VIẾT CHƯƠNG TRÌNH MÔ PHỎNG ĐÀN
PIANO
Sinh viên thực hiện: ĐÀO TRUNG SƠN
Giáo viên hướng dẫn: Th.S BÙI ANH TÚ
Thái Nguyên, tháng 6 năm 2012
0
Trang 2LỜI NÓI ĐẦU
Ngày nay, Công nghệ thông tin là một trong những ngành đang phát triển rấtmạnh mẽ và có ảnh hưởng sâu rộng đến mọi mặt đời sống Nó là nền tảng của nềnkinh tế tri thức, là thước đo trình độ phát triển của một quốc gia Vì vậy, việc đào tạođội ngũ kỹ sư công nghệ thông tin có chất lượng đòi hỏi phải được chú trọng và đầu
tư đúng mức
Đại học là môi trường cơ bản cung cấp kiến thức chuyên môn, giúp sinh viênhình thành và phát triển những kĩ năng cần thiết cho công việc Vì vậy, học đi đôivới hành luôn là phương châm đào tạo hàng đầu trong các trường đại học hiện nay
Xã hội và kinh tế phát triển đòi hỏi công nghệ cũng phải phát triển Côngnghệ phát triển, con người ngày càng phát minh ra những thiết bị công nghệ sốthông minh giúp đỡ con người về rất nhiều mặt trong cuộc sống Và một trong số đó
là các thiết bị di động cầm tay như một thế giới thu nhỏ trong lòng bàn tay, các thiết
bị này có thể chạy các hệ điều hành đơn giản như Symbian, Winphone, iOS,Android, và Android là 1 trong số các hệ điều hành phát triển hàng đầu, rất được
ưa chuộng cho các thiết bị di động
Trong quá trình tìm hiểu về phương pháp lập trình trên Android, em có pháttriển một demo nhỏ Demo này chủ yếu để minh họa một phần nào đó về phươngpháp lập trình trên Android
Em xin chân thành cảm ơn giáo viên hướng dẫn – thạc sĩ Bùi Anh Tú - đã
giúp đỡ và chỉ dẫn em hoàn thành bài báo cáo này
Trang 3MỤC LỤC
MỤC LỤC 2
CHƯƠNG 1: TỔNG QUAN VỀ ANDROID 3
1.1 Android là gì? 3
1.2 Các phiên bản Android 3
1.3 Tính năng của Android 4
1.4 Kiến trúc Android: 4
1.4.1 Tầng hạt nhân Linux (Linux Kernel layer) 5
1.4.2 Tầng Library và android runtime 5
1.4.3 Tầng Application Framework 6
1.4.4 Tầng Application 7
1.5 Các thiết bị Android trên thị trường: 8
CHƯƠNG 2: LẬP TRÌNH TRÊN ANDROID 10
2.1 Yêu cầu kiến thức cho lập trình Android: 10
2.2 Hiểu ứng dụng Android: 10
2.3 Vòng đời Android: 11
2.4 Các công cụ cần thiết 15
2.5 Android Emulator 16
2.5 Một số thành phần cơ bản trong Android: 18
2.5.1 XML unit: 18
2.5.2 Các layout: 21
2.5.3 Android Manifest 22
2.5.4 File R.java 23
2.5.5 Button và ToggleButton 24
2.5.6 TextView và EditText 25
2.5.7 CheckBox và RadioButton 26
2.5.8 Làm việc với List view 27
CHƯƠNG 3: DEMO ĐÀN PIANO TRÊN ANDROID 30
TÀI LIỆU THAM KHẢO 36
Trang 5CHƯƠNG 1: TỔNG QUAN VỀ ANDROID
Lợi thế chính của việc sử dụng Android để phát triển ứng dụng là Androidcung cấp cách tiếp cận tốt nhất để phát triển ứng dụng Các nhà phát triển chỉ cầnphát triển cho Android là các ứng dụng đó có thể chạy trên rất nhiều thiết bị khácnhau, miễn là thiết bị đó hỗ trợ Android Trong thế giới của điện thoại thông minhthì vấn đề thích hợp phần cứng là điểm quan trọng đối với các ứng dụng, khi đã sửdụng Android làm nền tảng để phát triển thì sẽ có được rất nhiều lợi thế về mặt này
vì các sản phẩm thiết bị thông minh hỗ trợ Android ngày càng đuợc ưa chuộng
Trang 61.3 Tính năng của Android
Android là nguồn mở tự do cho các nhà sản xuất tùy chỉnh, không cố địnhcấu hình phần cứng, phần mềm Tuy nhiên Android hỗ trợ các tính năng chính sau:
- Lưu trữ: Dùng SQLLite, cơ sở dữ liệu quan hệ,
- Kết nối: Hỗ trợ GDM/EDGE, CDMA, EV-DO, Bluetooth, Wifi, WiMax,
- Phần cứng: Cảm biến gia tốc, Máy ảnh số, Cảm biến tiệm cận, GPS,
- Đa điểm: Hỗ trợ màn hình cảm ứng đa điểm
- Đa nhiệm: Hỗ trợ ứng dụng đa nhiệm
- Flash: Hỗ trợ flash phiên bản 10.1
- Tethering: Hỗ trợ kết nối Internet có dây và không dây.
1.4 Kiến trúc Android:
Hình bên dưới cho thấy các tầng khác nhau tạo nên hệ điều hành Android [1]
Hình 1.1 – Các tầng trong hệ điều hành Android
Trang 71.4.1 Tầng hạt nhân Linux (Linux Kernel layer)
Hệ điều hành Android được phát trển dựa trên hạt nhân linux, cụ thể là hạtnhân linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng ở hình 1.1 Tất cảmọi hoạt động của điện thoại muốn thi hành được thì đều được thực hiện ở mức cấpthấp ở lớp này bao gồm quản lý bộ nhớ (memory management), giao tiếp với phầncứng (driver model), thực hiện bảo mật (security), quản lý tiến trình (process)
Tuy được phát triển dựa vào nhân linux nhưng thực ra nhân linux đã được nâng cấp
và sửa đổi rất nhiều để phù hợp với tính chất của những thiết bị cầm tay như hạn chế
về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cần kết nối mạngkhông dây
Tầng này có các thành phần chủ yếu :
- Display Driver : Điều khiển việc hiển thị lên màn hình cũng như thu nhận những
điều khiển của người dùng lên màn hình (di chuyển, cảm ứng )
- Camera Driver : Điều kiển hoạt động của camera, nhận luồng dữ liệu từ camera
trả về
- Bluetooth Driver : Điều khiển thiết bị phát và thu sóng Bluetooth.
- USB driver : Quản lý hoạt động của các cổng giao tiếp USB.
- Keypad driver : Điều khiển bàn phím.
- Wifi Driver : Chịu trách nhiệm về việc thu phát sóng wifi.
- Audio Driver : điều khiển các bộ thu phát âm thanh, giải mã các tính hiệu dạng
audio thành tín hiệu số và ngược lại
- Binder IPC Driver : Chịu trách nhiệm về việc kết nối và liên lạc với mạng vô
tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo những chức năng truyền thôngđược thực hiện
- M-System Driver : Quản lý việc đọc ghi lên các thiết bị nhớ như thẻ SD, flash.
- Power Madagement : Giám sát việc tiêu thụ điện năng.
1.4.2 Tầng Library và android runtime
Phần này có 2 thành phần là phần Library và Android Runtime
Trang 8- 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ư để 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…
- Thư viện SQLite : Hệ cơ sở dữ liệu để các ứng dụng có thể sử dụng.
2 Phần Android runtime:
Phần này chứa các thư viện mà một chương trình viết bằng ngôn ngữ Java có thểhoạt động Phần này có 2 bộ phận tương tự như mô hình chạy Java trên máy tínhthường Thứ nhất là các thư viện lõi (Core Library) , chứa các lớp như JAVA IO,Collections, File Access Thứ hai là một máy ảo java (Dalvik Virtual Machine)
Mặc dù cũng được viết từ ngôn ngữ Java nhưng một ứng dụng Java của hệđiều hành android không được chạy bằng JRE của Sun (nay là Oracle) (JVM) mà làchạy bằng máy ảo Dalvik do Google phát triển
1.4.3 Tầng Application Framework
Tầng này xây dựng bộ công cụ - các phần tử ở mức cao để các lập trình viên
có thể nhanh chóng xây dựng ứng dụng Nó được viết bằng Java, có khả năng sửdụng chung để tiết kiệm tài nguyên
Đây là một nền tảng mở, điều đó có 2 lợi thế:
Với các hãng sản xuất điện thoại : Có thể tùy biến để phù hợp với cấu hìnhđiện thoại mà họ sản xuất cũng như để có nhiều mẫu mã, phong cách hợp thị hiếungười dùng
Trang 9Vì thế nên tuy cùng chung nền tảng Android mà điện thoại của Google có thể kháchẳn với Motorola, HTC, T-Mobile, Samsung
Với lập trình viên : Cho phép lập trình viên có thể sử dụng các API ở tầngtrên mà không cần phải hiểu rõ cấu trúc bên dưới, tạo điều kiện cho lập trình viên tự
do sáng tạo bởi vì chỉ cần quan tâm đến nội dung mà ứng dụng họ làm việc Một tậphợp API rất hữu ích được xây dựng sẵn như hệ thống định vị, các dịch vụ chạy nền,liên lạc giữa các ứng dụng, các thành phần giao diện cấp cao
Giới thiệu một số thành phần của tầng này:
- Activity Manager : Quản lý các chu kỳ sống của một ứng dụng cũng như cung
cấp công cụ điều khiển các Activity
- Telephony Manager : Cung cấp công cụ để thực hiện việc liên lạc như gọi điện
thoại
- XMPP Service : Cung cấp công cụ để liên lạc trong thời gian thực.
- Location Manager : Cho phép xác định vị trí của điện thoại thoại dựa vào hệ
thống định vị toàn cầu GPS và Google Maps
- Window Manager : Quản lý việc xây dựng và hiển thị các giao diện người dùng
cũng như tổ chức quản lý các giao diện giữa các ứng dụng
- Notication Manager : Quản lý việc hiển thị các thông báo (như báo có tin nhắn,có
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ônngữ lập trình)
Trang 10Cá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 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ớingườ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, nghĩa là trong cùng một thời điểm, có thể cónhiều chương trình cùng chạy một lúc, tuy nhiên, với mỗi ứng dụng thì có duy nhấtmộ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ạmdụ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 độngkhá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 ứngdụng đó chỉ có một hạn chế nhỏ đó là nó không được phép sử dung quá 5~10% côngsuất CPU, điều đó nhằn để tránh độc quyền trong việc sử dụng CPU
Ứng dụng không có điểm vào cố định, không có phương thức main để bắt đầu
1.5 Các thiết bị Android trên thị trường:
Trang 11Hình 1.3 - Tablets Hình 1.4 - E-Reader
Hình 1.5 – Internet TV Hình 1.6 – Internet TV
Trang 12CHƯƠNG 2: LẬP TRÌNH TRÊN ANDROID
2.1 Yêu cầu kiến thức cho lập trình Android:
Để lập trình android, nhà phát triển chỉ cần có kiến thức cơ bản về Java là đủ
Cơ bản ở đây có nghĩa là hiểu được thế nào là class, package, biết ý nghĩa của các từkhóa như public, private, protected, thành thạo các lệnh cơ bản như if, for(),switch(), while(), biết sử dụng các lệnh như Integer.parseInt() hayString.valueOf() Nên có thêm kiến thức về gói java.util vì đây là gói hỗ trợ nhiềulớp rất mạnh được sử dụng trên mọi nền, ngoài ra các gói như java.io, java.net cũng được khuyên dùng
Các kiến thức về các gói lập trình cho Desktop như java.awt, java.swing hoàntoàn không cần thiết, hay các gói của J2ME cũng vậy Lập trình Android tuy cũng làlập trình di động, nhưng các điện thoại sử dụng hệ điều hành Android có cấu hìnhrất mạnh (Nexus One có VXL lên tới 1Ghz), vì vậy 2 nền tảng Android và J2MEcũng rất khác nhau Android có những gói riêng hỗ trợ lập trình cho nó và khôngyêu cầu khắt khe về việc tối ưu code như J2ME Thật đáng tiếc vì có thể những kiếnthức học được từ J2ME không ứng dụng được nhiều vào trong lập trình Android(tuy nhiên 1 số kỹ thuật cơ bản cho lập trình game 2D như Sprite, double buffering,Tile thì không hề phí phạm chút nào )
2.2 Hiểu ứng dụng Android:
Việc hiểu được các thành phần (component) tạo nên một ứng dụng Android
là rất cần thiết cho việc lập trình Các thành phần này được chia làm 6 loại bao gồm:
1 Activity: hiểu một cách đơn giản thì Activity là nền của một ứng dụng Khi khởi
động một ứng dụng Android nào đó thì bao giờ cũng có một main Activity được gọi,hiển thị màn hình giao diện của ứng dụng cho phép người dùng tương tác
2 Service: thành phần chạy ẩn trong Android Service sử dụng để update dữ liệu,
đưa ra các cảnh báo (Notification) và không bao giờ hiển thị cho người dùng thấy
Trang 133 Content Provider: kho dữ liệu chia sẻ Content Provider được sử dụng để quản
lý và chia sẻ dữ liệu giữa các ứng dụng
4 Intent: nền tảng để truyền tải các thông báo Intent được sử dụng để gửi các
thông báo đi nhằm khởi tạo một Activity hay Service để thực hiện công việc mongmuốn VD: khi mở một trang web, thì cần gửi một intent đi để tạo một activity mớihiển thị trang web đó
5 Broadcast Receiver: thành phần thu nhận các Intent bên ngoài gửi tới VD: viết
một chương trình thay thế cho phần gọi điện mặc định của Android, khi đó cần mộtBroadcast Receiver để nhận biết các Intent là các cuộc gọi tới
6 Notification: đưa ra các cảnh báo mà không làm cho các Activity phải ngừng
1 Foreground process: là process của ứng dụng hiện thời đang được người dùng
tương tác
2 Visible process: là process của ứng dụng mà activity đang hiển thị đối với người
dùng (onPaused() của activity được gọi)
3 Service process: là Service đang được chạy
4 Background process: là process của ứng dụng mà các activity của nó ko hiển thị
với người dùng (onStoped() của activity được gọi)
5 Empty process: process không có bất cứ 1 thành phần nào active Theo chế độ ưu
tiên thì khi cần tài nguyên, Android sẽ tự động kill process, trước tiên là các emptyprocess
Trang 14Vòng đời của Android Activity:
Như đã giới thiệu ở trên, Actitvity là thành phần quan trọng nhất và đóng vaitrò chính trong xây dựng ứng dụng Android Hệ điều hành Android quản lý Activitytheo dạng stack: khi một Activity mới được khởi tạo, nó sẽ được xếp lên đầu của
stack và trở thành running activity, các Activity trước đó sẽ bị tạm dừng và chỉ hoạt
động trở lại khi Activity mới được giải phóng
Activity bao gồm 4 state:
- active (running): Activity đang hiển thị trên màn hình (foreground).
- paused: Activity vẫn hiển thị (visible) nhưng không thể tương tác (lost focus).
VD: một activity mới xuất hiện hiển thị giao diện đè lên trên activity cũ, nhưng giaodiện này nhỏ hơn giao diện của activity cũ, do đó ta vẫn thấy được 1 phần giao diệncủa activity cũ nhưng lại không thể tương tác với nó
- stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop.
- killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu tiên Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và
khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phụchồi lại trạng thái trước đó
Trang 15Hình 2.1 - Biểu đồ miêu tả Activity stateVòng đời của Activity:
- Entire lifetime: Từ phương thức onCreate( ) cho tới onDestroy( )
- Visible liftetime: Từ phương thức onStart( ) cho tới onStop( )
- Foreground lifetime: Từ phương thức onResume( ) cho tới onPause( )
Khi xây dựng Actitvity cho ứng dụng cần phải viết lại phương
thức onCreate( ) để thực hiện quá trình khởi tạo Các phương thức khác có cần viết
lại hay không tùy vào yêu cầu lập trình
Các phương thức của vòng đời:
Phương thức: onCreate()
Được gọi khi activity lần đầu tiên được tạo
Trang 16 Ở đâ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ướccủa Activity
Luôn theo sau bởi 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 Stop() , nó trở nên ẩn
on-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
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ó 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 đượcresumed và bao phủ nó
Trang 17 Được theo sau bởi onRestart() nế activity đang trở lại để tương tác với ngườidù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ạmthời bị hủy diệt để tiết kiệm vùng nhớ
XML trong Android:
Không giống như lập trình java thông thường, lập trình android ngoài các lớpđược viết trong *.java còn sử dụng XML để thiết kế giao diện cho ứng dụng Tuynhiên vẫn hoàn toàn có thể thiết kế 1 giao diện như ý muốn mà không cần tới XMLnào, nhưng sử dụng XML sẽ đơn giản công việc đi rất nhiều Đồng thời sử dụngXML sẽ giúp việc chỉnh sửa ứng dụng sau này trở nên dễ dàng
Về nguyên tắc, khi lập trình ứng dụng thì thiết kế giao diện bằng XML và càiđặt các xử lý khi tương tác với giao diện trong code java
Để có thể lập trình viết các ứng dụng cho Android thì cần phải sử dụng đến
bộ công cụ cần thiết Muốn phát triển ứng dụng Android có thể sử dụng một máytính chạy Mac, Linux, Window,
2.4 Các công cụ cần thiết
Trước tiên ta cần một IDE để lập trình (nói dễ hiểu là 1 công cụ soạn thảo, gỡlỗi và biên dịch mã nguồn) Trong khuôn khổ báo cáo này, Eclipse IDE được sửdụng vì nó chạy được trên nhiều hệ điều hành như Windows, Mac, Linux và là 1IDE đa ngôn ngữ, hỗ trợ các ngôn ngữ như C/C+, Java, Cobol, Python,
Eclipse IDE có thể được download tại: http://www.eclipse.org/downloads/
Vì Eclipse là phần mềm viết trên java và lập trình Android cũng sử dụng java
làm ngôn ngữ chính cho nên cần phải có bộ thư viện của java (JDK)
Trang 18JDK có thể được download tại địa chỉ:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Cuối cùng là cần phải có gói công cụ và thư viện của android về để có thể lập
trình trên android (Android SDK)
Download Android SDK tại: http://developer.android.com/sdk/index.html
Android Emulator là một chương trình giả lập hệ điều hành Android trên máytính, 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ởiFabrice Bellard
Trang 19Hình 2.2 - Hình ảnh máy ảo Android sau khi khởi động