Tải bản đầy đủ (.docx) (64 trang)

Nghiên cứu về web service và xây dựng chương trình đọc tin tức online

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.62 MB, 64 trang )

LỜI CẢM ƠN
Lời đầu tiên em xin gửi lời cảm ơn chân thành tới tất cả các Thầy cô giáo
tại Trường Đại học Công nghệ thông tin và Truyền thông – Đại học Thái Nguyên
đã tận tình giảng dạy, chỉ bảo cho chúng em những kiến thức quý báu trong suốt
thời gian học tập tại trường.
Đặc biệt, em xin gửi lời cảm ơn Thầy giáo Thạc sỹ Nguyễn Anh Chuyên
đã trực tiếp hướng dẫn và tạo điều kiện để em có thể hoàn thành đồ án này.
Mặc dù đã có nhiều cố gắng để hoàn thiện đồ án, xong không thể tránh
khỏi thiếu sót, em rất mong nhận được sự quan tâm, giúp đỡ và đóng góp quý
báu của thầy cô và các bạn.
Em xin chân thành cảm ơn!
Thái Nguyên, tháng 06 năm 2012
Sinh viên
Trần Thị Loan


LỜI CAM ĐOAN
Để hoàn thành đồ án tốt nghiệp đúng thời gian quy định và đáp ứng được
yêu cầu đề ra, bản thân em đã cố gắng nghiên cứu, học tập và làm việc trong thời
gian dài. Em đã tham khảo một số tài liệu nêu trong phần “Tài liệu tham khảo”
và không hề sao chép nội dung từ bất kỳ đồ án nào khác. Toàn bộ đồ án là do bản
thân nghiên cứu xây dựng nên.
Em xin cam đoan những lời nói trên là đúng sự thật, mọi thông tin sai lệch
em xin hoàn toàn chịu trách nhiệm trước Hội đồng.

Thái Nguyên, tháng 06 năm 2012
Sinh viên
Trần Thị Loan


MỤC LỤC



DANH MỤC HÌNH ẢNH

3


DANH MỤC BẢNG

4


LỜI MỞ ĐẦU
Mạng điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990
và theo thời gian số lượng các thuê bao cũng như các nhà cung cấp dịch vụ di
động tại Việt Nam ngày càng tăng. Do nhu cầu trao đổi thông tin ngày càng tăng
và nhu cầu sử dụng các sản phẩm công nghệ cao với nhiều tính năng, cấu hình
cao, chất lượng tốt, kiểu dáng mẫu mã đẹp, phong phú nên nhà cung cấp phải
luôn được cải thiện, nâng cao những sản phẩm của mình. Do đó, việc xây dựng
các ứng dụng cho điện thoại di động đang là một ngành công nghiệp mới đầy
tiềm năng và hứa hẹn nhiều sự phát triển vượt bậc của ngành khoa học kĩ thuật.
Cùng với sự phát triển của thị trường điện thoại di động là sự phát triển
mạnh mẽ của xu hướng lập trình phần mềm ứng dụng cho các thiết bị di động.
Phần mềm, ứng dụng cho điện thoại di động hiện nay rất đa dạng và phong phú
trên các hệ điều hành di động cũng phát triển mạnh mẽ và đang thay đổi từng
ngày. Các hệ điều hành J2ME, Android, IOS, Hybrid, Web based Mobile
Application đã rất phát triển trên thị trường truyền thông di động. Nhưng đáng kể
nhất chính là hệ điều hành Android ra đời với sự kế thừa những ưu việt của các
hệ điều hành ra đời trước và sự kết hợp của nhiều công nghệ tiên tiến hiện nay,
đã được nhà phát triển công nghệ rất nổi tiếng hiện nay là Google. Android đã
nhanh chóng là đối thủ cạnh tranh mạnh mẽ với các hệ điều hành trước đó và

