1. Trang chủ
  2. » Giáo Dục - Đào Tạo

ĐỀ TÀI : XÂY DỰNG HỆ THỐNG GPS TRACKER TRÊN CÁC THIẾT BỊ DI ĐỘNG

84 164 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 84
Dung lượng 3,67 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ví dụ, một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại như thực hiệncuộc gọi, gửi tin nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển để tạo ra

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

Tel (84-511) 736 949, Fax (84-511) 842 771Website: itf.ud.edu.vn, E-mail: cntt@edu.ud.vn

LUẬN VĂN TỐT NGHIỆP KỸ SƯ NGÀNH CÔNG NGHỆ THÔNG TIN

MÃ NGÀNH : 05115

ĐỀ TÀI : XÂY DỰNG HỆ THỐNG GPS TRACKER TRÊN CÁC THIẾT

BỊ DI ĐỘNG

Mã số : 06T3-047 Ngày bảo vệ : 15-16/06/2011

SINH VIÊN : NGÔ VĂN TRUNG

ĐÀ NẴNG, 06/2011

Trang 2

Tôi xin chân thành cảm ơn các thầy cô trong khoa Công nghệ thông tin, trường Đại học Bách khoa Đà Nẵng đã truyền đạt những kiến thức quý báu cho tôi trong những năm học vừa qua và nhất là đã tạo điều kiện thuận lợi cho tôi học tập, thực hiện đề tài tốt nghiệp này.

Đặc biệt, tôi xin chân thành cảm ơn Thầy giáo ThS Trịnh Công Duy đã trực tiếp, tận tình giúp đỡ và hướng dẫn chúng tôi trong suốt thời gian thực hiện đề tài.

Và để có được kết quả như ngày hôm nay tôi rất biết ơn gia đình Ông

Bà, Cha Mẹ và những người thân trong gia đình đã động viên, khích lệ, tạo mọi điều kiện thuận lợi nhất về vật chất lẫn tinh thần trong suốt quá trình học tập cũng như quá trình thực hiện đề tài tốt nghiệp này.

Mặc dù đã cố gắng hoàn thành đồ án trong phạm vi và khả năng cho phép nhưng chắc chắn sẽ không tránh khỏi những thiếu sót Tôi rất mong nhận được sự thông cảm, góp ý và tận tình chỉ bảo của quý Thầy Cô và các bạn.

Một lần nữa xin chân thành cám ơn!

Đà Nẵng, ngày 20 tháng 05 năm 2011

Sinh viên thực hiện

Trang 3

Tôi xin cam đoan :

1 Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của thầy giáo Ths.Trịnh Công Duy

2 Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố.

3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá,

tôi xin chịu hoàn toàn trách nhiệm.

Sinh viên thực hiện, Ngô Văn Trung

Trang 4

MỞ ĐẦU 1

I BỐI CẢNH ĐỀ TÀI 1

II MỤC ĐÍCH VÀ Ý NGHĨA 1

III NHIỆM VỤ THỰC HIỆN 1

IV PHƯƠNG PHÁP THỰC HIỆN 1

CƠ SỞ LÝ THUYẾT 3

I Giới thiệu về Android 3

I.1 Tính năng mở của android 3

I.2 Các thành phần cơ bản của Android 5

I.2.1 Các thư viện hỗ trợ trong android 6

I.2.2 Quá trình thực thi một chương trình android 6

I.2.3 Cấu trúc của một ứng dụng android 7

II Nghiên cứu nền tảng android 7

II.1 Bộ khung của một ứng dụng android 7

II.1.1 Android Activity 8

II.1.2 Intent và Broadcast Receiver 11

II.1.3 Android Service 14

II.1.4 Content provider 16

II.1.5 Android SQLite Database 18

II.2 Vòng đời của một ứng dụng android 21

II.3 Các công cụ phát triển một ứng dụng android 23

II.3.1 Bộ giả lập của androidccvc 23

II.3.2 Những công cụ phát triển Android dành cho Eclipse IDE 28

II.3.3 Dalvik Debug Monitor Service (ddms) 28

II.3.4 Android Debug Bridge (adb) 29

II.3.5 Android Asset Packaging Tool (aapt) 29

II.3.6 Android Interface Description Language (aidl) 29

II.3.7 sqlite3 29

II.3.8 Traceview 29

II.3.9 mksdcard 29

II.3.10 dx 29

II.3.11 activityCreator 29

III Các chế độ bảo mật của một ứng dụng android 29

III.1 Truy cập tập tin và các định danh của người dùng 30

III.2 Các quyền đang được sử dụng 30

III.3 Các quyền trong việc khai báo và có tính bắt buột 31

III.4 Những quyền bắt buột có trong AndroidManifest.xml 33

III.5 Việc tuân theo các quyền khi quảng bá các intent 34

III.6 Cho phép thực thi các quyền khác 34

III.7 Các tài nguyên và quốc tế hóa 34

IV Tìm hiểu về GPS 36

IV.1 Khái niệm GPS 36

Trang 5

IV.4.1 Phần không gian 38

IV.4.2 Phần kiểm soát 38

IV.4.3 Phần sử dụng 38

IV.5 Tín hiệu Gps 39

IV.6 Nguồn lỗi của tín hiệu GPS 39

IV.7 Ứng dụng GPS trong dân dụng 40

IV.7.1 Ứng dụng trong lĩnh vực giáo dục 40

IV.7.2 Ứng dụng gps trong lĩnh vực tài nguyên thiên nhiên 41

IV.7.3 Ứng dụng GPS trong lĩnh vực Dầu & Khí đốt 42

IV.7.4 Ứng dụng GPS trong Cơ quan chính phủ 42

PHÂN TÍCH VÀ THIẾT KẾ CHƯƠNG TRÌNH 43

I KHẢO SÁT, MÔ TẢ BÀI TOÁN 43

I.1 Xây dựng biểu đồ use case 43

I.1.1 Các tác nhân của hệ thống 43

I.1.2 Phân tích các Use Case 44

I.2 Biều đồ tuần tự 50

I.3 Biều đồ lớp 52

I.3.1 Class gpsdevicesList 52

I.3.2 Class gpsDevices 52

I.3.3 Class gpsHistory 53

II XÂY DỰNG CƠ SỞ DŨ LIỆU 54

CÀI ĐẶT VÀ THỬ NGHIỆM 57

I Yêu cầu đối với hệ thống 57

II Cài đặt Android và Eclipse 58

II.1 Download Android SDK 58

II.2 Tích hợp Android SDK vào Eclipse 60

II.3 Android Virtual Devices 62

II.4 Cài đặt chương trình Gps_Tracker 63

II.4.1 Cài đặt chương trình trên Emulator 63

II.4.2 Cài đặt chương trình vào Eclipse 64

III Kết quả Demo chương trình 66

III.1 Kết quả ở client ( trên thiết bị android) 66

III.1.1 Màn hình khởi động chương trình 66

III.1.2 Màn hình About 67

III.1.3 Màn hình Login 68

III.1.4 Màn hình View Map 69

III.2 Kết quả trên server 71

III.2.1 Giao diện chính của người sử dụng trên server 71

III.2.2 Thêm mới một thiết bị mới 72

III.2.3 Xem lại history của thiết bị 73

III.2.4 Xem lại đường đi của thiết bị 73

III.2.5 Xem vị trí hiện tại của 1 thiết bị 74

Trang 6

I Kết quả đạt được 75

II Hướng phát triển 75

Trang 7

DANH MỤC HÌNH

Hình 1 Giới thiệu android 3

Hình 2 Kiến trúc android 5

Hình 3 Biểu đồ mô tả activity state 9

Hình 4 Service lifecycle 15

Hình 5 Ví dụ content provider 17

Hình 6 các tác nhân của hệ thống 43

Hình 7 use case người sử dụng ở client 44

Hình 8 Use case người sử dụng ở server 47

Hình 9 Biểu đồ tuần tự người dùng ở client 50

Hình 10 Biểu đồ tuần tự người dùng ở server 51

Hình 11 Biểu đồ lớp 52

Hình 12 Cơ sở dữ liệu 54

Hình 13 Cài đặt SDK 58

