Có thể nhận thấy rõ rệt nhất trên thị trường hiện nay, hệ điều hành Android doGoogle phát triển đang làm mưa làm gió với một kho ứng dụng đồ sộ và một số lượng lớncác thiết bị đang sử dụ
Trang 1LỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành đến tất cả các thầy giáo, cô giáo trường Đại họcVinh nói chung và khoa Công nghệ thông tin nói riêng đã dạy dỗ, trang bị cho em nhữngkiến thức trong suốt những năm học vừa qua Em xin gửi lời cảm ơn sâu sắc đến các thầy
cô giáo đã hướng dẫn định hướng và giúp đỡ em thực hiện đồ án tốt nghiệp này Đặc biệt
là thầy giáo Th.s Trương Trọng Cần đã tận tình hướng dẫn em trong suốt thời gian thựctập và làm đồ án tốt nghiệp
Nhân dịp này em xin gửi lời cảm ơn chân thành đến gia đình, bạn bè, những ngườithân đã tạo mọi điều kiện, động viên giúp đỡ em hoàn thành tốt đồ án tốt nghiệp này.Tuy nhiên, trong thời gian có hạn nên em không thể phát huy hết những ý tưởng củamình, khả năng hỗ trợ của ngôn ngữ và công nghệ vào đề tài Trong quá trình thực hiện
đề tài không thể tránh khỏi sai sót, mong nhận được sự góp ý và cảm thông của quý thầy
cô và các bạn
Em xin chân thành cảm ơn!
Vinh, ngày 17 tháng 12 năm 2012
Sinh viên Nguyễn Bá Thành
Trang 2LỜI MỞ ĐẦU
Những năm gần đây sự phát triển của công nghệ thông tin đã và đang làm thay đổitoàn bộ thế giới Mọi ngành nghề, mọi lĩnh vực trong đời sống đều được áp dụng côngnghệ như kinh tế, y khoa, công nghiệp…vì vậy mọi việc đã và đang trở nên dễ dàng,nhanh chóng, và tiện lợi hơn rất nhiều Đặc biệt trong lĩnh vực di động, từng ngày từnggiờ các phát minh công nghệ liên tiếp được công bố Cách đây không lâu chiếc điện thoại
di động chỉ là một vật dụng dùng để gọi và nhắn tin với nhau, nhưng cho đến bây giờ thìnhững công dụng mà nó mang lại đã vượt lên trên cả sự mong đợi Bây giờ chiếc điệnthoại không chỉ đơn thuần là gọi và nhắn tin nữa mà nó là cả một kho các ứng dụng, phục
vụ rất nhiều cho nhu cầu của người sử dụng Các hãng di dộng lớn hiện nay đang ra sứccạnh tranh nhau bằng những phát minh có độ hoàn hảo đến từng centimet Tuy nhiên mộtthiết bị di động hoàn hảo không chỉ xét về mẫu mã bên ngoài mà còn phải xét đến cả một
hệ thống phần mềm chạy bên trong nó nữa Vì vậy mà các nhà nghiên cứu hệ điều hànhdành cho thiết bị di động cũng đang thực sự tham gia vào một cuộc cách mạng về côngnghệ Có thể nhận thấy rõ rệt nhất trên thị trường hiện nay, hệ điều hành Android doGoogle phát triển đang làm mưa làm gió với một kho ứng dụng đồ sộ và một số lượng lớncác thiết bị đang sử dụng hệ điều hành này Tương lai không xa nó sẽ chiếm thế độc tôntrên lĩnh vực di động
Vì những lý do trên mà em chọn đề tài “Tìm hiểu công nghệ Android và ứng dụngtrên di động ” để nghiên cứu nắm bắt công nghệ mới và làm đề tài tốt nghiệp của mình
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
LỜI MỞ ĐẦU 2
NỘI DUNG 5
Chương 1: TÌM HIỂU CÔNG NGHỆ ANDROID 5
1.1 Tổng quan về các hệ điều hành dành cho di động 5
1.1.1 Hệ điều hành Symbian 5
1.1.2 Hệ điều hành RIM 5
1.1.3 Hệ điều hành Windows Mobile 5
1.1.4 Hệ điều hành IOS 6
1.2 Tổng quan về hệ điều hành di động Google Android 6
1.2.1 Sơ lược về lịch sử phát triển 6
1.2.2 Một số tính năng cơ bản 7
1.3 Cấu trúc hệ điều hành 8
1.3.1 Ứng dụng (Application) 8
1.3.2 Nền tảng ứng dụng (Application Framework) 8
1.3.3 Thư viện (Libraries) 9
1.3.4 Trình biên dịch (Android Runtime) 10
1.3.5 Nhân của Linux (Linux Kernel) 10
1.4 Lập trình với Android 10
1.4.1 Công cụ hỗ trợ 10
1.4.2 Các thành phần cơ bản của một ứng dụng Android 10
1.4.3 XML trong Android 17
1.4.4 Android Manifest 18
Chương 2: ỨNG DỤNG TRÊN DI ĐỘNG 19
2.1 Mô tả bài toán 19
2.2 Phân tích, thiết kế kiến trúc 19
Trang 42.2.1 Phân tích bài toán 19
2.2.2 Thiết kế kiến trúc 19
2.3 Cài đặt 48
2.4 Demo 49
KẾT LUẬN 51
Kết quả đạt được 51
Hạn chế 51
Hướng phát triển 51
TÀI LIỆU THAM KHẢO 52
NỘI DUNG Chương 1: TÌM HIỂU CÔNG NGHỆ ANDROID
Trang 51.1 Tổng quan về các hệ điều hành dành cho di động
Các dòng thiết bị và nền tảng phần mềm hiện có:
- Nokia: chạy trên hệ điều hành Symbian
- BlackBerry: chạy trên hệ điều hành RIM
- Samsung i770, HTC Touch Pro…: chạy trên hệ điều hành Windows Mobile
- iPhone: chạy trên hệ điều hành IOS
- Một số lượng lớn smartPhone: chạy trên hệ điều hành Android
…
1.1.1 Hệ điều hành Symbian
Đây là hệ điều hành ra đời sớm nhất trên thế giới, được viết tiền thân bởi Davidpotter 1980 Chiếc điện thoại đầu tiên chạy hệ điều hành này là Nokia 6160 vào tháng6/1998
Đặc trưng của hệ điều hành Symbian là một hệ điều hành có phím chức năng, tuynhiên cho đến thời điểm hiện tại thì Symbian cũng đã đáp ứng sự tương tác với ngườidùng thông qua màn hình cảm ứng
Symbian phát triển trên ngôn ngữ C/C++ và nền tảng J2ME
1.1.2 Hệ điều hành RIM
RIM (Research In Motion) đây là hệ điều hành cài cho điện thoại Blackberry, đây làchiếc điện thoại được thiết kế chủ yếu phục vụ cho các nghiệp vụ văn phòng, vì vậy cácứng dụng cũng như hệ điều hành rất linh hoạt và uyển chuyển RIM được thành lập vàonăm 1995 và đến tháng 8/1998 sản phẩm đầu tiên là Inter@ctivePager Đặc trưng của Hệđiều hành RIM là sử dụng phím checkball (giống với con chuột trên máy tính), ngoài racũng có các phím chức năng, và bàn phím rộng hơn sơ với các thiết bị trước đây
RIM phát triển trên ngôn ngữ Java và bộ JDE
1.1.3 Hệ điều hành Windows Mobile
Đây là một hệ điều hành windows dành cho mobile do Microsoft phát triển Tháng8/2000 Microsoft ra phiên bản Windows Mobile đầu tiên dành cho PC pocket WindowsMobile được phát triển từ nhân của windows CE 3.0
Windows Mobile hỗ trợ cả phím bấm và cảm ứng Đây là hệ điều hành được xâydựng từ bộ ngôn ngữ trong visual studio do Microsoft cung cấp
1.1.4 Hệ điều hành IOS
Đây là hệ điều hành cài đặt cho điện thoại iPhone IPhone là chiếc điện thoại đã làmthay đổi hoàn toàn cách sử dụng điện thoại di động truyền thống, không chỉ đơn thuần là
Trang 6gọi và nhắn tin nữa mà iPhone còn có cả một kho ứng dụng rất lớn, trở thành một thiết bịgiải trí đa phương tiện Tháng 1/2007 iPhone 2G chính thức ra mắt.
IOS được phát triển từ nhân của MacOS và CocoTouch (bộ cảm ứng đa điểm) Lập trình IOS sử dụng ngôn ngữ Objective C và iPhone SDK
1.2 Tổng quan về hệ điều hành di động Google Android
Trong vài năm trở lại đây, có thể nói Android là một trong những hệ điều hành gâyđược tiếng vang lớn cũng như có sự phát triển nhanh nhất trong làng công nghệ nói chung
và mảng thiết bị di động nói riêng Đây là một hệ điều hành với mã nguồn mở, các nhàphát triển có thể down mã nguồn về để sửa đổi theo thiết bị của mình, tuy nhiên vẫn phảitheo một quy đinh của Google đó là giấy phép Apache2 Có thể nói đây là một tính chấtquan trọng và làm nên sự khác biệt của Android, với tính mở này Android đã phát triểnrất nhanh và đã vượt mặt các ông chủ trong làng công nghệ hệ điều hành cho thiết bị diđộng
1.2.1 Sơ lược về lịch sử phát triển
- Năm 2003, một công ty hoạt động trong lĩnh vực phát triển phần mềm cho các thiết bị
di động mang tên là Android được thành lập bởi 4 thành viên là: Andy Rubin, RichMiner, Nick Sears, Chris White
- Năm 2005, sau hơn 2 năm hoạt động thì Android được Google mua lại với một khoảntiền không được tiết lộ và chính thức trở thành một trong những công ty con của gãkhổng lồ ngành tìm kiếm Đồng thời cả Andy Rubin, Rich Miner, Nick Sears, ChrisWhite đều quyết định tiếp tục làm việc tại chính công ty của mình sau khi được mualại Ở thời điểm đó, nhiều người không thực sự chú ý vào thương vụ này, thế nhưng nólại được đánh dấu bước đi đầu tiên của Google trong thị trường thiết bị di động thếgiới
- Tại Google, một nhóm nghiên cứu đứng đầu là Rubin đã bắt đầu phát triển một nềntảng dành cho thiết bị di động dựa trên nhân của hệ điều hành Linux Và sau đó, hệđiều hành này cũng được giới thiệu đến các nhà phát triển phần cứng lẫn phần mềm,báo hiệu sự có mặt của một “ngôi sao” khác trên “thiên hà” thị trường công nghệ diđộng
- Đến tháng 12 năm 2006, suy đoán về ý định gia nhập thị trường truyền thông di độngcủa Google tiếp tục được củng cố sau khi BBC và The Wall Street Journal cho biếtrằng hãng này muốn đưa ứng dụng và chức năng tìm kiếm của mình lên các thiết bị di
Trang 7động Lập tức ngay sau đó, nhiều tin đồn về chiếc điện thoại mang thương hiệu Googlexuất hiện khắp các phương tiện truyền thông.
- Tháng 5 năm 2007, liên minh các nhà sản xuất thiết bị cầm tay – Open handsetAlliance (OHA) được thành lập bao gồm Google và một số thành viên khác của cộngđồng Linux mở như: Broadcom Corporation, Google HTC, Intel, LG, MarvellTechnology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics, SprintNextel, T-Mobile và Texas Instruments Mục tiêu của OHA là phát triển tiêu chuẩn mởcho các thiết bị di động và sản phẩm đầu tiên của liên minh này đó là Android, một nềntảng di động được xây dựng trên nhân Linux phiên bản 2.6
- Tính đến thời điểm hiện nay, Google Android đã có 9 phiên bản chính thức, cụ thể là:Android 1.5, Android 1.6, Android 2.0/2.1, Android 2.2, Android 2.3, Android 3.0/3.1,Android 4.0, Android 4.1, Android 4.2
1.2.2 Một số tính năng cơ bản
- Khả năng thích ứng của nền tảng (Handset Layout): ví dụ như kích cỡ màn hình từ lớnđến nhỏ hay hỗ trợ cả đồ họa 2D và 3D dựa trên các chi tiết kỹ thuật trong thư viện đồhọa OpenGL ES 2.0
- Kết nối (Connectivity): Android hỗ trợ hầu hết các công nghệ kết nối hiện đại baogồm GSM/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth, Wi-Fi (không kết nốithông qua máy chủ), LTE, WiMax hay NFC
- Tin nhắn (Messaging): bao gồm cả nhắn tin văn bản (SMS) và nhắn tin đa phương tiện(MMS) Ngoài ra, dịch vụ Android Cloud To Device Messaging Framework (C2DM –dịch vụ cho phép các nhà phát triển gửi dữ liệu từ máy chủ đến các ứng dụng của họtrên các thiết bị Android) cũng tích hợp một phần vào trình nhắn tin trên Android
- Ngôn ngữ (Language): hỗ trợ nhiều và số lượng ngôn ngữ được hỗ trợ tính đến phiênbản Android 2.3 đã tăng gấp đôi so với phiên bản đầu tiên ra mắt Một số ngôn ngữ sửdụng ký tự đặc thù như tiếng Hoa, tiếng Thái… cũng đã được hỗ trợ
- Trình duyệt web (Browser): có sẵn trong Android được phát triển dựa trên công cụ mãnguồn mở Webkit cùng với JavaScript V8 của Chrome Trình duyệt đạt được số điểm93/100 trong bài kiểm tra Acid3 (bài kiểm tra về hiệu suất của một trình duyệt web liênquan đến các tiêu chuẩn web)
- Hỗ trợ Java: Các lớp Java được biên dịch vào các tập tin thực thi Dalvik và chạy trênmáy ảo Dalvik Dalvik là một máy ảo đặc biệt giành riêng cho Android nhằm tối ưu
Trang 8hóa cho các thiết bị chạy bằng pin điện thoại di động với khả năng hạn chế bộ nhớ trênCPU.
- Phương tiện truyền thông giải trí (Media): hỗ trợ hầu hết các định dạng âm thanh,video, hình ảnh phổ biến Ví dụ như: WebM, H.263, H.264 (trong các tập tin 3GP hay4GP), MPEG-4 SP, AMR, AMR-WB (trong tập tin 3GP), ACC, HE- ACC (trong cáctập tin 3GP hay MP4), MP3, MIDI, FLAC, WAV, JPEG, PNG, GIF, BMP
- Phần cứng (Hardware): camera, màn hình cảm ứng, GPS, gia tốc, con quay hồi chuyển,
từ kế, điều khiển chơi game chuyên dụng, cảm biến áp suất, nhiệt kế và đồ họa 2D,3D…
- Cảm ứng đa điểm (Multitouch): Android hỗ trợ cảm ứng đa điểm từ sản phẩm HTCHero Tính năng này ban đầu bị vô hiệu hóa (có thể để tránh vi phạn bằng sáng chế củaApple trong công nghệ màn hình cảm ứng vào thời điểm đó) nhưng sau khi HTC Hero
ra mắt thì Google đã phát hành một bản cập nhật cho Nexus One Motorola Droid chophép cảm ứng đa điểm nguyên bản
- Bluetooth: hỗ trợ gửi các tập tin, truy nhập vào danh bạ điện thoại, quay số bằng giọngnói và gửi địa chỉ liên lạc giữa các điện thoại
- Đa nhiệm (MultiTasking): Android có khả năng chạy cùng một lúc nhiều ứng dụngtrên thiết bị
- Các tính năng thoại (Voice): các tính năng dùng giọng nói để gọi điện, nhắn tin, địnhhướng… được cung cấp từ phiên bản 2.2 trở đi
- Tethering: đây là tính năng cho phép sử dụng điện thoại như một điểm truy cập khôngdây hay có dây Trước khi Android 2.2 ra mắt thì tính năng này được hỗ trợ thông quacác ứng dụng của bên thứ ba hay các tùy chỉnh từ nhà sản xuất
1.3 Cấu trúc hệ điều hành
1.3.1 Ứng dụng (Application)
Android được phát hành cùng với một bộ các ứng dụng gốc bao gồm: email, trìnhtin nhắn SMS, lịch, bản đồ, trình duyệt web, danh bạ và một số ứng dụng khác Tất cả cácứng dụng trên được viết bằng ngôn ngữ lập trình Java
Trang 9để thiết lập hệ thống báo động, thông báo trên thanh trạng thái và rất nhiều dịch vụ khácnữa.
Ngoài ra các nhà phát triển có toàn quyền truy cập vào nền tảng API (ApplicationProgramming Interface – giao diện lập trình ứng dụng) mà các ứng dụng gốc sử dụng.Cấu trúc của các ứng dụng được đơn giản hóa thiết kế giúp cho việc tái sử dụng, thay thếcác thành phần của bất kỳ ứng dụng nào đó một cách dễ dàng (nhưng phải tùy thuộc vào
cơ chế bảo mật riêng của từng ứng dụng)
- View System: được dùng để xây dựng một ứng dụng bao gồm các văn bản, nút bấm và
cả những trình duyệt web nhúng
- Content Provider: cho phép truy cập dữ liệu từ các ứng dụng khác (như Contacts…)hoặc chia sẻ dữ liệu riêng của mình
- Resource Manager: cung cấp khả năng truy cập mã nguồn
- Notification Manager: cho phép tất cả các ứng dụng hiển thị thông báo tùy chỉnh trongthanh trạng thái
- Activity Manager: quản lý thời gian hoạt động của các ứng dụng
1.3.3 Thư viện (Libraries)
Android được tích hợp một thư viện ngôn ngữ C/C++ được sử dụng bởi nhiều thànhphần khác nhau của hệ thống Thư viện ngôn ngữ này sẽ tiếp xúc với các nhà phát triểnứng dụng thông qua nền tảng hệ điều hành Android Một số thư viện như:
- System C library: có gốc từ hệ thống thư viện chuẩn C (LIBC) giúp điều chỉnh nhúngcho các thiết bị sử dụng nền tảng Linux
- Media Libraries: dựa trên OpenCore của PacketVideo, hỗ trợ ghi và phát lại âm thanh,hình ảnh, video dưới nhiều định dạng phổ biến như MPEG4, MP3, AAC, JPG, PNG
- Surface Manager: quản lý truy cập vào các hệ thống hiển thị và tổng hợp đồ họa 2D,3D các lớp từ nhiều ứng dụng trên thiết bị
- LibWebCore: trình duyệt web hiện đại hỗ trợ cả trình duyệt web của Android và cáctrình duyệt web nhúng khác
- SGL: công cụ đồ họa 2D cơ bản
- 3D Libraries: dựa trên OpenGL ES 1.0 API, dung để tăng tốc phần cứng 3D (nếu có)hoặc để tối ưu hóa các phần mềm 3D
- SQLite: cơ sở dữ liệu dùng cho tất cả các ứng dụng
1.3.4 Trình biên dịch (Android Runtime)
Trang 10Cung cấp các chức năng có sẵn trong thư viện gốc của ngôn ngữ lập trình Java Mỗiứng dụng trên hệ điều hành Android sẽ chạy trên một tiến trình của riêng nó Ví dụ: cácmáy ảo Dalvik chạy trên các lớp được biên soạn bởi một trình biên dịch ngôn ngữ Java vàđược chuyển đổi sang dạng Dalvik (.dex) bằng công cụ “dx” tích hợp Các tập tin đượcthực thi dưới dạng dex sẽ giúp tối ưu hóa cũng như quản lý bộ nhớ ở cấp độ thấp.
1.3.5 Nhân của Linux (Linux Kernel)
Android hoạt động dựa trên nhân hệ điều hành Linux 2.6 qua đó cung cấp các dịch
vụ cho hệ thống cốt lõi như an ninh, quản lý bộ nhớ, quá trình hay mô hình điều khiển…Đồng thời nhân hệ điều hành hoạt động như một lớp trừu tượng giúp kết nối giữa phầncứng và những phần mềm còn lại trên nền tảng
1.4 Lập trình với Android
1.4.1 Công cụ hỗ trợ
Để lập trình Android thì mỗi bộ SDK của Google là không đủ, chúng ta còn cần phảitích hợp nó vào một IDE như Eclipse Ngoài Eclipse còn có Netbeans, tuy nhiên đa sốhiện nay đều dung Eclipse, vì nó hỗ trợ nhiều hơn so với Netbeans
Ngôn ngữ dùng để lập trình là ngôn ngữ Java Khi có một lượng kiến thức cơ bản vềJava thì tiếp cận với lập trình Android sẽ dễ dàng hơn Căn bản ở đây có nghĩa là hiểuđược thế nào là class, package, biết ý nghĩa của các từ khóa như public, private, protected,
… thành thạo các lệnh cơ bản như if(), for(), switch(), while()…biết sử dụng các lệnh nhưInteger.ParseInt() hay String.valueOf()… Nên có thêm kiến thức về gói java.util, vì đây làgói hỗ trợ nhiều lớp rất mạnh được sử dụng trên mọi nền, ngoài ra các gói như java.io,java.net… cũng rất quan trọng
1.4.2 Các thành phần cơ bản của một ứng dụng Android
Các thành phần trong một ứng dụng Android được chia thành 6 loại chính, bao gồm:Activity, Service, Content Provider, Intent, Broadcast Receiver, Notification
1.4.2.1 Activity
Hiểu một cách đơn giản thì Activity là nền của một ứng dụng Khi khởi động mộtứng dụng Android nào đó thì bao giờ cũng có một main Activity được gọi, hiển thị mànhình giao diện của ứng dụng cho phép người dùng thao tác
Trang 11Hệ điều hành 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 bao gồm 4 state:
- Activity (running): Activity đang hiển thị trên màn hình (foreground)
- Pause: Activity vẫn hiển thị (visible) nhưng không thể tương tác (lost focus)
Ví dụ: Một activity mới xuất hiện hiển thị giao diện đè lên activity cũ , nhưng giaodiện này nhỏ hơn giao diện của activity cũ, do đó ta vẫn thấy được một phần giao diệncủa activity cũ nhưng lại không thể tương tác với nó
- Stop: Activity cũ được thay thế hoàn toàn bởi một Activity mới, khi đó Activity cũ sẽtiến hành đế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 ưutiê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ạngthái trước đó
Trang 12Biểu đồ miêu tả Activity state:
Biểu đồ 1: Biểu đồ mô tả vòng đời của một Activity
Vòng đời của Activity:
Trang 13- Entire lifetime: từ phương thức onCreate() cho tới onDestroy().
- Visible lifetime: từ phương thức onStart() cho tới onStop()
- Forefround lifetime: từ phương thức onResume() cho tới onPause()
Khi xây dựng Activity cho ứng dụng cần phải viết lại phương thức onCreate() để thựchiện quá trình khởi tạo Các phương thức khác sẽ tùy thuộc vào nhu cầu của người lậptrình, nếu cần sử dụng thì viết lại còn không thì không cần viết
1.4.2.2 Service
Service là một trong bốn thành phần chính cho một ứng dụng Andoid, thành phầnnày chạy ngầm và làm những cô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ọiContext.startService() và dừng bằng lệnh Context.stopService() Nó có thể tự ngắt bằnglệnh Service.stopSelf() hoặc Service.stopSelfResult() Chỉ cần một lệnh stopService() đểngừng Service lại cho dù lệnh startService() được gọi ra bao nhiêu lần
Service có thể được vận hành theo như đã được lập trình việc sử dụng một Interface
mà nó định nghĩa Các người dùng thiết lập một đường truyền tới đối tượng Service và sửdụng đường kết nối đó để thâm nhập vào Service Kết nối này được thiết lập bằng cáchgọi lệnh Context.bindService() và được đóng lại bằng cách gọi lệnhContext.unbindService() Nhiều người dùng có thể kết nối đến cùng một thiết bị NếuService 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ới một Service mà nó đã được bắtđầu với lệnh startService() Ví dụ, một Service nghe nhạc ở chế độ nền có thể được bắtđầu bằng cách gọi lệnh startService() cùng với một đối tượng Intent mà định dạng được
âm nhạc để chơi Chỉ sau đó, có thể là khi người sử dụng muốn kiểm soát trình chơi nhạchoặc biết thêm thông tin về bài hát hiện tại đang chơi, thì sẽ có một Activity tạo lập mộtđường truyền tới Service bằng cách gọi bindService() Trong trường hợp như thế này,stopService() sẽ không thực sự ngừng Service cho đến khi liên kết cuối cùng được đónglại
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
Trang 14phương thức của Service thì ít hơn của Activity, 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()
Bằng việc thực hiện những phương thức này, bạn có thể giám sát 2 vòng lặp của chu
kỳ thời gian của mỗi Service
Entire lifetime của một Service diễn ra giữa thời gian onCreate() được gọi ra và thờigian mà onDestroy() trả lại Giống như một Activity, một Service lại tiến 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() Ví dụ, mộtService phát lại nhạc có thể tạo ra một luồng và bắt đầu chơi nhạc onCreate(), và sau đóluồng chơi nhạc sẽ dừng lại ở onDestroy() Active lifetime của một Service bắt đầu bằngmột lệnh tới onStart() Đây là một phương thức được chuyển giao đối tượng Intent mà đãđược thông qua để tới startService(), Service âm nhạc sẽ mở đối tượng Intent để quyếtđịnh xem sẽ chơi loại nhạc nào và bắt đầu chơi nhạc
Không có callback tương đương nào cho thời điểm Service ngừng lại – không cóphương thức onStop()
Các phương thức onCreate() và onDestroy() được gọi cho tất cả các Service dùchúng có được bắt đầu bằng Context.startService() hoặc Context.bindService() haykhông Tuy nhiên thì onStart() chỉ được gọi ra đối với các Service bắt đầu bằngstartService()
Nếu một Service cho phép những Service khác kết nối với nó thì sẽ có thêm cácphương thức callBack dành cho Service đó để thực hiện
IBinder onBind(Intent intent)
Boolean onUnbind(Intent intent)
Void onRebind(Intent intent)
Hàm callback onBind() thông qua đối tượng Intent đã được truyền đến bindService
và onUnbind() được chuyển giao đối tượng mà đã được chuyển đến Nếu Service đangđược chỉ định (binding), onBind() quay trở lại kênh thông tin mà người dùng sử dụng đểtương tác với Service Phương thức onUnbind() có thể yêu cầu onRebind() được gọi nếumột người dùng kết nối với Service
Trang 15Biểu đồ dưới đây minh họa cho các phương thức callback giành cho một Service.Mặc dù, nó phân tách các Service được tạo ra thông qua startService() với các Service màđược tạo ra bằng bindService() Bất kỳ Service nào, cho dù nó được khởi tạo như thế nàothì nó vẫn có thể cho phép các người dùng kết nối tới nó một cách hiệu quả nhất, cho nênbất kì Service nào cũng có thể được chỉ định thông qua các phương thức onBind() vàonUnbind().
Biểu đồ 2: Biểu đồ minh họa cho các phương thức CallBack của một Service
1.4.2.3 Content Provider
Content Provider là một trong những thành phần cơ bản của một ứng dụng Android.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
Trang 16Thườ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 ứngdụng khá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 Ví dụnhư: Danh bạ, Call log, cấu hình cài đặt…trên điên thoại là dữ liệu dưới dạng ContentProvider
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ểtruy xuấ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 Mà chúng dùnglớp Content Resolver và gọi những phương thức đó Một Content Resolver có thể giaotiếp đến nhiều Content Provider; nó cộng tác với các Provider để quản lý bất kỳ giao tiếpbên trong liên quan
1.4.2.4 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ựchiệ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ềnthông điệp giữa các thành phần của một ứng dụng và giữa các ứng dụng với nhau
Các thuộc tính của Intent:
- Action: là hành động được thực hiện, ví dụ: ACTION_VIEW, ACTION_MAIN
- Data: là dữ liệu sẽ được xử lý trong action, thường được diễn tả là một Uri (UniformResource Identifier)
Ngoài ra còn có một số thuộc tính mà ta có thể bổ sung vào Intent:
- Category: bổ sung thông tin cho action của Intent Ví dụ: CATEGORY_LUNCHERthông báo sẽ thêm vào Luncher như là một ứng top-level
- Type: chỉ rõ kiểu data
- Component: chỉ rõ thành phần sẽ nhận và xử lý Intent Khi thuộc tính này được xácđịnh thì các thuộc tính khác sẽ trở thành thuộc tính phụ
- Extras: mang theo đối tượng Bundle chứa các giá trị bổ sung
Phân loại Intent:
Intent được chia thành 2 loại:
- Explicit Intent: Intent đã được xác định thuộc tính Component, nghĩa là đã chỉ rõ thànhphầ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
Trang 17thuộc tính khác như action, data Explicit Intent thường được sử dụng để khởi chạy cácActivity trong cùng một ứng dụng.
- Implicit Intent: Intent không chỉ rõ component xử lý, thay vào đó nó bổ sung thông tintrong các thuộc tính Khi Intent được gửi đi, hệ thống sẽ dựa vào những thông tin này
để quyết định component nào thích hợp nhất để xử lý nó
Một số Action thường được sử dụng trong Intent:
- ACTION_ANSWER: mở Activity để xử lý cuộc gọi tới, thường là Phone Dialer củaAndroid
- ACTION_CALL: mở một Phone Dialer và ngay lập tức thực hiện cuộc gọi dựa vàothô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 trongURI
- ACTION_DIAL: mở một Phone Dialer và điền thông tin lấy từ địa chỉ chứa trong dataURI
- ACTION_EDIT: mở một Activity cho phép chỉnh sửa dữ liệu mà địa chỉ lấy từ dataURI
- ACTION_SEND: mở một 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ở một Activity cho phép gửi thông điệp đến địa chỉ lấy từ dataURI
- 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 một Activity
1.4.2.5 BroadCast Receiver
Thành phần thu nhận các Intent bên ngoài gửi tới Ví dụ: khi chúng ta muốn xâydựng một chương trình thay thế cho phần gọi điện mặc định của Android, khi đó chúng tacần dùng đến một BroadCast Receiver để nhận biết các Intent là các cuộc gọi tới
Trang 18thể thiết kế một giao diện như ý muốn mà không cần tới bất cứ một dòng XML nào,nhưng sử dụng XML sẽ đơn giản công việc đi rất nhiều Đồng thời sử dụng XML sẽ giúpviệc chỉnh sửa ứng dụng sau này trở nên dễ dàng.
Để thiết kế giao diện cho nhiều độ phân giải màn hình thì chúng ta nên dùng Layout.Layout được dùng để quản lý các thành phần giao diện khác theo một trật tự nhất định:
- FrameLayout: Layout đơn giản nhất, thêm các thành phần con vào góc trên bên trái củamàn hình
- LinearLayout: thêm các thành phần con theo một chiều nhất định (ngang hoặc dọc).Đây là Layout được sử dụng nhiều nhất
- RelativeLayout: thêm các thành phần con dựa trên mối quan hệ với các thành phầnkhác hoặc với biên của layout
- TableLayout: thêm các thành phần con dựa trên một lưới các ô ngang và dọc
- AbsoluteLayout: thêm các thành phần con dựa vào tọa độ x, y
Thường khi lập trình nên kết hợp nhiều Layout với nhau để tạo ra giao diện bạn mongmuốn
1.4.4 Android Manifest
Mỗi ứng dụng Android đều cần có AndroidManifest.xml để mô tả những thông tinquan trọng của nó cho hệ thống Android biết
Các công việc mà AndroidManifest.xml thực hiện:
- Đặt tên cho Java package của ứng dụng
- Mô tả các thành phần (Component) của ứng dụng: activity, service, broadcast receiverhoặc content provider
- Thông báo những permission mà ứng dụng cần có để truy nhập các protected API vàtương tác với các ứng dụng khác
- Thông báo những permission mà các ứng dụng khác cần có để tương tác với ứng dụnghiện thời
- Thông báo level thấp nhất của Android API mà ứng dụng cần để chạy
Trang 19Chương 2: ỨNG DỤNG TRÊN DI ĐỘNG
2.1 Mô tả bài toán
Xây dựng một ứng dụng trên Android với tên gọi “Vườn treo babylon” Với mụcđích của ứng dụng là tạo một nơi thư giãn thoải mái đến mọi người thông qua di động.Với ý tưởng là một khu vườn trồng hoa trên mây, mỗi người sẽ được sở hữu riêng mộtkhu vườn và tự tay chăm sóc nó Ngoài ra còn có thể kết bạn, giao lưu chát chít tạo ra mộtcộng đồng online trên mạng di động với những chiếc điện thoại chạy hệ điều hànhAndroid
2.2 Phân tích, thiết kế kiến trúc
2.2.1 Phân tích bài toán
Ứng dụng sẽ được xây dựng theo mô hình Client/Server Mỗi người dùng sẽ có mộtthông tin về một tài khoản để truy cập ứng dụng Khi người dùng đăng nhập vào thì sẽ kếtnối đến Server và sau khi xác thực sẽ truyền dữ liệu về cho người chơi Dữ liệu ở đây baogồm thông tin cá nhân cũng như tất cả những thông tin về khu vườn của người chơi Khinhận được dữ liệu thì phía Client sẽ tiến hành vẽ khu vườn của người chơi Khi đã vàođược khu vườn của mình, người chơi có thể vào cửa hàng để mua chậu và hoa để đặt lêncác tầng mây trong vườn và trồng hoa Số lượng hoa và tầng mây phụ thuộc vào kinhnghiệm của người chơi có được sau khi thu hoạch hoa Sau khi trồng xong, người chơi sẽphải chăm sóc cho vườn của mình bằng cách tưới nước cũng như bón phân để hoa cho thuhoạch cao hơn Đến một thời gian quy định thì cây sẽ cho thu hoạch, người chơi tiến hànhthu hoạch hoa và trồng đợt mới Khi thu hoạch thì người chơi thu được kinh nghiệm vàvàng, kinh nghiệm thì dùng để lên cấp độ, còn vàng thì dùng để mua tầng mây, mua chậu,mua hoa để phát triển khu vườn của mình Ngoài chăm sóc khu vườn của mình, ngườichơi còn có thể giao lưu kết bạn với người chơi khác Trong khi chờ khu vườn của mìnhđến giờ thu hoạch thì người chơi có thể thăm vườn của những người bạn khác để thay họchăm sóc vườn hoặc nhặt trộm vàng
Ứng dụng được xây dựng trên mô hình Client/Server nên mọi hành động phía Clientđều được gửi lên Server xử lý, sau đó nhận kết quả trả về từ Server và hiển thị lên phíaClient
2.2.2 Thiết kế kiến trúc
2.2.2.1 Mô hình Client-Server
Mô hình Client-Server của ứng dụng:
Trang 21Bước 2: Vào Menu và chọn phần đăng ký.
Bước 3: Nhập thông tin về tài khoản và mật khẩu rồi nhấn nút đăng ký
Bước 4: Có tin nhắn gửi về báo kết quả đăng ký -> kết thúc
Hình 4: Mô tả chức năng đăng nhập
Trang 22Sơ đồ:
User
Login Thất bại
Thành công Kết thúc
Application
Hình 5: Sơ đồ tiến trình xử lý chức năng đăng nhập
Bước 1: Mở ứng dụng
Bước 2: Nhập thông tin đăng nhập và bắt đầu đăng nhập
Bước 3: Đăng nhập thành công hoặc thất bại -> Kết thúc
- Quên mật khẩu:
Khi người chơi vô tình quên mật khẩu của mình thì có thể dùng
chức năng quên mật khẩu để lấy lại mật khẩu mới
Mô tả
Đầu vào
Đầu ra
Mở game thành công; dùng số điện thoại khi đăng ký tài khoản.
Thành công: lấy được một mật khẩu mớiThất bại: không nhận được mật khẩu mới
Hình 6: mô tả chức năng quên mật khẩu
Trang 23Thất bại Thành công Kết thúc
Hình 7: Sơ đồ tiến trình xử chức năng quên mật khẩu
Bước 1: Mở ứng dụng (dùng sim khi đăng ký tài khoản)
Bước 2: Vào Menu->chọn quên mật khẩu
Bước 3: Nhập tên tài khoản và gửi yêu cầu reset mật khẩu
Bước 4: Nhận được kết quả từ tin nhắn -> Kết thúc
Trang 24Sơ đồ:
User
Mua vật phẩm Thất bại
Thành công Kết thúc
Application
Hình 9: Sơ đồ tiến trình xử lý chức năng cửa hàng
Bước 1: Đăng nhập vào game
Bước 2: Vào Menu bên trái -> chọn Cửa hàng
Bước 3: Chọn mua vật phẩm theo nhu cầu
Bước 4: Kết thúc
- Kho đồ:
Trang 25Vào kho để xem những vật phẩm mà hiện mình đang có, có thể
Thành công Kết thúc
Application
Hình 11: Sơ đồ tiến trình xử ký chức năng kho đồ
Bước 1: Đăng nhập vào game
Bước 2: Vào Menu bên trái -> chọn Kho đồ
Bước 3: Có thể tặng hoặc bán vật phẩm
Bước 4: Kết thúc
- Bạn bè:
Trang 26Chức năng bạn bè có thể giúp người chơi giao lưu kết bạn với những người chơi khác, và có thể sang thăm vườn nhà bạn
Hình 12: Mô tả chức năng bạn bè
Sơ đồ:
Tìm kiếm Danh sách bạn
Thăm nhà Kết bạn Xóa bạn
Thành
Bắt đầu
Kết thúc
Hình 13: Sơ đồ tiến trình xử lý chức năng bạn bè
Bước 1: Đăng nhập vào game
Bước 2: Vào Menu bên trái -> chọn Bạn bè
Bước 3: Có thể tìm bạn, kết bạn, thăm nhà hoặc xóa bạn
Bước 4: Kết thúc
- Nhiệm vụ: