Khóa luận Tìm hiểu hệ điều hành android và xây dựng ứng dụng minh họa

MỤC LỤC

MỤC LỤC . 3

DANH MỤC CÁC HÌNH . 9

Phụ lục A Cuộc thăm dò hệ điều hành Android khuấy động thị trường

smart phone 19

Phụ lục B Những thống kê thú vị về Google Android trong những năm gần

đây (theo iTech.vn ngày 25/01/2010).24

B.1 Những thống kê từ Google . 24

B.2 Những thông tin đáng chú ý . 26

B.3 Báo cáo của Admob . 26

B.4 Báo cáo của Myxer . 28

Phụ lục C Danh sách các công ty trong Hiệp hội các thiết bị cầm tay mở .29

Phụ lục D Các smart phone dùng hệ điều hành Android .32

Phụ lục E So sánh các hệ điều hành hiện có trên smart phone .35

Phụ lục F Hai HĐH smartphone Android và iPhone tăng trưởng nhanh

nhất 39

Phụ lục G Lập trình trên Android .41

G.1 Tổng quan Android . 41

G.1.1 Định nghĩa Android . 41

G.1.2 Tính năng và kiến trúc Android . 41

G.2 Giới thiệu Java SE JDK, Android SDK , ADT, Eclipse và các bước cài đặt

44

G.2.1 Giới thiệu Java SE JDK, Android SDK, ADT, DDMS, Eclipse và mối

liên hệ giữa chúng . 44

G.2.2 Các bước cài đặt để lập trình Android . 50

G.2.3 Các điều lưu ý sau khi cài đặt . 64

G.3 Bước đầu làm quen với Android qua project HelloNhatTrungApp . 67

4

G.3.1 Các bước tạo project HelloNhatTrungApp . 67

G.3.2 Cấu trúc của một project Android . 85

G.4 Làm quen với các khung nhìn trên Eclipse qua cái nhìn trên Android

project . 87

G.4.1 Khung nhìn Java . 87

G.4.2 Khung nhìn DDMS . 99

G.4.3 Tìm hiểu Debug . 104

G.5 Làm quen với nền tảng ứng dụng Android . 108

G.5.1 Các thành phần ứng dụng . 109

G.5.2 Activities và Tasks . 114

G.5.3 Tiến trình và luồng . 115

G.5.4 Vòng đời các thành phần ứng dụng Android . 115

G.6 Làm quen với các công cụ hỗ trợ sẵn có của Android SDK . 125

G.6.1 Android Development Tools Plugin (ADT) . 125

G.6.2 Dalvik Debug Monitor Service (DDMS) . 126

G.6.3 Hierarchy Viewer . 128

G.6.4 Draw 9-patch . 130

G.6.5 Android Debug Bridge (ADB) . 134

G.6.6 Các công cụ hỗ trợ khác . 136

Phụ lục H Các vấn đề cơ bản trong lập trình Android . 137

H.1 Các vấn đề và khái niệm cơ bản trong lập trình giao diện . 137

H.1.1 Giới thiệu lập trình giao diện trên Android và các tính năng của nó 137

H.1.2 Các từ khóa thường gặp trong lập trình giao diện . 141

H.1.3 Các đơn vị tính trên giao diện . 142

H.1.4 Các thuộc tính thường gặp trên các View . 143

H.1.5 Tổng quát các View dưới cái nhìn hướng đối tượng . 144

H.1.6 Cách thức xây dựng và thiết kế giao diện . 149

H.1.7 Cách thao tác control trên Java code . 152

H.2 Lập trình với giao diện cơ bản . 153

5

H.2.1 Các điều khiển chứa điều khiển khác (layout) . 153

H.2.2 Các điều khiển thông dụng . 164

H.3 Các chú ý khi lập trình giao diện . 166

Phụ lục I Lập trình theo từng chủ đề . 167

I.1 Lập trình giao diện tùy biến với Adapter . 167