Hình 14 Tích hợp SDK vào eclipse 60

Hình 15 Create và start 1 AVD 63

Hình 16 Màn hình khởi động chương trình 66

Hình 17 Màn hình About 67

Hình 18 Màn hình Login 68

Hình 19 Màn hình View Map 69

Hình 20 Màn hình config 70

Hình 21 Giao diện chính của người sử dụng trên server 71

Hình 22 Form thêm mới một thiết bị 72

Hình 23 Trang xem history của thiết bị 73

Hình 24 Trang xem lại đường đi của thiết bị 73

Hình 25 Trang xem vị trí hiện thời của một thiết bị 74

Trang 8

I BỐI CẢNH ĐỀ TÀI

Trong nhu cầu thực tế của cuộc sống, việc quản lý và xác định vị trí các thông tin củangười sử dụng đối với các lĩnh vực mình cần quản lý ngày càng lớn Ví dụ như việc quản lýcác loại hang hóa đang được vận chuyển, quản lý con cái, quản lý tiến trình, lộ trình của mộtdịch vụ vận chuyển nào đó như EMS, DHL

Với sự phát triễn của các thiết bị di động Đặt biệt là thiết bị di động chạy trên hệ điều hành Android của google Android đã thu hút được sự chú ý của giới công nghệ khắp toàn cầu khi đứa con của Google sẽ sử dụng giấy phép mã nguồn mở Đó là một sản phẩm kết tinh

từ ý tưởng của Khối Liên minh thiết bị cầm tay mở do Google dẫn đầu, gồm 34 thành viên với các công ty hàng đầu về công nghệ và di động toàn cầu như Qualcomm, Intel, Motorola, Texas Instruments và LG Electronics, các nhà mạng như T-Mobile, Sprint Nextel, NTT DoCoMo và China Mobile Các nhà phát triển có thể sử dụng miễn phí bộ Android Software Development Kit (SDK) để xây dựng các ứng dụng của mình

Android là một lĩnh vực còn khá mới ở Việt Nam, do đó để phục vụ cho nhu cầu thực tếtrên và tìm hiểu công nghệ của Android, em đã chọn đề tài “ Gps – Tracker “

II MỤC ĐÍCH VÀ Ý NGHĨA

Luận văn nhằm mục đích xây dựng một chương trình chạy trên hệ điều hành Android đểcung cấp địa chỉ hiện thời của người sử dụng lên Server Người quản lý các thiết bị đó ởserver có thể đăng nhập để xem vị trí hiện tại của thiết bị mình đang quản lý ở tại vị trí nào,

có thể xem lại lịch trình, đường đi của thiết bị đó

III NHIỆM VỤ THỰC HIỆN

Cần thực hiện hai bước:

 Bước 1: Xây dựng chương trình cho client ( các thiết bị di động sử dụng hệ điềuhành android)

 Bước 2: Xây dựng một web server để hiển thì các thông tin cho người quản lý

IV PHƯƠNG PHÁP THỰC HIỆN

Nghiên cứu các vấn đề lý thuyết cơ sở của andoid

Tìm hiều về api google map để xây dựng hệ thống gps_tracker dựa vào Api này củagoogle

Xây dựng chương trình trên android để thu thập và cập nhật dữ liệu cho server

Xây dựng trang web sử dụng nền tảng Joomla để hiển thị các thông tin cập được cập nhậtNghiên cứu plugin google map của joomla để vẽ bản đồ và đường đi của các thiết bị

Trang 9

I Giới thiệu về Android

Hình 1 Giới thiệu android

Android là tên một nền tảng mở cho thiết bị di động của Google (gồm hệ điều hành –[linux base], middleware và một số ứng dụng cơ bản) Androind sẽ đương đầu với một số hệđiều hành dành cho thiết bị di dộng khác đang hâm nóng thị trường như Windows Mobile,Symbian và dĩ nhiên là cả OS X (iPhone)

Android đã thu hút được sự chú ý của giới công nghệ khắp toàn cầu khi đứa con củaGoogle sẽ sử dụng giấy phép mã nguồn mở Đó là một sản phẩm kết tinh từ ý tưởng củaKhối Liên minh thiết bị cầm tay mở do Google dẫn đầu, gồm 34 thành viên với các công tyhàng đầu về công nghệ và di động toàn cầu như Qualcomm, Intel, Motorola, TexasInstruments và LG Electronics, các nhà mạng như T-Mobile, Sprint Nextel, NTT DoCoMo

và China Mobile Các nhà phát triển có thể sử dụng miễn phí bộ Android SoftwareDevelopment Kit (SDK) để xây dựng các ứng dụng của mình

I.1 Tính năng mở của android

Android được xây dựng để cho phép các nhà phát triển để tạo ra các ứng dụng di độnghấp dẫn tận dụng tất cả một chiếc điện thoại đã cung cấp Nó được xây dựng để được thực sự

mở Ví dụ, một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại như thực hiệncuộc gọi, gửi tin nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển

để tạo ra phong phú hơn và nhiều hơn nữa những kinh nghiệm cố kết cho người dùng.Android được xây dựng trên mở Linux Kernel Hơn nữa, nó sử dụng một máy ảo tuỳ chỉnh

Trang 10

Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng của bên

thứ ba Họ tất cả có thể được xây dựng để có thể truy cập bằng khả năng của một người cungcấp cho người sử dụng điện thoại với một dải rộng các ứng dụng và dịch vụ Với các thiết bịxây dựng trên Hệ điều hành Android, người dùng có thể hoàn toàn thích ứng với điện thoạiđến lợi ích của họ Họ có thể trao đổi trên màn hình của điện thoại, những phong cách củadialer, hoặc bất kỳ ứng dụng Họ thậm chí có thể hướng dẫn điện thoại của họ để sử dụnghình ảnh ưa thích của họ xem các ứng dụng để xử lý xem tất cả các hình ảnh

Android phá bỏ rào cản để xây dựng các ứng dụng mới và sáng tạo Ví dụ, một nhà pháttriển có thể kết hợp thông tin từ các trang web với dữ liệu trên điện thoại di động của một cánhân – ví dụ như địa chỉ liên hệ của người dùng, lịch, hoặc vị trí địa lý – để cung cấp một trảinghiệm người dùng có liên quan hơn Với Android, một nhà phát triển có thể xây dựng mộtứng dụng cho phép người dùng xem vị trí của bạn bè của họ và được cảnh báo khi họ đang

có trong vùng phụ cận cho họ một cơ hội để kết nối

Nền tảng Android cho phép xây dựng các ứng dụng dựa vào các tính chất sau:

- Khung ứng dụng (application framework): cho phép dùng lại và thay thế các thànhphần

- Máy ảo Dalvik: tùy chọn cho các di động.Cơ chế hoạt động của nó tương tự như máy ảo

Java nhưng nó thực thi dex (dalvik executable) bytecode nhờ công cụ dx chuyển đổi mã

bytecode thành dex bytecode

- Trình duyệt được tích hợp (integrated browser): dựa trên công cụ nguồn mở WebKit

- Đồ họa: được trang bị bởi các thư viện 2D thông thường, đồ họa 3D dựa trên sự đặc tảcủa OpenGL ES 1.0 (để máy chạy nhanh hơn có thể tùy chọn phần cứng)

- Cơ sở dữ liệu SQLite: dùng cho cấu trúc bộ lưu trữ dữ liệu

- Môi trường truyền thông: cung cấp tiếng, hình ảnh thông dụng, và một số định dạng ảnhnhư MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF

- Môi trường phát triển đầy đủ: chứa một thiết bị mô phỏng, các công cụ phát hiện lỗi, bộnhớ, hiện trạng thực thi, và một phần mềm cài đặt dùng IDE Eclipse

Ngoài ra còn hỗ trợ các ứng dụng tích hợp các công nghệ mới hiện nay như hệ thốngtruyền thông di động toàn cầu GMS, Bluetooth, EDGE, 3G, WiFi, Camera, GPS, compass,

và accelerometer (các công nghệ này khi dùng còn phụ thuộc vào thiết bị)

Trang 11

I.2 Các thành phần cơ bản của Android

