Đồ án tốt nghiệp: Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android doc - Pdf 15


Đồ án tốt nghiệp

Tìm hiểu và xây dựng ứng dụng Phone
Book Safe Manager trên Android
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 1
Sinh viên: Trần Hữu Phước
MỤC LỤC
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 4
1. LỊCH SỬ ANDROID 4
2. DELVING VỚI MÁY ẢO DALVIK 5
3. KIẾN TRÚC CỦA ANDROID 5
3.1. Tầng ứng dụng 6
3.2. Application framework 6
3.3. Library 7
3.4. Android Runtime 7
3.5. Linux kernel 8
4. ANDROID EMULATOR 8
5. CÁC THÀNH PHẦN TRONG MỘT ANDROID PROJECT 9
5.1. AndroidManifest.xml 9
5.2. File R.java 10
6. CHU KỲ ỨNG DỤNG ANDROID 11
6.1. Chu kỳ sống thành phần 12
6.2. Activity Stack 12
6.3. Các trạng thái của chu kỳ sống 13
6.4. Chu kỳ sống của ứng dụng 13

9. BACKGROUND SERVICE 29
10. TELEPHONY 32
11. SQLITE 32
12. ANDROID & WEBSERVICE 33
12.1. Khái niệm Web service và SOAP 33
12.2. Giới thiệu về XStream 34
12.3. Thao tác với web service trong Android 36
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 38
13. ĐẶC TẢ BÀI TOÁN 38
14. ĐẶC TẢ CHỨC NĂNG 38
14.1. Upload phone book 38
14.2. Revert phone book 39
14.3. Send contact 40
14.4. Reveive contact 40
14.5. Export contact tới SD Card 40
14.6. Import contact từ SD Card 41
14.7. Account Manager 41
14.7.1. Login 41
14.7.2. Change password 41
14.7.3. Restore account 41
14.7.4. Create account 42
15. CÁC BIỂU ĐỒ HỆ THỐNG 42
15.1. Biểu đồ Usercase 42
15.1.1. Restore account 43
15.1.2. Export Contact vào SD Card 43
15.1.3. Import Contact từ SD Card 43
15.1.4. Login 44
15.2. Biểu đồ Class 44
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android

18.2.3. Màn hình danh sách phone bool đã upload 58
19. ĐÁNH GIÁ ỨNG DỤNG 59
20. HƯỚNG PHÁT TRIỂN TRONG TƯƠNG LAI 59
21. KẾT LUẬN 60
ĐÁNH GIÁ CỦA GIÁO VIÊN
TÀI LIỆU THAM KHẢO
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 4
Sinh viên: Trần Hữu Phước
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1. LỊCH SỬ ANDROID
Ban đầu, Android là hệ điều hành cho các thiết bị cầm tay dựa trên lõi Linux do
công ty Android Inc. (California, Mỹ) thiết kế. Công ty này sau đó được Google mua
lại vào năm 2005 và bắt đầu xây dựng Android Platform. Các thành viên chủ chốt tại
ở Android Inc. gồm có: Andy
Rubin, Rich Miner,
Nick Sears, and Chris
White.
Hình 1-1
Android
timeline

Và sau tiếp, vào cuối năm 2007, thuộc về Liên minh Thiết bị Cầm tay Mã Nguồn
mở (Open Handset Alliance) gồm các thành viên nổi bật trong ngành viễn thông và
thiết bị cầm tay như:
Texas Instruments, Broadcom Corporation, Google, HTC, Intel, LG, Marvell
Technology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics, Sprint
Nextel, T-Mobile, ARM Holdings, Atheros Communications, Asustek Computer Inc,
Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, and Vodafone Group,…

Android. Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik
(dex). Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ
xử lý. Dalvik đã được thiết kế và viết bởi Dan Bornstein, người đã đặt tên cho nó sau
khi đến thăm một ngôi làng đánh cá nhỏ có tên là Dalvík ở đảo Eyjafjörður, nơi mà
một số tổ tiên của ông sinh sống.
Từ góc nhìn của một nhà phát triển, Dalvik trông giống như máy ảo Java (Java
Virtual Machine) nhưng thực tế thì hoàn toàn khác. Khi nhà phát triển viết một ứng
dụng dành cho Android, anh ta thực hiện các đoạn mã trong môi trường Java. Sau đó,
nó sẽ được biên dịch sang các bytecode của Java, tuy nhiên để thực thi được ứng dụng
này trên Android thì nhà phát triển phải thực thi một công cụ có tên là dx. Đây là công
cụ dùng để chuyển đổi bytecode sang một dạng gọi là dex bytecode. "Dex" là từ viết
tắt của "Dalvik executable" đóng vai trò như cơ chế ảo thực thi các ứng dụng Android.
3. 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.
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 6
Sinh viên: Trần Hữu Phước
Hình 1-2 Cấu trúc stack hệ thống Android
3.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.
3.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.

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.
3.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
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 8
Sinh viên: Trần Hữu Phước
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ư luồng và quản lý bộ nhớ thấp.
3.5. Linux 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.
4. ANDROID EMULATOR