I.1.1 Giới thiệu sơ lược BaseAdapter và các lớp con của nó . 167

I.1.2 Dùng Adapter trên Spinner . 168

I.1.3 Dùng Adapter trên Gallery. 170

I.1.4 Dùng Adapter trên ListView cơ bản . 173

I.1.5 Dùng Adapter trên ListView nâng cao . 175

I.1.6 Dùng Adapter trên GridView cơ bản . 177

I.1.7 Dùng Adapter trên GridView nâng cao . 179

I.1.8 Kinh nghiệm lập trình với Adapter . 182

I.2 Lập trình với hoạt cảnh chuyển động (Animation). 183

I.2.1 Giới thiệu lập trình với Animation . 183

I.2.2 Lập trình với TweenAnimation . 184

I.2.3 Lập trình với FrameByFrameAnimation . 189

I.3 Lập trình với Media. 191

I.3.1 Giới thiệu . 191

I.3.2 Lập trình phát âm thanh trên Android . 193

I.3.3 Lập trình phát Video trên Android . 193

I.3.4 Nhận xét . 194

I.4 Lập trình với thao tác Telephony . 195

I.4.1 Giới thiệu . 195

I.4.2 Thực hiện gọi điện thoại tới một số cho trước . 195

I.4.3 Thực hiện gửi tin nhắn SMS . 197

I.4.4 Thực hiện chức năng rung điện thoại . 198

I.5 Lập trình với luồng (Thread) . 198

I.5.1 Giới thiệu luồng . 198

6

I.5.2 Các đặc tính và cách thức vận hành luồng . 199

I.5.3 Lập trình luồng . 200

I.6 Lập trình với thực đơn (Menu) . 202

I.6.1 Giới thiệu thực đơn . 202

I.6.2 Cách thức lập trình . 203

I.6.3 Nhận xét . 212

I.7 Lập trình với kiểu chữ (Font) . 212

I.7.1 Giới thiệu . 212

I.7.2 Cách lập trình . 213

I.7.3 Nhận xét . 214

I.8 Lập trình với khung thoại (Dialog) . 214

I.8.1 Giới thiệu . 214

I.8.2 Cách thức lập trình . 215

I.9 Lập trình với nhập xuất tập tin. 220

I.9.1 Giới thiệu . 220

I.9.2 Preferences . 221

I.9.3 Files . 222

I.9.4 Databases . 226

I.9.5 Network. 231

I.10 Lập trình với MapView . 233

I.10.1 Giới thiệu . 233

I.10.2 Cách thức lập trình . 235

I.10.3 Nhận xét . 239

I.11 Lập trình thao tác WebKit . 239

I.11.1 Giới thiệu . 239

I.11.2 Cách thức lập trình . 240

I.11.3 Nhận xét . 241

I.12 Lập trình với các widget khác . 241

I.12.1 Widget Date/Time . 241

7

I.12.2 Widget Tab . 242

Phụ lục J Lập trình với EndlessList . 245

J.1 Giới thiệu . 245

J.2 Cách thức tạo EndlessList . 246

J.2.1 Cách thức vận hành của EndlessList: . 246

J.2.2 Cách thức lập trình tạo EndlessList . 247

J.3 Nhận xét . 250

Phụ lục K Cấu trúc và ý nghĩa các thành phần của một project Android . 251

Phụ lục L Hướng dẫn sử dụng, thao tác chính trên chương trình

eSaleShopping . 253

L.1 Sơ đồ liên kết các màn hình chức năng trong ứng dụng eSaleShopping . 253

L.2 Giới thiệu chức năng của màn hình chính . 254

L.2.1 Các chức năng trên màn hình chính . 254

L.2.2 Thực đơn (menu) chức năng của màn hình chính . 255

L.3 Thao tác trên màn hình chụp mã vạch . 256

L.3.1 Sử dụng chức năng chụp mã vạch . 256

L.3.2 Các chức năng thực hiện sau khi chụp được mã vạch hàng hóa . 259