Biểu đồ dưới đây thể hiện các thành phần chính của hệ điều hành Android:

Quá trình thực thi của Android cũng được thực hiện tại lớp thư viện này

Nằm trên thư viện chính là các framework, đó là tập hợp các dịch vụ có thể dùng lại được

và những thành phần chung phục vụ cho các ứng dụng Ví dụ, một loại framework là thànhphần cung cấp nội dung cho bất kỳ dịch vụ nào có liên quan đến việc lưu trữ và truy xuất dữliệu Giao diện ứng dụng trong SQLite chính là một thí dụ cụ thể về trình cung cấp nội dungnày

Các ứng dụng chạy ở lớp trên cùng của hệ điều hành với một bộ các nhân ứng dụng baogồm thư điện tử, lịch làm việc, trình duyệt web Khi nhà phát triển viết một ứng dụng dànhcho Android, ta thực hiện các đoạn mã trong môi trường Java Sau đó, các đoạn mã này 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 để

Trang 12

chuyển đổi bytecode sang một dạng gọi là dex bytecode "Dex" là từ viết tắt của "Dalvikexecutable" đóng vai trò như cơ chế ảo thực thi các ứng dụng Android.

Các thư viện hỗ trợ trong android

Android chứa một tập các thư viện C/C++ được dùng bởi các thành phần khác nhau của

hệ thống Android Các đặc tính này được nhận ra bởi các nhà phát triển qua các mẫu ứngdụng Android Một số thư viện chính được liệt kê dưới đây:

- Thư viện hệ thống C: có nguồn gốc thực thi từ thư viện hệ thống chuẩn C (libc), đượcđiều chỉnh cho phù hợp đối với các thiết bị nhúng vào Linux

- Quản lý bề mặt (Surface Manager): quản lý việc truy cập cách hiển thị hệ thống con và

việc ghép liền nét các tầng đồ họa 2D và 3D từ nhiều ứng dụng

- Các thư viện môi trường truyền thông: dựa trên OpenCORE của PacketVideo, các thưviện này cung cấp việc phát và ghi lại của các định dạng tiếng và hình thông dụng, cũng kháhay như các tập tin hình ảnh tĩnh, chứa MPEG4, H.264, MP3, AAC, AMR, JPG, PNG

- LibWebCore: một bộ duyệt web hiện đại cung cấp nguồn cho cả hai trình duyệt –trình

duyệt web của Android và một khung nhìn web có thể được nhúng vào

- SGL: phần dưới của công cụ đồ họa 2D.

- Các thư viện 3D: một sự thực thi dựa trên các giao diện ứng dụng OpenGL ES 1.0; thưviện này dùng cả phần cứng 3D khá mạnh cũng như phần mềm tạo vạch 3D tùy chọn ở mứccao

- FreeType: sự biểu diễn kiểu chữ của bitmap và vector.

- SQLite: Một công cụ cơ sở dữ liệu có dung lượng nhỏ với sự tương tác về dữ liệu khá

tốt, hỗ trợ cho tất cả các ứng dụng để thực hiện việc lưu trữ dữ liệu

I.2.1 Quá trình thực thi một chương trình android

Android chứa một tập các thư viện chính cung cấp hầu hết các chức năng sẵn có trongngôn ngữ lập trình Java

Mỗi ứng dụng Android chạy trên chính tiến trình của nó, với chính thực thể của máy ảoDalvik Dalvik được viết với mục đích là một thiết bị có thể chạy hiệu quả trên nhiều máy

ảo Máy ảo Dalvik thực thi các tập tin trong Dalvik Executable(.dev), định dạng này đượctùy chọn theo dấu bộ nhớ tối thiểu Máy ảo phải được đăng ký, sau đó mới có thể chạy cácđịnh dạng dex Định dạng này được tạo ra bởi công cụ “dx”, công cụ này chuyển đổi từfile class thành file dex Máy ảo Dalvik dựa vào nhân Linux để tạo các chức năng như tạoluồng và quản lý bộ nhớ cấp độ thấp

I.2.2 Cấu trúc của một ứng dụng android

Các nhà phát triển có toàn quyền truy cập đến cùng các khung giao diện ứng dụng từ cácứng dụng lõi Kiến trúc ứng dụng được thiết kế nhằm đơn giản việc dùng lại các thành phần,

Trang 13

bất cứ ứng dụng nào đều có thể đưa ra các dặc tính của nó và các ứng dụng khác bất kì sau

đó đều có thể dùng lại những đặc tính này (tùy thuộc vào các ràng buộc an toàn đòi hỏi từkhung ứng dụng) Người dùng được quyền thay thế các thành phần nếu cùng cơ chế này

Ở dưới các ứng dụng là tập các dịch vụ và hệ thống, hay nói cách khác thì khung ứngdụng bao gồm các thành phần thông dụng sau:

- Có rất nhiều các thành phần có thể mở rộng của Views : có thể được dùng để tạo một

ứng dụng, gồm các list, grid, textbox, button, và ngay cả việc nhúng vào một trình duyệtweb

- Trình cung cấp nội dung (Content Providers) : cho phép các ứng dụng truy cập dữ liệu

từ các ứng dụng khác (như Contacts), hay để chia sẻ chính dữ liệu của ứng dụng đó

- Trình quản lý tài nguyên (Resourse Manager) : cung cấp sự truy cập đến các tài nguyên

không có mã hóa như các string riêng lẻ, đồ họa, các tập tin layout

- Trình quản lý thông báo (Notification Manager) : cho phép tất cả các ứng dụng hiển thị

các cảnh báo thông dụng trên thanh trạng thái

- Trình quản lý hoạt động (Activity Manager) : quản lý vòng đời của các ứng dụng và

cung cấp một sự điều hướng thông dụng để khi thực thi Android có thể nhận biết được danhsách các hoạt động cần được tạo ra trong một ứng dụng

Ngoài ra còn có một số dịch vụ khác như Package Manager, Window Manager,Telephony Manager, Location Manager, XMPP Service

II Nghiên cứu nền tảng android

II.1 Bộ khung của một ứng dụng android

Để tạo nên một ứng dụng android thì bao gồm nhiều thành phần Các thành phần nàyđược chia làm 6 loại cơ bản sau:

Activity: là nền của 1 ứng dụng Khi khởi động 1 ứ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 ứngdụng cho phép người dùng tương tác

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

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

Trang 14

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 1 Activity hay Service để thực hiện công việc mong muốn.VD: khi mở 1 trang web, thì gửi 1 intent đi để tạo 1 activity mới hiển thị trang webđó

Broadcast Receiver: thành phần thu nhận các Intent bên ngoài gửi tới VD: khi

viết 1 chương trình thay thế cho phần gọi điện mặc định của Android, khi đó cần 1

BR để nhận biết các Intent là các cuộc gọi tới

Notification: đưa ra các cảnh báo mà không làm cho các Activity phải ngừng hoạt

động

Trong đó Activity, Service, Broadcast Receiver và Content Provider mới là những thành

phần chính cấu thành nên ứng dụng Android, bắt buộc phải khai báo trong AndroidManifest

II.1.1 Android Activity

Các Activity là hoạt động cơ bản nhất trong 4 khối xây dựng nên một ứng dụng Adroid.Một Activity là luôn luôn là một màn hình đơn trong ứng dụng Mỗi Activity thực thi như

một lớp đơn được dẫn xuất từ lớp cơ sở Activity Lớp này sẽ hiển thị giao diện người dùng

chứa các Views và phản hồi lại những sự kiện Hầu hết các ứng dụng đều có nhiều màn hình

Ví dụ, một đoạn tin nhắn ứng dụng có khả năng hiển thị trên một màn hình sẽ chỉ ra một

danh sách của các contacts để gởi tin nhắn, màn hình thứ hai dùng để viết tin nhắn theo các

contact đã chọn, các màn hình khác dùng để xem lại các tin nhắn hoặc thay đổi chế độ thiết

lập Mỗi màn hình sẽ được thực thi như là một Activity Di chuyển tới một màn hình hiển thịkhác khác với màn hình hiện hành bằng cách bắt đầu một hoạt động mới, nhưng màn hìnhhiện hành phải thực hiện xong các Activity của nó (điều này có nghĩa là giao diện ứng dụngcủa Activity phải được hoàn thành) Trong một số trường hợp một hoạt động có thể trả vềmột giá trị cho hoạt động liền trước - ví dụ, một hoạt động đó cho phép người dùng chọn mộthình ảnh sẽ trả về hình ảnh được chọn từ đối tượng gọi

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

Một Activity gồm có 4 trạng thái sau:

Paused: Activity vẫn hiển thị (visible) nhưng không thể tương tác 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ệnnà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ủaactivity cũ nhưng lại không thể tương tác với nó

Trang 15

Stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop

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ục hồi lại trạng thái trước đó

Biểu đồ mô tả activity state:

Hình 3 Biểu đồ mô tả activity state

Có 3 looper chính mà bạn có thể quan tâm để giám sát các Activity của mình:

Toàn bộ thời gian sống của một hoạt động xảy ra giữa lần gọi đầu tiên

onCreat(Bundle) và lần gọi cuối cùng onDestroy() (giữa phương thức khởi tạo và

Trang 16

xóa bỏ của một Activity) Một hoạt động khởi tạo tất cả các trạng thái “toàn cục”

trong onCreat(), và giải phóng tất cả mọi tài nguyên còn lại trong onDestroy().

Cho ví dụ, nếu có một luồng thread đang chạy trên nền nhằm tải dữ liệu từ mạng,

nó có thể bắt đầu thread trong onCreate() và sau đó dừng thread trong

onDestroy().

Thời gian sống chính của một hoạt động xảy ra giữa một lần gọi onStart() đến

khi xuất hiện một cuộc gọi tương ứng đến onStop() Trong suốt thời gian này

người dùng có thể nhìn thấy Activity này trên màn hình, và tương tác trực tiếp với

nó Giữa hai phương thức bạn có thể duy trì nguồn tài nguyên, điều đó là điều cầnthiết để hiển thị Activity đến người sử dụng Cho ví dụ, bạn có thể đăng ký một

IntentReceiver tại onStart() để giám sát các thay đổi ảnh hưởng đến giao diện mà

bạn đang tạo ra, và khi bạn không đăng ký trên onStop() thì người dùng không duy

trì được giao diện mà bạn đang hiển thị theo ý muốn của họ Các phương thức

onStart() và onStop() có thể đã được gọi nhiều lần, khi Activity là trực quan hay

ẩn đi đối với người sử dụng

Tiền cảnh thời gian sống của một Activity xảy ra giữa một cuộc gọi onResume()

trước khi có một cuộc gọi tương ứng đến onPause() Trong suốt thời gian này

Activity này ở phía trước của tất cả những hoạt động khác và ảnh hưởng đến người

sử dụng Một Activity có thể thường xuyên xảy ra giữa lúc những trạng thái hồiphục lại và tạm dừng – cho ví dụ khi thiết bị đang nghỉ, khi đó là kết quả của một

Activity đã được sinh ra, từ một intent mới đã được tạo – vì thế đoạn mã trong

những phương thức này khá gọn nhẹ

Toàn bộ vòng đời của một Activity đều được định nghĩa bởi những phương thức của

Activity Tất cả các phương thức này đều riêng biệt, bạn có thể ghi đè lên chúng cho phù hợp

khi Activity thay đổi trạng thái Tất cả mọi Activity đều thực thi onCreate(Bundle) để thực hiện thiết lập lúc ban đầu, đôi lúc Activity sẽ cũng thực thi onPausse() giữ các thay đổi của

dữ liệu và mặt khác phải chuẩn bị để ngừng tương tác với người dùng Cũng có nhiều hoạt

động cũng thực thi onFreeze() và thực hiện việc lấy lại trạng thái tương ứng trong

onCreate(Bundle) Những phương thức khác có thể thực thi khi cần Bạn nên luôn luôn gọi

lớp cha Activity khi thực thi những phương thức này

public class Activity extends ApplicationContext {

Trang 17

protected void onCreate(Bundle icicle);

protected void onStart();

protected void onRestart();

protected void onResume();

protected void onFreeze(Bundle outIcicle);

protected void onPause();

protected void onStop();

protected void onDestroy();

}

II.1.2 Intent và Broadcast Receiver

1 Khái niệm intent

Theo định nghĩa của Google, Intent là một miêu tả về một hoạt động cần được thực hiện.Còn nói một cách đơn giản và dễ hiểu hơn, Intent là một cơ cấu cho phép truyền thông điệpgiữa các thành phần của 1 ứng dụng và giữa các ứng dụng với nhau

2 Các thuộc tính của intent

data: là dữ liệu sẽ được xử lý trong action, thường được diễn tả là một Uri

(Uniform Resource Identifier)

Trang 18

Category: bổ sung thêm thông tin cho action của Intent VD:

CATEGORY_LAUNCHER thông báo sẽ thêm vào Launcher như là một ứngdụng top-level

xác định thì các thuộc tính khác sẽ trở thành thuộc tính phụ

3 Phân loại intent

Intent được chia ra làm 2 loại:

Explicit Intents: intent đã được xác định thuộc tính component, nghĩa là đã chỉ rõ

thành phần sẽ nhận và xử lý intent Thông thường intent dạng này sẽ không bổsung thêm các thuộc tính khác như action, data Explicit Intent thương được sửdụng để khởi chạy các activity trong cùng 1 ứng dụng

Implicit Intents: Intent không chỉ rõ component xử lý, thay vào đó nó bổ sung

thông tin trong các thuộc tính Khi intent được gửi đi, hệ thống sẽ dựa vào nhữngthông tin này để quyết định component nào thích hợp nhất để xử lý nó

 VD:

ACTION_DIAL tel:123 thông thường sẽ được hệ thống giao cho activity Phone

Dialer mặc định của Android xử lý

4 Một số action thường dùng trong intent

ACTION_ANSWER - mở Activity để xử lý cuộc gọi tới, thường là Phone Dialer

của Android

ACTION_CALL - mở 1 Phone Dialer (mặc định là PD của Android) và ngay lập

tức thực hiện cuộc gọi dựa vào thông tin trong data URI

ACTION_DELETE - mở Activity cho phép xóa dữ liệu mà địa chỉ của nó chứa

trong data URI

Trang 19

ACTION_DIAL - mở 1 Phone Dialer (mặc định là PD của Android) và điền

thông tin lấy từ địa chỉ chứa trong data URI

ACTION_EDIT - mở 1 Activity cho phép chỉnh sửa dữ liệu mà địa chỉ lấy từ data

URI

ACTION_SEND - mở 1 Activity cho phép gửi dữ liệu lấy từ data URI, kiểu của

dữ liệu xác định trong thuộc tính type

ACTION_SENDTO - mở 1 Activity cho phép gửi thông điệp tới địa chỉ lấy từ

data URI

ACTION_VIEW - action thông dụng nhất, khởi chạy activity thích hợp để hiển

thị dữ liệu trong data URI

ACTION_MAIN - sử dụng để khởi chạy 1 Activity.

5 Intent Filter

Activity, Service và BroadCast Receiver sử dụng Intent Filter để thông báo cho hệ thốngbiết các dạng Implicit Intent mà nó có thể xử lý Nói cách khác, Intent Filter là bộ lọc Intent,chỉ cho những Intent được phép đi qua nó

Intent Filter mô tả khả năng của component định nghĩa nó Khi hệ thống bắt được 1Implicit Intent (chỉ chứa 1 số thông tin chung chung về action, data và category ), nó sẽ sửdụng những thông tin trong Intent này, kiểm tra đối chiếu với Intent Filter của cáccomponent các ứng dụng, sau đó quyết định khởi chạy ứng dụng nào thích hợp nhất để xử lýIntent bắt được Nếu có 2 hay nhiều hơn ứng dụng thích hợp, người dùng sẽ được lựa chọnứng dụng mình muốn

Trang 20

II.1.3 Android Service

Service là 1 trong 4 thành phần chính trong 1 ứng dụng Android ( Activity, Service,BroadcastReceiver, ContentProvider) thành phần này chạy trong hậu trường và làm nhữngcông việc không cần tới giao diện như chơi nhạc, download, xử lí tính toán…