đang là hệ điều hành di động của tương lai và được nhiều người ưa chuộng nhất.
Em đã chọn đề tài “Nghiên cứu về Webservice và xây dựng chương
trình đọc tin tức online” với mục đích là tìm hiểu công nghệ lập trình mới hiện
nay, tìm hiểu ngôn ngữ, môi trường làm việc, cách thức hoạt động và lập trình
ứng dụng cho điện thoại di động.
Để thực hiện điều đó em đã tìm hiểu về ngôn ngữ lập trình trên hệ điều
hành Android và tìm hiểu về ứng dụng đọc tin tức online trên di động. Với cuộc
sống phát triển như ngày nay nhu cầu về sự nhanh chóng tiện lợi là rất cần thiết,
chúng ta ko thể lúc nào cũng có thể xem tivi, hay ngồi xem với cái máy tính to và
cồng kềnh được. Chính vì vậy đã có rất nhiều ứng dụng đã được thiết kế để chỉ

5


với một chiếc điện thoại nhỏ gọn trong lòng bàn tay và ở mọi nơi mọi lúc chúng
ta cũng có thể cập nhật thông tin một cách nhanh chóng và hiệu quả. Vì vậy đề
tài em chọn nhằm phục vụ một nhu cầu đó là cập nhật thông tin về các lĩnh vực
trong cuộc sống trên hệ điều hành Android.
Nội dung đề tài bao gồm 3 chương:
Chương 1: Tổng quan về cơ sở lý thuyết
Chương 2: Khảo sát thực tế và phân tích thiết kế hệ thống
Chương 3: Nghiên cứu ứng dụng Webservice và xây dựng chương
trình đọc tin tức online
Do kiến thức, khả năng còn hạn chế và thời gian tìm hiểu ngắn nên đồ án
còn nhiều thiếu sót, em mong nhận được sự góp ý của các thầy cô và các bạn để
đồ án hoàn thiện hơn.
Em xin chân thành cảm ơn!

6



CHƯƠNG 1: TỔNG QUAN CƠ SỞ LÝ THUYẾT

1.1 Kiến trúc hệ điều hành Android
Hệ điều hành android có 4 tầng từ dưới lên trên là tầng hạt nhân Linux
(Phiên bản 2.6), tầng Libraries & Android runtime, tầng Application Framework
và trên cùng là tầng Application:

Hình 1.1 Kiến trúc hệ điều hành Android.
1.1.1 Tầng hạt nhân Linux

Hệ điều hành android được phát triển dựa trên hạt nhân linux, cụ thể là
hạt nhân linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng này. Tất cả
mọi hoạt động của điện thoại muốn thi hành được thì đều được thực hiện ở mức
cấp thấp, ở lớp này bao gồm quản lý bộ nhớ (memory management), giao tiếp
với phần cứng (driver model), thực hiện bảo mật (security), quản lý tiến trình
(process).

7


Hình 1.2 Tầng hạt nhân Linux.
Tuy được phát triển dựa vào nhân linux nhưng thực ra nhân linux này đã
đượ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ầu kết nối mạng không dây...
-

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.
Power Madagement: Giám sát việc tiêu thụ điện năng.

-

M-System Driver: Quản lý việc đọc ghi lên các thiết bị bộ nhớ như thẻ
SD, flash.

8


-

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 để đảm bảo những chức năng truyền
thông được thực hiện.

1.1.2 Tầng Library and Android Runtime

Gồm 2 phần là Libraries và Android Runtime

Hình 1.3 Tầng Library and Android runtime.
-

Phần Libraries: Có nhiều thư viện được viết bằng C/C++ để các phần
mềm có thể sử dụng, các thư viện đó được tập hợp thành một số nhóm
như :

- Thư viện hệ thống (System C library)(Libc) : 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ư để 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…
Surface Manage: Quản lý hiển thị 2D và 3D.
SGL công nghệ 2D.
SQLite: Quản lý database của ứng dụng.
9


- Free Type: Dùng cho hiển thị ảnh, font.
- SSL(Secure Socket Layer): Tầng thiết lập giao dịch an toàn trên 2

-