L.4 Thao tác trên màn hình tìm theo danh mục hàng hóa . 262

L.5 Thao tác trên màn hình tìm theo chuỗi . 264

L.6 Thao tác trên màn hình tìm theo hệ thống siêu thị . 265

L.6.1 Thao tác chính. 265

L.6.2 Thao tác trên các chức năng trên một siêu thị được chọn . 267

L.6.3 Tìm hàng hóa siêu thị theo chuỗi . 269

L.6.4 Tìm hàng hóa siêu thị theo mã vạch . 269

L.6.5 Tìm hàng hóa siêu thị theo danh mục . 270

L.7 Thao tác quản lý danh sách hàng hóa ưa thích . 270

L.8 Thao tác quản lý danh sách hàng hóa cần mua . 271

L.8.1 Thao tác thêm hàng cần mua . 272

8

L.8.2 Thao tác xóa hàng cần mua . 272

L.8.3 Thao tác gửi tin nhắn hàng cần mua . 273

Phụ lục M Các cấu trúc, mã lệnh, ứng dụng tham khảo được sử dụng

trong ứng dụng eSaleShopping . 275

M.1 Bộ gõ Tiếng Việt IME . 275

M.2 Chụp mã vạch hàng hóa (barcode). 276

M.3 Ứng dụng bản đồ và vị trí . 279

M.3.1 Các tham số Google Map hỗ trợ tìm kiếm đường đi . 279

M.3.2 Thể hiện đường đi trên bản đồ Google Map . 280

M.3.3 Cách thức tìm vị trí thiết bị thông qua GPS hoặc mạng . 281

M.4 Ứng dụng EndlessList . 282

M.4.1 Giải pháp của M.Murphy . 282

M.4.2 Giải pháp của Evan Charlton . 283

M.5 Mã nguồn android-misc-widgets . 284

M.5.1 Hiệu ứng hoạt cảnh . 285

M.5.2 Các widget mới . 285