Một Service có thể được sử dụng theo 2 cách:

 Nó có thể được bắt đầu và được cho phép hoạt động cho đến khi một người nào đódừng nó lại hoặc nó tự ngắt Ở chế độ này, nó được bắt đầu bằng cách gọi

Trang 21

được thiết lập bằng cách gọi lệnh Context.bindService() và được đóng lại bằngcách gọi lệnh Context.unbindService() Nhiều người dùng có thể kết nối tới cùngmột thiết bị Nếu Service vẫn chưa được khởi chạy, lệnh bindService() có thể tùy ýkhởi chạy nó Hai chế độ này thì không tách biệt toàn bộ Bạn có thể kết nối vớimột Service mà nó đã được bắt đầu với lệnh startService().

Biểu đồ mô tả Service lifecycle

Hình 4 Service lifecycle

Giống như một Activity, một Service cũng có các phương thức chu kỳ thời gian mà bạn

có thể cài đặt để kiểm soát những sự thay đổi trong trạng thái của nó Những những phươngthức của Service thì ít hơn là của Activity – chỉ có 3- và chúng thì được sử dụng rộng rãi,không được bảo vệ

void onCreate() void onStart(Intent intent) void onDestroy()

Trang 22

Entire lifetime của một Service diễn ra giữa thời gian onCreate() được gọi ra và thời gian mà onDestroy() trả lại Giống như một Activity, một Service lại tiết hành cài đặt ban đầu ở onCreate(), và giải phóng tát cả các tài nguyên còn lại ở

onDestroy().

Active lifetime của một Service bắt đầu bằng một lệnh tới onStart() Đây là

phương thức được chuyển giao đối tượng Intent mà đã được thông qua để tới

startService().

 Không có callback tương đương nào cho thời điểm service dừng lại, không cóphương thức onstop() Các phương thức onCreate() và onDestroy() được gọi chotất cả các Service dù chúng có được bắt đầu bằng Context.startService() hoặcContext.bindService() hay không Tuy nhiên thì, onStart() chỉ được gọi ra đối vớicác Service bắt đầu bằng startService().Nếu một Service cho phép những Servicekhác kết nối với nó thì sẽ có thêm các phương thức callback dành cho Service đó

để thực hiên

II.1.4 Content provider

Một Content Provider 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 ( các ứng dụngkhác có thể truy xuất)

Dữ liệu thường được lưu trữ ở file hệ thống, hoặc trong một SQLite database

Đơn giản để các bạn có thể hình dung như : Danh bạ, Call log, cấu hình cài đặt trên điệnthoại là dữ liệu dưới dạng Content Provider

Content Provider hiện thực một tập phương thức chuẩn mà các ứng dụng khác có thể truyxuất và lưu trữ dữ liệu của loại nó điều khiển

Tuy nhiên, những ứng dụng không thể gọi các phương thức trực tiếp Hơn thế chúng dùnglớp Content Resolver và gọi những phương thức đó

Một Content Resolver có thể giao tiếp đến nhiều content provider; nó cộng tác với cácprovider để quản lý bất kỳ giao tiếp bên trong liên quan

Trang 23

Ví dụ một ứng dụng nhỏ để lấy tất cả thông tin cấu hình load lên list view.

Hình 5 Ví dụ content provider.

Trang 24

II.1.5 Android SQLite Database

Android sử dụng SQLite làm nền tảng database cho việc truy xuất và khai thác dữ liệu,SQLitevốn là Hệ CSDL quan hệ đơn giản dễ dùng và gọn nhẹ, nên được sử dụng trên rấtnhiều nền tảng di động

Cách tạo và sử dụng cơ sở dữ liệu SQLite Ví dụ tạo một cơ sở dữ liệu đơn giản user

gồm 2 trường ID và name, ngoài ra còn có các thao tác thêm, sửa, xóa

 Tạo cơ sở dữ liệu:

 Đầu tiên 1 class DBAdapter để xử lý tất cả các thao tác liên quan đếnCSDL

public static final String KEY_ID = "_id";

public static final String KEY_NAME = "name";

private DatabaseHelper mDbHelper;

private SQLiteDatabase mDB;

private static final String DATABASE_CREATE = "create table users

(_id integer primary key autoincrement, "

+ "name text not null);";

private static final String DATABASE_NAME = "Database_Demo";

private static final String DATABASE_TABLE = "users";

private static final int DATABASE_VERSION = 2;

private final Context mContext;

 Tạo 1 lớp bên trong DBAdapter được extend từ lớpSQLiteOpenHelper, override 2 phương thức onCreate() và onUpgrade() để quản lýviệc tạo CSDL và version của CSDL đó

Trang 25

private static class DatabaseHelper extends SQLiteOpenHelper{

public DatabaseHelper(Context context, String name,

CursorFactory factory, int version) { super(context, name, factory, version);

Trang 26

mDB = mDbHelper.getWritableDatabase();

return this;

}

 Thêm giá trị vào cơ sở dữ liệu

public long createUser(String name){

ContentValues inititalValues = new ContentValues();

inititalValues.put(KEY_NAME, name);

return mDB.insert(DATABASE_TABLE, null, inititalValues);

}

 Truy vấn cơ sở dữ liệu

public Cursor getAllUsers(){

return mDB.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_NAME}, null, null, null, null, null);

Trang 27

String[] from = new String[]{DBAdapter.KEY_NAME};

int[] to = new int[] {R.id.text1};

SimpleCursorAdapter users = new SimpleCursorAdapter(this,

R.layout.users_row, mCursor, from, to);

setListAdapter(users);

}

II.2 Vòng đời của một ứng dụng android

Trong hầu hết các trường hợp, mỗi ứng dụng Android chạy trên chính tiến trình Linux.Tiến trình này được tạo ra khi ứng dụng chạy, và vẫn sẽ còn đang hoạt động cho đến khi nókhông cần thiết nữa, khi đó hệ thống cần cải tạo bộ nhớ cho các ứng dụng khác

Một điểm đặc trưng chủ yếu của Android là khoảng thời gian tồn tại của quá trình khôngđược điều khiển ngay lập tức bởi ứng dụng mà chính nó tạo ra.Vì thế, vòng đời được xácđịnh bởi hệ thống thông qua sự kết hợp các phần của ứng dụng từ hệ thống đang chạy, từnhững vấn đề quan trọng đối với người dùng, và từ tất cả bộ nhớ có sẵn để dùng trong hệthống

Điều quan trọng đối với những nhà phát triển ứng dụng là hiểu các thành phần ứng dụngkhác nhau như thế nào (trong sự riêng biệt của Activity, Service, và IntentReceiver), cóảnh hưởng thế nào đến vòng đời của quá trình ứng dụng Khi dùng không phù hợp cácthành phần, kết quả có thể chính là hệ thống đang phá hủy các quá trình ứng dụngtrong khi các tiến trình này đang làm những công việc quan trọng

Ta lấy ví dụ, một IntentReceiver bắt đầu một tuyến khi nó nhận một Intent qua phươngthức onReceiveIntent(), và sau đó quay trở lại Một khi quay trở lại, hệ thống xem

IntentReceive không hoạt động nữa.Và như vậy số đông các quá trình không cần thiết nữa

( trừ khi các thành phần ứng dụng khác hoạt động trong nó ) Theo cách đó, hệ thống có thểlàm phá hủy quá trình này bất cứ lúc nào để được phục hồi lại bộ nhớ, chấm dứt sự xuất hiện

Trang 28

của tuyến đang chạy trên nó Giải quyết vấn đề này phải bắt đầu một Service từIntentReceiver, vì thế hệ thống được biết là vẫn đang tích cực xử lý quá trình này.

Để xác định xem quá trình nào bị phá hủy khi bộ nhớ thấp, Android đặt chúng vào trong

“hệ thống cấp bậc quan trọng” dựa trên các thành phần đang chạy và trạng thái của các thànhphần Đây là trình tự của tầm quan trọng này:

Forceground process: đang chạy một ứng dụng Activity ở trên đầu màn hình màngười sử dụng đang tương tác với nó (khi đó phương thức onResume() đã đượcgọi) hay là một IntentReceiver hiện tại đang chạy (phương thức

onReceiveIntent() đang thực thi) Chỉ có một vài tiến trình trong hệ thống và cáctiến trình này chỉ bị hủy khi việc sắp xếp mới nhất xảy ra, cũng là khi bộ nhớ quáthấp đến nỗi các tiến trình này không thể thực thi Thông thường lúc này thiết bị sẽtiến hành phân trang bộ nhớ, vì thế mà hành động này được yêu cầu để giữ chogiao diện người dùng phản hồi

Visible process: là quá trình chứa một Activity hiển thị trên màn hình của người

sử dụng nhưng không nổi bật lên (phương thức onPause() đã được gọi) Điều này

có thể xảy ra, cho ví dụ, nếu hoạt động trước đó vừa mới hiển thị với hộp thoạixuất hiện cho phép hoạt động sau đó có thể nhìn thấy ở phía sau nó Nếu một quátrình đã coi là vô cùng quan trọng và sẽ không bị phá hủy trừ khi công việc đanglàm là yêu cầu giữ cho tất cả các quá trình forceground chạy

Service process: giữ một Service vừa mới bắt đầu với phương thức

startService() Dẫu cho các quá trình không lập tức thấy được từ người sử dụng,chúng thực hiện những điều mà người dùng quan tâm (như là nền mp3 lặp lại haynền hệ thống mạng dữ liệu được upload hoặc được download ), nên hệ thống sẽluôn giữ cho các quá trình này chạy trừ khi nó không đủ bộ nhớ để giữ lại tất cảcác quá trình forceground và visible

Background process: chứa một Activity tức mà hiện tại là không trực quan vớingười sử dụng (phương thức onStop() đã được gọi) Quá trình này không ảnhhưởng đến kinh nghiệm của người sử dụng Các tiến trình này thực thi vòng đờihoạt động một cách chính xác, hệ thống có thể phá hủy như các quá trình bất cứlúc nào để phục hồi bộ nhớ cho một trong 3 loại quá trình trước đó Theo cáchthông thường có nhiều các quá trình đang chạy, nên hệ thống đã giữ chúng trong

Trang 29

một danh sách LRU để bảo đảm rằng các quá trình hầu hết gần đây đều được xemxét bởi người sử dụng lần cuối cùng để có thể phá hủy các quá trình này nếu bộnhớ ở chế độ thấp

Empty process:là không chứa bất kỳ thành phần hoạt động ứng dụng nào Lý do

để giữ lại một quá trình lân cận như là một cache nhằm cải thiện thời gian khởiđộng là thời gian kế tiếp mà một thành phần của ứng dụng cần thiết có thể thực thi.Như là, hệ thống sẽ thường phá hủy các tiến trình trong một tầng lớp để tạo nên sựcân bằng bao gồm tất cả các tài nguyên hệ thống giữa các nơi lưu trữ các quá trìnhcache rỗng và cache lưu trữ bên trong nhân

II.3 Các công cụ phát triển một ứng dụng android

Android SDK bao gồm một sự đa dạng với những công cụ tùy chọn giúp bạn phát triểncác ứng dụng trên mobile trên nền tảng Adroid Quan trọng nhất là Android Emulator vàAndroid Development Tools plugin dành cho Eclipse, nhưng ngoài ra SDK còn chứa mộttrong số những công cụ khác cho bộ gỡ lỗi, đóng gói và khởi tạo các ứng dụng của bạn trên

bộ giả lập

II.3.1 Bộ giả lập của androidccvc

Một thiết bị ảo dành cho mobile được chạy trên máy tính của bạn Bạn sẽ sử dụng bộ giảlập để thiết kế, gỡ lỗi và kiểm tra các ứng dụng của bạn trong môi trường thực thi củaAndroid

Android SDK chứa một bộ mô phỏng điện thoại — một thiết bị ảo chạy trên máy của bạn

Bộ này cho bạn mẫu ban đầu, sự hướng dẫn và kiểm tra các ứng dụng của Android mà khôngcần đến một thiết bị thật

Bộ mô phỏng của Android bắt chước các chức năng cơ bản và cách hành xử của một thiết

bị điện thoại, ngoại trừ nó không nhận và đặt các cuộc gọi Ở bên trái bộ mô phỏng cung cấpmột sự điều hướng khác biệt và các phím điều khiển, mà bạn có thể "nhấn" bằng cách dùngchuột hay bàn phím của máy bạn để phát sinh các sự kiện cho ứng dụng của mình Nó cũngcung cấp một màn hình để ứng dụng bạn hiển thị, cùng với bất kì ứng dụng Android nàokhác đang chạy

Để giúp bạn tạo mô hình và kiểm tra ứng dụng của mình, bộ mô phỏng cho phép ứngdụng của bạn dùng các dịch vụ của nền tảng Android để kết nối với các ứng dụng khác, truycập mạng, nghe nhạc, xem phim, lưu trữ và truy lục dữ liệu, thông báo cho người dùng, hoàntrả các kiểu chuyển đổi đồ họa và giao diện

Bộ mô phỏng cũng chứa một khả năng gỡ lỗi riêng biệt, như là một console mà bạn có thểghi từ kết quả hiển thị của nhân, giả lập các ngắt của ứng dụng (Như là các tin nhắn SMS đếnhay là các cuộc gọi điện thoại), giả lập các ảnh hưởng của góc trễ và các phím trên kênh

Trang 30

1 Bắt đầu và dừng bộ mô phỏng

Để bắt đầu bộ mô phỏng, thay đổi thư mục tools/ của SDK và đưa vào emulator hay./emulator Điều này là công việc nhằm khởi tạo hệ thống Android, bạn sẽ thấy cửa sổ bộ môphỏng xuất hiện trên màn hình của bạn

Để ngừng bộ mô phỏng, thì đóng cửa sổ bộ mô phỏng lại

2 Điều khiển bộ mô phỏng

Bạn có thể dùng bộ mô phỏng để bắt đầu các công đoạn tùy chọn và thiết lập những lệnh

console để điều khiển cách hành xử và tiêu biểu chính là môi trường được giả lập Một khi

bộ mô phỏng chạy, bạn có thể điều khiển nó bằng cách dùng con trỏ chuột hay bàn phím để

"nhấn" các phím thiết bị được giả lập

Trang 31

Bảng dưới tóm tắt các ánh xạ giữa các phím của b mô phỏng và các phím trên bàn phím

Disable/enable all networking F8

Start tracing F9 (only with -trace flag)

Stop tracing F10 (only with -trace flag)

DPad left/up/right/down Keypad 4/8/6/2

+/-Onion alpha increase/decrease Keypad * / /

Trang 32

Toggle Unicode/raw key mode Ctrl-K

Bảng 1 Bảng ánh xạ giữa các phím của bộ mô phỏng và bàn phím

3 Dùng các hình dạng của bộ mô phỏng

Bạn có thể chạy bộ mô phỏng với bất kì hình thái nào trong bốn kiểu được mô tả dướibảng sau Để xác định một hình dạng nào đó, bạn dùng cú pháp:

“-skin <skinID> ”, khi bắt đầu bộ mô phỏng

Ví dụ: emulator -skin HVGA-L

Chú ý rằng bạn phải nhập vào <skinID> với các kí tự hoa (Nếu máy bạn phân biệt dạngchữ)

Định danh của

hình dạng

HVGA-L 480x320, nằm ngang

Trang 34

II.3.2 Những công cụ phát triển Android dành cho Eclipse IDE

ADT plugin thêm chức năng vào môi trường tích hợp Eclipse, để có thể khởi tạo và gỡ lỗicác ứng dụng của Android một cách dễ hơn và nhanh hơn Nếu bạn sử dụng Eclipse, ADTplugin đưa ra cho bạn một sự nổi tiếng không thể tin được trong sự phát triển các ứng dụngcủa Android :

 Nó giúp bạn có thể truy cập đến các công cụ phát triển khác của Android từbên trong Eclipse IDE Cho ví dụ, ADT cho phép bạn truy cập rất nhiều khảnăng của công cụ DDMS — giao tiếp được với screenshots, quản lý port-forwarding, thiết lập các điểm dừng, và quan sát tiến trình và quá trình thôngtin — trực tiếp từ Eclipse

 Nó cung cấp một New Project Wizard, điều này giúp cho bạn tạo một cáchnhanh chóng và cài đặt tất cả những file cơ bản mà bạn cần cho một ứng dụngmới của Android

 Nó tự động và đơn giản hơn quá trình của việc bạn đang xây dựng ứng dụngcủa Android

 Nó cung cấp một trình soạn thảo mã hóa Android, do đó nó giúp bạn viết sẵnXML cho bản kê khai Android của bạn và những file tài nguyên