<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".LoginActivity"
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"/>
</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ư:
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 10
Sinh viên: Trần Hữu Phước
 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.

sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 11
Sinh viên: Trần Hữu Phước
*/
package dtu.k12tpm.pbs.activity;
public final class R {
public static final class array {
public static final int array_timeout=0x7f050000;
}
public static final class attr {
}
public static final class drawable {
public static final int add=0x7f020000;
public static final int backup_icon=0x7f020001;
public static final int checkall=0x7f020002;
}
public static final class id {
public static final int Button01=0x7f070006;
public static final int Button02=0x7f070007;
public static final int CheckBox01=0x7f070017;
}
public static final class layout {
public static final int contact_list=0x7f030000;
public static final int content_sender=0x7f030001;
public static final int friend_list=0x7f030002;
}
public static final class menu {
public static final int context_menu=0x7f060000;
public static final int menu_options=0x7f060001;

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 người dùng 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-5 Activity stack
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 13
Sinh viên: Trần Hữu Phước
6.3. Các trạng thái của chu kỳ sống
Hình 1-6 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à
thông tin thành viên trong nó. Người dùng không thấy nó và thường bị loại bỏ trong
trường hợp hệ thống cần vùng nhớ cho tác vụ khác.
6.4. Chu kỳ sống của ứng dụng
Trong một ứng dụng Android có chứa nhiều thành phần và mỗi thành phần đều có
một chu trình sống riêng. Và ứng dụng chỉ được gọi là kết thúc khi tất cả các thành
phần trong ứng dụng kết thúc. Activity là một thành phần cho phép người dùng giao
tiếp với ứng dụng. Tuy nhiên, khi tất cả các Activity kết thúc và người dùng không
còn giao tiếp được với ứng dụng nữa nhưng không có nghĩa là ứng dụng đã kết thúc.
Bởi vì ngoài Activity là thành phần có khả năng tương tác người dùng thì còn có các
thành phần không có khả năng tương tác với người dùng như là Service, Broadcast

 Đượ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
và .v.v
 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
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 15
Sinh viên: Trần Hữu Phước
 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 dỉ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.

XML lên để phân tích thành mã bytecode.
Hình 1-8 Cấu trúc một giao diện ứng dụng Android
7.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 trong một screen. Có một số
loại ViewGroup như sau:
7.2.1. 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.
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 17
Sinh viên: Trần Hữu Phước
Hình 1-9 Bố trí các widget sử dụng LinearLayout
7.2.2. 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 1-10 Bố trí các widget trong FrameLayout
7.2.3. 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.

Để 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: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 kiểu trực tiếp sang kiểu Button vì thực chất nó là một button.
VD: trong file mã nguồn 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 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 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

<ImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height=
"wrap_content"

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cmdButton1"
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 21
Sinh viên: Trần Hữu Phước
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 1-15 Minh hoạ cho một ListView
7.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.
VD:
TextView textView = (TextView)findViewById(R.id.textView);
CharSequence styledText =

XML:
<CheckBox
android:id="@+id/CheckBox01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check me"
android:checked="true"/>
7.10. MenuOptions
Có 2 cách tạo một MenuOptions:
Tạo bằng code:
public class Main extends Activity {
private int searchBtnId = Menu.FIRST;
private int scheduleBtnId = Menu.FIRST + 1;
private int playBtnId = Menu.FIRST + 2;
private int stopBtnId = Menu.FIRST + 3;
private int group1Id = 1;
private int group2Id = 2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 23
Sinh viên: Trần Hữu Phước
menu.add(group1Id,searchBtnId ,searchBtnId,"Search");

}
sinhvienit.net
Tìm hiểu và xây dựng ứng dụng Phone Book Safe Manager trên Android
Page | 24
Sinh viên: Trần Hữu Phước
7.11. ContextMenu
ContextMenu được sử dụng để hiển thị các tuỳ chọn khi người dùng nhấn dài 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 dài vào một cell trong ListView thì phương thức:
public void onCreateContextMenu(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
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
Hình 1-17 Minh hoạ context menu
7.12. Quick Search Box
Một trong những tính năng mới trong phiên bản Android 1.6 đó là Quick Search
Box. Đây là khuôn khổ tìm kiếm mới trên toàn hệ thống Android, điều này làm cho
người dùng có thể nhanh chóng tìm kiếm bất cứ thứ gì có trên chiếc điện thoại
Android của họ và cả các tài nguyên trên web khi họ đang online. Nó tìm kiếm và


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status