pdf286 trang | Chuyên mục: Android | Chia sẻ: dkS00TYs | Lượt xem: 2231 | Lượt tải: 1download
Tóm tắt nội dung Khóa luận Tìm hiểu hệ điều hành android và xây dựng ứng dụng minh họa, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
việc áp dụng 
project ZXing này vào ứng dụng cũng là một khó khăn không nhỏ do toàn bộ mã 
nguồn được công bố hết sức “đồ sộ”. Để nắm bắt và ứng dụng được bộ mã nguồn 
này thì lượng thời gian bỏ ra để tìm hiểu là không nhỏ. Sau một hồi lần tìm giải 
pháp trên mạng, nhóm chúng tôi cũng tìm được một giải pháp thay thế đó chính là 
nhờ chương trình Barcode Scanner chụp phân giải mã vạch và trả kết quả về cho 
278 
ứng dụng eSaleShopping. Barcode Scanner cũng do nhóm ZXing phát triển (địa chỉ 
tải về ứng dụng  Việc 
gọi thực thi Barcode Scanner để lấy kết quả mã vạch được thực hiện thông qua gọi 
Intent cũng được nhóm ZXing hướng dẫn cụ thể tại: 
public Button.OnClickListener mScan = new Button.OnClickListener() { 
 public void onClick(View v) { 
 Intent intent = new 
Intent("com.google.zxing.client.android.SCAN"); 
 intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
 startActivityForResult(intent, 0); 
 } 
}; 
public void onActivityResult(int requestCode, int resultCode, Intent 
intent) { 
 if (requestCode == 0) { 
 if (resultCode == RESULT_OK) { 
 String contents = intent.getStringExtra("SCAN_RESULT"); 
 String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
 // Handle successful scan 
 } else if (resultCode == RESULT_CANCELED) { 
 // Handle cancel 
 } 
 } 
} 
Để tiện dụng hơn, nhóm chúng tôi đã dùng lớp IntentIntegrator.java và lớp 
IntentResult.java (các lớp này được tiết kế bởi các tác giả: Sean Owen, Fred Lin, 
Isaac Potoczny-Jones) để thực hiện việc gọi Intent kích hoạt chương trình Barcode 
Scanner chụp ảnh mã vạch và yêu cầu lấy kết quả trả về thông qua các phương thức 
initiateScan(…) và parseActivityResult(…) trên các Activity gọi và nhận kết 
quả từ chương trình Barcode Scanner. 
Cách gọi ứng dụng Barcode Scanner trên Activity ManHinhTimTheoMaVach: 
việc gọi Intent được thực hiện thông qua sự kiện nhấn nút “Đọc Mã Vạch” 
// button chụp barcode 
btnReadBarcode.setOnClickListener(new OnClickListener() { 
 @Override 
 public void onClick(View v) { 
IntentIntegrator.initiateScan(ManHinhTimTheoMaVach.this); 
 IntentIntegrator.initiateScan(ManHinhTimTheoMaVach.this, 
279 
 "Thông Báo", 
 "Đồng ý tải về chương trình Barcode Scanner không?", 
 "Đồng Ý", "Không"); 
 } 
}); 
Cách thức lấy kết quả trả về từ ứng dụng Barcode Scanner: 
protected void onActivityResult(int requestCode, int resultCode, Intent 
data) { 
 switch (requestCode) { 
 case IntentIntegrator.REQUEST_CODE: { 
 if (resultCode != RESULT_CANCELED) { 
 IntentResult scanResult = 
IntentIntegrator.parseActivityResult( 
 requestCode, resultCode, data); 
 if (scanResult != null) { 
 String upc = scanResult.getContents(); 
 TextView txtBarcodeResult = (TextView) 
findViewById(R.id.TextViewBarcodeResult); 
 txtBarcodeResult.setText("" + upc); 
 // . . . 
break; 
 } 
} 
 Một điểm thú vị của 2 lớp IntentIntegrator.java và lớp IntentResult.java là 
khi điện thoại không có sẵn chương trình đọc mã vạch là Barcode Scanner thì sẽ 
xuất hiện thông báo và hỏi người dùng có muốn tải về ứng dụng Barcode Scanner 
hay không. Nếu đồng ý tải về thì chương trình sẽ tìm kiếm ứng dụng Barcode 
Scanner thông qua Android Market để tiến hành tải và cài đặt ứng dụng. 
 Nhóm chúng tôi rất hoan nghênh và cám ơn cộng đồng mã nguồn mở cũng 
như các nhà lập trình đã phát triển và cung cấp những ứng dụng, project thật sự hay 
và có chất lượng như bộ mã mở ZXing như đã đề cập ở trên. 
M.3 Ứng dụng bản đồ và vị trí 
M.3.1 Các tham số Google Map hỗ trợ tìm kiếm đường đi 
280 
Việc Google mở rộng hỗ trợ chỉ đường đi cho Việt Nam là một điều thuận 
lợi cho nhóm tích hợp phần chỉ đường đi này vào bản đồ và chỉ ra đường đi tới siêu 
thị gần nhất. Thông tin yêu cầu đường đi sẽ được gửi lên Google với các tham số 
theo quy định ( Sau khi tính toán 
lộ trình đường đi, Google sẽ trả ra kết quả là một tập tin KML có cấu trúc dạng các 
thẻ XML. Ta chỉ việc phân tích thông tin từ tập tin này để có được hướng dẫn chỉ 
đường đi từ Google. 
Sau đây là ví dụ mẫu về yêu cầu tìm đường đi từ 2 điểm có kinh độ và vĩ độ 
biết trước và gửi yêu cầu lên Google tìm đường đi giữa 2 điểm ấy: 
848731,106.773877&ie=UTF8&0&om=0&output=kml. Với saddr là thông tin 
kinh độ, vĩ độ của điểm xuất phát; dsddr là thông tin kinh độ, vĩ độ của điểm cần 
đến. 
Nội dung của một tập tin KML được trả về từ Google 
<kml 
xmlns="">Nguyễn Trãi to 
Unknown road<Style 
id="roadStyle">7fcf00646</LineSt
yle><a 
href="
r=10.848731,106.773877&ie=UTF8&om=0">Printable 
view]]>Head east on Nguyễn Trãi 
toward Nguyen Bieu<![CDATA[go 
0.2 km]]>Nguyễn 
Trãinormal<h
ref>
<hotSpot x="0.500000" y="0.000000" xunits="fraction" 
yunits="fraction" 
/>
ALL/mapfiles/kml/paddle/go-lv.png . . . 
M.3.2 Thể hiện đường đi trên bản đồ Google Map 
Nhóm đã tham khảo và áp dụng bài viết chỉ dẫn vẽ đường đi lên bản đồ 
GoogleMap là: Android - Driving Direction (Route Path) tại địa chỉ 
tw.blogspot.com/2009/06/android-driving-direction-route-path.html để hiện thực 
hóa chức năng chỉ đường đi đến siêu thị. 
281 
Hình phụ lục 214 Ứng dụng vẽ đường đi trên bản đồ Google Map trong eSaleShopping 
 Nhóm đã tham khảo 2 lớp là Direction.java (truyền tham số lên Google) và 
MyOverlay.java (vẽ đường đi trên bản đồ) để áp dụng vào ứng dụng 
eSaleShopping. Bên cạnh tham khảo 2 lớp này, nhóm đã tiến hành xử lý lại thuật 
toán đọc tập tin KML để có thể lấy về cũng như tính toán ra đường đi ngắn nhất đến 
một siêu thị gần nhất. 
M.3.3 Cách thức tìm vị trí thiết bị thông qua GPS hoặc mạng 
Để chương trình có thể xác định được vị trí hiện tại nhóm đã tham khảo bài 
viết “Android Examples - Using Location API”, được viết bởi tác giả Marko 
Gargenta tại địa chỉ  
và mã nguồn tham khảo của bài viết tại địa chỉ 
Đồng thời nhóm cũng có tham khảo bài viết của thành viên có nickname là 
jagtap.jj1 trên diễn đàn anddev.org với phần bài viết là “app with GPS-enable but 
the device is indoor” (
enable_but_the_device_is_indoor-t8997.html) để tham khảo 2 phương: 
282 
startLocationReceiving(), stopLocationReceiving() cho việc khởi động hay 
dừng các thiết bị nhận tín hiệu xác định vị trí hiện tại. 
M.4 Ứng dụng EndlessList 
Khái niệm EndlessList đã được chúng tôi trình bày trong phụ lục J. Ở phần 
này chúng tôi chỉ trình bày 2 giải pháp tiêu biểu mà chúng tôi có dịp tham khảo và 
áp dụng vào ứng dụng eSaleShopping. 
M.4.1 Giải pháp của M.Murphy 
Mark Murphy hiện làm việc cho Commons Ware, email liên hệ: 
mmurphy@commonsware.com 
Tác giả có cung cấp sẵn mã nguồn cũng như hướng dẫn sử dụng project 
CWAC EndlessAdapter tại địa chỉ  
Nhóm đã có dịp dùng và ứng dụng EndlessAdapter của M.Murphy vào bài toán 
EndlessList. Việc ứng dụng EndlessList vào tuy đã giải quyết được vấn dề của 
EndlessList nhưng bên cạnh đó EndlessAdapter còn tồn tại một lỗi nhỏ đó là vòng 
tròn xoay thể hiện tiến trình download dữ liệu mới từ server để gắn thêm vào 
ListView hiển thị bị lỗi. Chúng hiển thị không có kiểm soát trên màn hình 
ListView. Do mã nguồn của ứng dụng được tác giả đóng gói thành một tập tin .jar 
nên nhóm chúng tôi không thể hiệu chỉnh lại lỗi này nên đã tiến hành tìm kiếm giải 
pháp khác cho vấn đề EndlessList. Hình bên dưới thể hiện ứng dụng chạy của 
EndlessAdapter và bug lỗi của nó. 
283 
Hình phụ lục 215 Hình minh họa và bug lỗi cũa EndlessAdapter 
M.4.2 Giải pháp của Evan Charlton 
Tác giả Evan Charlton hiện là sinh viên năm 4 của học viện công nghệ 
Rochester ( Trong bài viết công bố trên mạng của 
tác giả ( nhóm 
thấy đây là một nguồn tham khảo rất hữu ích. Ứng dụng Magnatune 
( của tác giả không những 
giải quyết rất tốt vấn đề của EndlessList đồng thời cũng có cách giải quyết việc 
download hình ảnh minh họa về máy một cách linh hoạt và uyển chuyển. Ứng dụng 
Magnatune sẽ tải về máy thông tin (chuỗi ký tự) tên các bài hát, album, thông tin 
nhạc sĩ ca sĩ từ server về hiển thị trước trên ListView và hình ảnh sẽ được download 
về tại thẻ nhớ và khi download được hình nào thì sẽ hiển thị lên trên ListView ngay 
sau đó như hình minh họa bên dưới. 
Nhóm chúng tôi đã dùng lại các hàm thiết kế của tác giả để phục vụ cho ứng 
dụng eSaleShopping là: 
284 
 Dùng lại các lớp HTTPQueue.java, HTTPThread.java, 
RemoteImageView.java: phục vụ cho việc chạy ngầm tải hình ảnh từ server 
về dưới dạng danh sách hàng đợi dùng Thread. 
 Hiệu chỉnh lớp MagnatuneAPI.java nhưng có chỉnh sửa lại cho phù 
hợp để phục vụ việc lưu vết thư mục tạm lưu trữ hình ảnh từ server về. 
 Hiệu chỉnh lớp LazyAdapter.java phục vụ hiển thị một item trên 
ListView. 
 Hiệu chỉnh lớp LazyActivity.java, đây là lớp mà nhóm tham khảo kỹ 
nhất và thực hiện viết lại một số tính năng cho phù hợp vì trong lớp này chứa 
giải pháp giải quyết vấn đề của EndlessList cực kỳ hiệu quả đó là dùng Task 
không đồng bộ. Vấn đề dùng Task không đồng bộ đã được nhóm trình bày 
tại phụ lục J. 
Hình phụ lục 216 Hình minh họa của ứng dụng Magnatune 
M.5 Mã nguồn android-misc-widgets 
Đây là một project được viết bởi tác giả có nickname là pskink 
( được đăng tải trên Google Code tại địa chỉ 
285 
 Đây là một project chứa một loạt 
các hiệu ứng chuyển động (animation) và widget mới rất tiện dụng và hữu ích. 
Nhóm chúng tôi đã áp dụng một số lớp, thiết kế trong projec android-misc-widget 
để làm phong phú thêm cho ứng dụng eSaleShopping. 
M.5.1 Hiệu ứng hoạt cảnh 
Nhóm chúng tôi đã dùng lại hết các lớp tạo hiệu ứng chuyển động vào ứng 
dụng eSaleShopping. Đó là các ứng với hình minh họa bên dưới. 
Hình phụ lục 217 Các lớp tạo hiệu ứng chuyển động được dùng lại trong ứng dụng eSaleShopping 
M.5.2 Các widget mới 
Nhóm đã dùng lại 2 widget mới đó có tên là Panel và Switcher để làm cho 
ứng dụng eSaleShopping thêm phần phong phú hơn. 
286 
Hình phụ lục 218 Ứng dụng Panel tạo khung chỉ đường đi trên bản đồ trong eSaleShopping 
Hình phụ lục 219 Ứng dụng Switcher tạo lựa chọn hình thức bán hàng trong eSaleShopping 

File đính kèm:

  • pdfKhóa luận Tìm hiểu hệ điều hành android và xây dựng ứng dụng minh họa.pdf
Tài liệu liên quan