ứng dụng trên 1 cổng (socket).
- Open GL/EL: Hỗ trợ thư viện tùy chọn 3D tĩnh và động.
Phần Android Runtime: 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ính thườ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(Java Runtime Environment) của
Sun (nay là Oracle) (JVM) mà là chạy bằng máy ảo Dalvik (máy ảo dalvik được
đặt tên sau khi 1 nhà phát triển phần mềm của google, tạo ra nó sau khi đi thăm 1
ngôi làng ở nơi tổ tiên ông sinh sống) do Google phát triển. Máy ảo davik thực
thi tập tin davik(dex), khác với java là chuyển sang dạng bytecode. Định dạng
này được tối ưu hóa cho bộ nhớ tối thiểu.
1.1.3 Tầng 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 hơn nữa.

10


Hình 1.4 Tầng Application Framework.
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. 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:
-

View Manage: Một tập hợp rất nhiều các View có khả năng kế thừa lẫn
nhau dùng để thiết kế phần giao diện ứng dụng như: gridview, tableview,

-

linearlayout…
Activity Manager: Quản lý các chu kỳ sống của một ứng dụng cũng như

-

cung cấp công cụ điều khiển các Activity.
Telephony Manager: Cung cấp công cụ để thực hiện việc liên lạc như gọi

-


điện thoại.
Location Manager: Cho phép xác định vị trí của điện thoại thoại dựa

-

vào hệ thống định vị toàn cầu GPS và Google Maps.
Window Manager: Quản lý việc xây dựng và hiển thị các giao diện người

-

dùng cũng như tổ chức quản lý các giao diện giữa các ứng dụng.
Notication Manager: Quản lý việc hiển thị các thông báo (như báo có tin

-

nhắn, có 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).

11


-

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 đó.


1.1.4 Tầ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 cài đặt đi liền với hệ điều hành là 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 widget,

-

các ứng dụng của bên thứ 3…
Các ứng dụng viết sẽ có những đặc tính sau:
- Viết bằng Java, phần mở rộng là .apk.
- Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual
Machine được dựng lên để phục vụ cho nó. Nó có thể là một
Active Program: chương trình có giao diện với người sử dụng hoặc
là một background : chương trình chạy nền hay là dịch vụ.

- Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng
một thời điểm, có thể có nhiều chương trình cùng chạy một lúc, tuy
nhiên, với mỗi ứng dụng thì có duy nhất một thực thể (instance)
được phép chạy mà thôi. Điều đó có tác dụng hạn chế sự lạm
dụng tài nguyên, giúp hệ thống hoạt động tốt hơn. Các ứng dụng

-

được phân quyền và tự hệ thống sẽ kill nếu mức ưu tiên thấp.

Các ứng dụng được gán số ID của người sử dụng nhằ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ử dung quá 5~10% công suất CPU, điều
đó nhằm để tránh độc quyền trong việc sử dụng CPU.

1.2 Các thành phần trong một Android Project
1.2.1 File AndroidManifest

12


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à
SDK version.
Dưới đây là nội dung của một file Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=" />package="dtu.k12tpm.pbs.activity"
android:versionCode="1"
android:versionName="1.0">

android:label="@string/app_name">
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainContactListActivity" />
<activity android:name=".RestoreContactActivity" />
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>

13


- 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:
android:name="android.permission.READ_PHONE_STATE"/>
android:name="android.permission.ACCOUNT_MANAGER"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CALL_PHONE"/>

- SDK version: Thẻ xác định phiên bản SDK được khai báo như sau:
<uses-sdk android:minSdkVersion="7" />
Ở đây chỉ ra phiên bản SDK nhỏ nhất mà ứng dụng hiện đang sử dụng.
1.2.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ư, bạn 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

14


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.
1.2.3 File.xml


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. Ta có thể thiết kế giao diện như ý muốn mà
không cần sử dụng đến xml, nhưng việc sử dụng xml sẽ làm công việc đơn giản
đi rất nhiều. Đồng thời việc sử dụng xml sẽ giúp việc chỉnh sửa ứng dụng trở nên
dễ dàng hơn.
Về nguyên tắc, khi lập trình ứng dụng ta 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 trên code.

1.3 Các thành phần giao diện trong Android
1.3.1 View