II.3.3 Dalvik Debug Monitor Service (ddms)

Tích hợp với máy ảo Dalvik trên nền tảng của Android, công cụ này cho phép bạn quản lýtrên một bộ giả lập hoặc thiết bị và sự trợ giúp trong bộ gỡ lỗi Bạn có thể sử dụng nó để phá

bỏ quá trình, chọn một quá trình để gỡ lỗi, phát sinh dữ liệu trace, quan sát heap, và xemthông tin về các tiến trình, nắm bắt screenshots của bộ giả lập hoặc thiết bị, và rất nhiều điềunữa

Công việc gỡ lỗi với công cụ gỡ lỗi được gọi là Dalvik Debug Monitor Service (DDMS),cung cấp sự phục vụ phía trước cổng, lưu giữ lại hình ảnh trên thiết bị, truyền thông tin vàlưu thông tin trên thiết bị… DDMS nằm trong thư mục tools/ của SDK DDMS sẽ làm việcvới cả emulator và thiết bị, nếu cả hai đã kết nối và đang chạy đồng thời, DDMS mặc định là

xử lý emulator

Bạn có thể thiết lập một số của ưu tiên của DDMS trong File->Preferences Sự ưu tiênđược lưu ở "$HOME/.ddmsrc"

Trang 35

II.3.4 Android Debug Bridge (adb)

Công cụ adb cho phép bạn khởi tạo những file apk của ứng dụng của bạn trên bộ giả lậphoặc thiết bị và truy xuất tới bộ giả lập hoặc thiết bị từ một dòng lệnh Bạn có thể sử dụngfile này liên kết tới bộ gỡ lỗi chuẩn để chạy những đoạn mã ứng dụng trên bộ giả lập hoặcthiết bị của Android

II.3.5 Android Asset Packaging Tool (aapt)

Công cụ aapt cho phép bạn tạo những file apk chứa những bảng nhị phân và tài nguyêncủa các ứng dụng Android

II.3.6 Android Interface Description Language (aidl)

Cho phép bạn phát sinh đoạn mã cho một giao diện ở bên trong quá trình, như là một dịch

III Các chế độ bảo mật của một ứng dụng android

Tăng sự truy cập đến các đặc tính và tài nguyên của hệ thống một cách an toàn, khai báocác quyền xử lý truy cập đến những đặc tính an toàn cho chính bạn Nếu được phép truy cậpthì khi đó ứng dụng mới có thể truy cập đến từng chức năng được cung cấp bởi các ứng dụng

Trang 36

III.1 Truy cập tập tin và các định danh của người dùng

Mỗi gói tập tin của Android (Android package: apk) cài trên thiết bị được cho bởi địnhdanh người dùng Linux duy nhất của chính nó, việc tạo một sandbox dành cho mỗi tập tin vàngăn nó tiếp xúc với các ứng dụng khác (hay các ứng dụng khác tiếp xúc với nó) Định danhngười dùng này được gán cho mỗi tập tin khi ứng dụng được cài trên thiết bị, và thường cònlại trong khi tập tin vẫn còn tồn tại trên thiết bị

Bởi sự tuân theo chế độ bảo mật xảy ra ở cấp độ tiến trình, mã của hai gói apk bất kìkhông thể tự động thực thi trong cùng một tiến trình, lúc này chúng cần thực thi như haingười dùng khác biệt của Linux Bạn có thể dùng thuộc tính sharedUserId trong thẻAndroidManifest.xml của tập tin manifest của mỗi gói để có thể gán cho chúng cùng với ID.Làm như vậy, với mục đích là bảo mật hai gói sau khi xem xét là cùng một ứng dụng, vớicùng ID của người dùng và các sự chấp nhận của tập tin Chú ý rằng để giữ lại sự an toàn,chỉ có hai ứng dụng được gán với cùng kí hiệu (và yêu cầu cùng sharedUserld) sẽ được chogiống ID của người dùng

Bất kì tập tin nào được tạo ra bởi một ứng dụng sẽ được gán cho ID của người dùng ứngdụng, và không thể truy cập thông thường đến các gói khác.Khi tạo một tập tin mới với cácphương thức getSharedPreferences(String, int), openFileOutput(String, int), hay

createDatabase(String, int, int, SQLiteDatabase.CursorFactory), bạn có thể dùng cờ

MODE_WORLD_READABLE và/hoặc cờ MODE_WORLD_WRITEABLE để chophép bất cứ gói nào khác đọc/ghi các tập tin Khi thiết lập những cờ này, tập tin vẫn cònthuộc về ứng dụng nhưng các quyền đọc và/hoặc ghi toàn cục vừa mới được thiết lập mộtcách phù hợp để bất kì ứng dụng nào khác có thể xem nó

III.2 Các quyền đang được sử dụng

Một ứng dụng Android cơ bản không có các quyền tương thích với nó, nghĩa là nó khôngthể làm bất cứ điều gì gây bất lợi cho kinh nghiệm của người dùng hay bất cứ dữ liệu nàotrên thiết bị Để giúp bảo vệ các đặc tính của thiết bị, bạn phải chứa trong tập tinAndroidManifest.xml một hay nhiều hơn các thẻ <uses-permission> để khai báo các sự cho

Trang 37

Tại thời điểm cài ứng dụng, các quyền phải yêu cầu ứng dụng đã được chấp nhận bởi cácgói cài đặt, dựa trên các kiểm tra về độ tin cậy của bản quyền và sự tương tác với người

dùng Không kiểm tra người dùng làm gì trong khi một ứng dụng đang thực thi: quá trìnhnày cũng được xác nhận là một sự cho phép đặc biệt to lớn khi cài đặt, và có thể dùng đặctính này khi được yêu cầu (đề nghị), hay sự cho phép này không được chấp nhận và mọi nỗlực để dùng đặc tính này sẽ báo lỗi mà không xuất hiện dấu nhắc dành cho người dùng.Thông thường một sự cho phép không được thực hiện như mong đợi sẽ đưa kết quả vàotrong một biệt lệ SecurityException được ném trở lại cho ứng dụng.Tuy nhiên, điều nàykhông đảm bảo xảy ra mọi nơi.Ví dụ, phương thức broadcastIntent (Intent) kiểm tra cácquyền khi dữ liệu được phân phát cho mỗi người nhận, sau khi phương thức gọi trả về, vì thếbạn sẽ không nhận được một biệt lệ nếu có các lỗi của các quyền.Trong hầu hết tất cả cáctrường hợp, tuy nhiên, một lỗi trong sự cho phép sẽ được in ra cho hệ thống log

Các quyền được cung cấp bởi hệ thống Android có thể được tìm thấy ở gói

Manifest.permission Bất kì ứng dụng nào cũng có thể định nghĩa và tuân theo những sựcho phép bởi chính nó, vì thế đây không phải là danh sách đầy đủ của tất cả các quyền.Một sự cho phép thông thường có thể bị ngăn cấm tại một nhóm các vị trí trong suốt thaotác chương trình của bạn khi:

 Tại thời điểm một cuộc gọi đến hệ thống, để ngăn cản hệ thống thực thi các chứcnăng nào đó

 Khi bắt đầu một hoạt động, để chống lại tiến trình khởi chạy các hoạt động củanhững ứng dụng khác

 Cả việc gởi và nhận intent phát bá, để điều khiển người có thể nhận phát bá củabạn hay người có thể gởi một phát bá cho bạn

 Khi truy cập và thao tác trên một trình nội dung

 Kết nối hoặc bắt đầu một dịch vụ

III.3 Các quyền trong việc khai báo và có tính bắt buột

Để tuân theo những điều cho phép chính bạn đưa ra, đầu tiên bạn phải khai báo chúngtrong tập tin AndroidManifest.xml, bạn dùng một hay nhiều thẻ <permission>

Ví dụ một ứng dụng muốn điều khiển người bắt đầu một trong các hoạt động có thể khaibáo một sự cho phép bởi thao tác này như sau:

Trang 38

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.google.android.app.myapp" >

<permissionid="com.google.android.app.myapp.permission.DEADLY_ACTIVITY"

android:label="@string/permlab_deadlyActivity"

android:description="@string/permdesc_deadlyActivity" />

</manifest>

Chú ý rằng cả nhãn và phần mô tả sẽ được đáp ứng bởi sự cho phép Chuỗi tài nguyên đã

hiển thị đến người dùng khi họ đang xem một danh sách các quyền (android:label ) hoặc

những chi tiết trên một sự cho phép độc lập (android:description ) Nhãn này ngắn, một vài

từ mô tả từng phần chính về chức năng của quyền được bảo vệ Phần mô tả này sẽ là một cặpcâu mô tả điều cho phép người giữ nó thực hiện Theo quy ước của chúng ta về phần mô tả làhai câu, phần đầu là sự cho phép, phần thứ hai là khuyến cáo người dùng về các vấn đềkhông hay có thể xảy ra nếu một ứng dụng được cứ cho là đã được cho phép

Đây là một ví dụ về một nhãn và sự mô tả sự cho phép CALL_PHONE:

<string name="permlab_callPhone">Call Phone Numbers</string>

<string name="permdesc_callPhone">Allows application to call

phone numbers without your intervention Bad applications may

cause unexpected calls on your phone bill.</string>

Trang 39

III.4 Những quyền bắt buột có trong AndroidManifest.xml

Những quyền nằm ở cấp độ cao hạn chế việc truy cập đến các thành phần đầu vào của hệ

thống hay ứng dụng có thể được cung cấp bởi tập tin AndroidManifest.xml của bạn Tất cả

những yêu cầu này đều chứa trong một thuộc tính android:permission trên các thành phầnđược đề nghị, việc đặt tên cho quyền sẽ được dùng để điều khiển truy cập đến nó

Các quyền Activity (cung cấp thẻ <activity>) hạn chế những ai có thể bắt đầu hoạt động

kết hợp Quyền này được kiểm tra trong suốt phương thức Context.startActivity() vàphương thức Activity.startSubActivity(); nếu những cuộc gọi không có yêu cầu của sự chophép thì biệt lệ SecurityException sẽ được ném đi khỏi cuộc gọi

Các quyền Service (cung cấp thẻ <service>) hạn chế những ai có thể bắt đầu hay kết nốivới các dịch vụ kết hợp Quyền này được kiểm tra qua các phương thức

Context.startService(), Context.stopService() và phương thức Context.bindService(), nếu

những cuộc gọi không có sự cho phép thì biệt lệ SecurityException sẽ được ném đi khỏi

cuộc gọi

Các quyền IntentReceiver (cung cấp thẻ <receiver>) hạn chế những ai có thể quảng bácác đối tượng intent cho những người nhận liên quan Quyền này được kiểm tra sau khiphương thức Context.broadcastIntent() trả về, khi hệ thống cố gắng phân phát các intentđược chấp nhận đến những người nhận nhất định Khi có kết quả, một lỗi của quyền bởiquyền này sẽ không trả lại kết quả vào trong một biệt lệ được ném đến cuộc gọi; nó chỉkhông giải phóng intent Theo cùng cách đó, một sự cho phép có thể được cung cấp bởiphương thức Context.registerReceiver() để điều khiển người có thể quảng bá đến mộtngười nhận đã đăng ký chương trình một cách tự động Theo cách khác, một quyền có thểđược cung cấp khi gọi phương thức Context.broadcastIntent() để hạn chế các đối tượng IntentReceiver được phép nhận sự quảng bá

Các phương thức ContentProvider (cung cấp thẻ <provider>) hạn chế ai đó có thể truycập dữ liệu trong một ContentProvider Không giống như các thành phần khác, có hai thuộctính riêng của quyền mà bạn có thể thiết lập: android:readPermission hạn chế ai đó đọc từtrình cung cấp; và android:writePermission hạn chế ai đó có thể ghi lên nó Chú ý rằngmột trình cung cấp là được bảo vệ với cả quyền đọc và viết, chỉ quản lý quyền ghi không cónghĩa là bạn có thể đọc từ một trình cung cấp Các quyền này được kiểm tra khi lần đầu tiên

bạn nhận một trình cung cấp(nếu bạn không có quyền nào,thì một biệt lệ SecurityException

sẽ được ném), và khi bạn thực thi các thao tác trên trình này Dùng phương thức

ContentResolver.query() yêu cầu sự quản lý quyền viết; dùng các phương thức ContentResolver.insert(), ContentResolver.update(), ContentResolver.delete(), hay

phương thức Cursor.commitUpdates() yêu cầu quyền ghi Trong tất cả các trường hợp này,không quản lý các kết quả của quyền được yêu cầu trong một biệt lệ SecurityException

được ném đi từ cuộc gọi

III.5 Việc tuân theo các quyền khi quảng bá các intent

Sự cho phép tuân theo đối tượng gởi các intent đến một IntentReceiver được đăng ký có

Trang 40

Context.broadcastIntent() với một sự cho phép dạng String, bạn nên đề nghị một ứng dụng

của bên nhận phải quản lý các quyền để nhận intent của bạn

Chú ý rằng cả bên nhận và bên quảng bá đều có thể yêu cầu cùng một sự cho phép Khiđiều này xảy ra, sự kiểm tra cả hai quyền cho phép đó đều phải đưa đến intent để được phânphát đến đích kết nối

III.6 Cho phép thực thi các quyền khác

Tùy tiện chia nhỏ sự cho phép có thể bắt buột bất kì cuộc gọi nào đến vào trong một dịch

vụ Nó được hoàn thành bởi phương thức Context.checkCallingPermission() Gọi một sựcho phép yêu cầu dạng String và nó sẽ trả về một số nguyên nhằm có thể xem sự cho phépnày là tiến trình gọi tức thời Chú ý rằng điều này chỉ có thể được dùng khi bạn đang thực thimột cuộc gọi đến từ một tiến trình khác, thường thông qua một giao diện IDL được tạo ra từmột dịch vụ hay theo một số cách được cho bởi các tiến trình khác

Có một vài cách hữu dụng để kiểm tra những sự cho phép này Nếu bạn có pid của tiếntrình khác, bạn có thể dùng Context.checkPermission (String, int, int) của phương thứcContext để cho phép kiểm tra ngược pid này Nếu bạn có tên gói của ứng dụng khác, bạndùng để điều khiển PackageManager.checkPermission(String, String) của phương thứcPackageManager để loại ra những gói cụ thể vừa mới được xem như là một sự cho phép mộtcách phép rõ ràng

III.7 Các tài nguyên và quốc tế hóa

Việc mô tả chi tiết các ứng dụng Android, cụ thể là hệ thống quản lý tài nguyên, (gồmcách nó dùng nhằm mục đích quốc tế hóa (internationalization) và cục bộ hóa (localization))bao hàm cách dùng theo từng quốc tế và khu vực "Tài nguyên" là các tài sản ứng dụng (nhưhình ảnh, các chuỗi được xác định, cách thể hiện XML), cái cần được giải quyết lúc thực thi.Trong phần này mô tả cách Android giải quyết như thế nào đối với tài nguyên lấy từ chínhmột sự lựa chọn của chúng, nó cũng tốt như khi tạo và sử dụng các tài nguyên

Tài nguyên và các tập tin mở rộng (và vì thế nó không phải là tập tin nguồn) thường đượcdùng trong mã nguồn và biên dịch trong ứng dụng của bạn khi thực thi Android cung cấpmột nhóm các loại tập tin tài nguyên khác nhau, gồm cả tập tin XML, PNG, JPEG Tập tinXML có rất nhiều định dạng khác nhau phụ thuộc vào thứ mà nó được mô tả

Ngày đăng: 13/04/2019, 15:02

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w