Trong một ứng dụng Android giao diện người dùng được xây dựng từ các
đối tượng View và ViewGroup. Có nhiều kiểu View và ViewGroup. Mỗi một
kiểu là một hậu duệ của class View và tất cả các kiểu đó được gọi là các Widget.
Tất cả mọi Widget đều có chung các thuộc tính cơ bản như là cách trình
bày vị trí, background, kích thước, lề,… Tất cả những thuộc tính chung này được
thể hiện hết ở trong đối tượng View.
Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu
trúc phân cấp. Một screen là một tập hợp các Layout và các Widget được bố trí
có thứ tự. Để thực hiện một screen thì trong hàm onCreat của mỗi Activity cần
phải được gọi một hàm setContentView(R.layout.main); hàm này sẽ load giao
diện từ file XML lên để phân tích thành mã bytecode.

15


Hình 1.5 Cấu trúc một giao diện ứng dụng Android.
1.3.2 ViewGroup


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 nhau 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 dọc nhưng trên 1 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 màn hình. Các thành phần trên LinearLayout được
làm 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.

16


Hình 1.6 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 bên trên.
FrameLayout 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.7 Bố trí các widget trong FrameLayout.


- AbsoluteLayout:
17


Được sử dụng để bố trí các Widget vào một vị trí trong layout dựa vào 2
thuộc tính tọa độ x, y. Tuy nhiên, kiểu layout này rất ít khi được dùng bởi vì tọa
độ 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
khá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 1.8 Bố trí widget trong RetaliveLayout.

- TableLayout:
Đượ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.

18



Hình 1.9 Bố trí widget trong TableLayout.
1.3.3 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:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cmdButton1"
android:text="Touch me!"
android:onClick="touchMe"/>
Thuộc tính android:onClick="touchMe" được dùng để nắm bắt sự kiện
click vào button. Khi sự kiện click button xảy ra thì phương thức “touchMe”
được khai báo trong thẻ thuộc tính sẽ được gọi. Nếu trường hợp phương thức
“touchMe” chưa được khai báo trong file mã nguồn tương ứng thì sẽ phát sinh
một exception. Ngược lại, phương thức “touchMe” sẽ nhận được một đối tham
biến là đối tượng View nơi đã phát sinh ra sự kiện. Đối tượng View này có thể ép

19


kiểu trực tiếp sang kiểu Button vì thực chất nó là một button, trong file mã nguồn
ta có thể khai báo một hàm như sau:
public void touchMe(View v){
Button me = (Button) v;

Me.setText(“Touched”);
}

- Thiết kế bằng code
Thực ra mà nói thì nếu không đò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 ta
làm như sau:
Button cmdButton = new Button(this);
cmdButton.setText(“Touch Me!”);
cmdButon.setOnClickListener(…);
Để custom một widget nào đó ta phải tạo một class kế thừa từ class
Widget muốn custom, sau đó sử dụng hàm draw để vẽ lại widget đó như một
Canvas.
1.3.4 ImageButton

Cũng tương tự như Button, ImageButton chỉ có thêm một thuộc tính
android:src=”@drawable/icon” để thêm hình ảnh vào và không có thẻ text.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cmdButton1"
android:src="@drawable/icon"
android:onClick="touchMe"/>
1.3.5 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.
1.3.6 ListView


20


Đượ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:
- 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 đó.
1.3.7 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.
TextView textView = (TextView)findViewById(R.id.textView);
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.
1.3.8 EditText


Trong Android đối tượng EditText được sử dụng như một TextField hoặc
một TextBox.
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"

21


android:textSize="20dip"
android:textColor="#000000"
android:text="Hello Android!"
android:singleLine="true"
android:inputType="textCapWords"/>
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
bạn 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 của bạn sẽ trở thành một
TextField, ngược lại sẽ là TextBox.
1.3.9 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 …);
XML:
android:id="@+id/CheckBox01"
android:layout_width="wrap_content"

android:layout_height="wrap_content"
android:text="Check me"
android:checked="true"/>
1.3.10 ContextMenu

ContextMenu được sử dụng để hiển thị các tuỳ chọn khi người dùng nhấn
vào một cell nào đó trong ListView. Để tạo một ContextMenu ta cũng có 2 cách
giống như tạo MenuOptions ở trên chỉ khác tên phương thức.
Khi nhấn vào một cell trong ListView thì phương thức:
Public void on CreateContextMenu (ContextMenu menu, View v,
ContextMenuInfo menuInfo) sẽ được gọi và truyền vào 3 tham số là:
- ContextMenu: Đối tượng để add các context menu item.
- View: Đối tượng nơi mà xảy ra sự kiện.

22


- ContextMenuInfo: Cho biết vị trí xảy ra sự kiện trong ListView. Để biết
được vị trí xảy ra sự kiện ta làm như sau:
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
return;
}
info.position

1.4 Các thành phần tạo nên Android Project
1.4.1 Activity


Hiểu một cách đơn giản thì Activity là nền của 1 ứng dụng. Khi khởi động
một ứng dụng Android nào đó thì bao giờ cũng có 1 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.

- Chu kỳ sống của Activity :
Hệ điều hành Android quản lý Activity theo 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 có bốn trạng thái:
- 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 giao diệ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ện củ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
23



Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái
trước đó.

Hình 1.10 Sơ đồ chu kỳ sống của Activity.
1.4.2 Content Provider

Content Provider cho phép chúng ta truy xuất dữ liệu giữa các ứng dụng
với nhau, cung cấp một tập chi tiết dữ liệu ứng dụng đến các ứng dụng khác.
Thường được sử dụng khi chúng ta muốn tạo cơ sở dữ liệu dưới dạng public.
Đa phần những ứng dụng sẵn có trong Android đều cung cấp Content
Provider, cho nên ta có thể dễ dàng lấy được những thông tin như: cấu hình máy,
danh bạ điện thoại, các event trong calendar,...

- Content Provider và URI:
Trong hệ thống Android tất cả các tài nguyên như Contact, SMS,… đều
được lưu trữ vào CSDL SQLite của hệ thống. Cũng như các CSDL khác, CSDL
mà hệ thống Android sử dụng để lưu trữ thông tin cũng cho phép chúng ta truy
vấn dữ liệu như một CSDL MSSQL thông thường. Tuy nhiên, trong hệ thống đó
chúng ta không cần phải thao tác bằng lệnh SQL nhiều để truy xuất dữ liệu mà
thay vào đó Android đã được trang bị một API cho phép người lập trình có thể dễ
dàng truy xuất dữ liệu. Đó gọi là ContentProvider. ContentProvider cung cấp cho

24


chúng ta một đối tượng con trỏ giúp chúng ta có thể dễ dàng lấy được bất cứ dữ
liệu lưu trữ nào chỉ cần cung cấp một đường dẫn đúng đến dữ liệu đó. Đường dẫn
này còn được gọi là Uri.


- Tạo một Uri:

Uri uri = Uri.parse(“content://com.android.contacts/contacts”);

- Cấu trúc gồm có 4 phần chính như sau:
Phần A: Đây là tiền tố chỉ ra dữ liệu được điều khiển bởi Content
Provider và nó không bao giờ thay đổi.
Phần B: Phần này chỉ đến nơi lưu trữ dữ liệu. Cũng giống như cấu trúc
của một số điện thoại thì cái này có thể hình dung nó như là mã quốc gia hoặc
cũng có thể coi nó như là tên của CSDL.
Phần C: Phần này chỉ ra loại dữ liệu. Chẳng hạn như, dữ liệu contact, dữ
liệu SMS,… Phần này có thể coi nó như là tên của một table.
Phần D: Phần này chỉ đến đúng vị trí của dữ liệu, có thể coi phần này như
là ID của row trong table hoặc một dữ liệu nào đó dùng để truy vấn.
Ví dụ: Uri chỉ đến contact thứ 0 trong CSDL là content://contacts/people/0.
Để có thể thực hiện truy vấn đến vùng dữ liệu được chỉ ra bởi một Uri ta
cần có 2 đối tượng con trỏ được cung cấp bởi Activity đó là: Cursor và
ContentResolver.
Để lấy được 2 đối tượng này thì trong Activity sử dụng hàm:
getContentResolver(): Trả về đối tượng ContentResolver.
getContentResolver().query(Uri uri): Trả về đối tượng Cursor.
1.4.3 Intents

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, một ứ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 được sử dụng để gửi các thông báo đi nhằm khởi tạo một
25



×