1. Trang chủ
  2. » Luận Văn - Báo Cáo

bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú

64 2 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 64
Dung lượng 5,83 MB

Nội dung

Đối tượng nghiên cứuVới đề tài này, em tập trung vào các nội dung :- Cách cài đặt các chương trình để có thể chạy android- Tìm hiểu về Activity trong Android.- Tìm hiểu về Service trong

Trang 1

ĐẠI HỌC THỦY LỢIKhoa Công Nghệ Thông Tin

BÀI TẬP LỚN

PHÁT TRIỂN ỨNG DỤNG CHO CÁC THIẾT BỊ DI ĐỘNG

Đề tài: APP GAME AI LÀ TRIỆU PHÚ

Giáo viên hướng dẫn: Phạm Huy Thông

Nhóm sinh viên thực hành: Hồ Minh Đức

Nguyễn Hữu Phước

Hà nội, 24 tháng 4 năm 2021

Trang 2

M C L CỤ Ụ

PHẦN I: MỞ ĐẦU 5

1 Lý do ch n đềề tàiọ 5

2 Đốối tượng nghiền c uứ 6

3 M c đích nghiền c uụ ứ 6

4 Ý nghĩa lý lu n và th c tềễn c a đềề tàiậ ự ủ 6

5 Cấốu trúc c a báo cáoủ 7

PHẦN 2: NỘI DUNG 8

CH NG 1: GI I THI U VỀỀ ANDROIDƯƠ Ớ Ệ 8

1.1 Giới thiệu hệ điều hành Android 8

1.2 Lược sử về Android 8

1.3 Nền tảng Android 10

1.4 Kiến trúc ứng dụng Android 11

1.5 Vòng đời của ứng dụng Android: 12

CH NG 2: CÁC THÀNH PHẦỀN C B N C A M T NG D NG ANDROIDƯƠ Ơ Ả Ủ Ộ Ứ Ụ 13

2.1 Activity 13

2.1.1 T o m t Actvityạ ộ 13

2.1.2 Vòng đ i c a Actvityờ ủ 15

15

2.1.3 Kh i đ ng m t Actvityở ộ ộ 15

2.1.4 Liên l c gi a 2 Actvity.ạ ữ 16

2.2 BroadcastReceiver 16

2.2.1 Chu kỳ sốống 16

2.2.2 M t sốố broadcast thống d ngộ ụ 17

2.2.3 Hàm onReceive() 17

2.3 Service 17

2.3.1 T o ra m t Serviceạ ộ 18

2.3.2 Vòng đ i c a Servicesờ ủ 19

Trang 3

2.3.3 Kêốt nốối d ch vị ụ 19

2.4 Content Providers 21

2.4.1 Gi i thi uớ ệ 21

2.4.2 T o m t Content Provider m iạ ộ ớ 22

2.4.2.1 T o Content Providerạ 22

2.4.2.2 Đ a ra truy xuấốt Data Sourceư 23

2.4.2.3 Đăng ký Provider 23

CH NG 3: THIỀẾT KỀẾ GIAO DI N CHO NG D NG ANDROIDƯƠ Ệ Ứ Ụ 28

3.1 Một số lớp hỗ trợ thiết kế giao diện cho ứng dụng Android 28

3.2 Android Widget Toolbox 28

3.3 Các kiểu Layout: 29

3.4 Tạo các View: 30

3.5 Tạo giao diện Activity với các View 31

3.6 Menu 32

CH NG 4: L U TR D LI U TRONG ANDROIDƯƠ Ư Ữ Ữ Ệ 36

4.1 Giới thiệu SQLite Database 36

4.2 Các Thao Tác V i SQLite Trong Android 37ớ CH ƯƠNG 5: MULTIMEDIA 42

5.1 Giới thiệu 42

5.2 Giới thiệu gói android.media 43

5.3 Giới thiệu class android.media.MediaPlayer 43

5.4 Giới thiệu lớp android.media.MediaRecorder 45

CH NG 6: XẦY D NG GAME “AI LÀ TRI U PHÚ”ƯƠ Ự Ệ 48

6.1 Kịch bản game Ai Là Triệu Phú 48

6.2 Phân tích và thiết kế 51

6.3 Giao diện Game: “Ai là triệu phú” 58

PHẦN III: KẾT LUẬN 62

1 Kềốt qu đ t đả ạ ượ 62c:

Trang 4

2 H n chềố c a đềề tàiạ ủ 62

3 Hướng phát tri nể 62

PHẦN IV: TÀI LIỆU THAM KHẢO 63

Trang 5

PHẦN I: MỞ ĐẦU

1 Lý do chọn đề tài

Theo nguồn tin Website “cuasotinhoc.vn” cho thấy những năm gần đây, dịch vụviễn thông di động ở nước ta có sự bùng nổ một cách mạnh mẽ Các nhà mạng nhưMobiPhone, VinaPhone, Viettel, không ngừng nâng cao công nghệ, đầu tư trangthiết bị để đem đến cho người dùng những dịch vụ có chất lượng tốt nhất, với giá cảphù hợp với thu nhập của người dân Đi kèm theo đó là một thị trường thiết bị điệnthoại sôi động, mà nổi bật nhất là các dòng điện thoại thông mình (Smart Phone) nhưIphone của Apple, dòng máy Galaxy của SamSung, HTC, Các dòng điện thoại sửdụng các hệ điều hành như Android, IOS, WindownMobile, được các hãng sản xuấtđiện thoại chú trọng phát triển

Hình 1.1 Android Market vượt 10 tỷ lượt tải vềNổi bật lên trong vòng hơn một năm trở lại đây đó là hệ điều hành Android doGoogle phát triển Tuy được ra đời không lâu nhưng với sự tiện dụng, nhiều tính năng

ưu việt Android nhanh chóng trở thành một hệ điều hành phổ biến trên toàn thế giới.Theo số liệu của Google thì trong tháng 8/2011 đã có 650.000 thiết bị Android được

Trang 6

kích hoạt mỗi ngày Không những thế, với tính năng mở của mình, Android đã thu hútđược rất nhiều lập trình viên và các hãng sản xuất điện thoại sử dụng hệ điều hành củamình Minh chứng cụ thể là kho ứng dụng của Android ngày càng phong phú và dồidào, các hãng điện thoại coi việc phát triển sản phẩm Android như là một giải pháp đểchống lại sự độc tôn của Iphone.

Nhận thấy nhu cầu cập nhật, chia sẻ thông tin của người dùng thông qua thiết

bị di động là rất lớn, dưới sự hướng dẫn, gợi ý của thầy Nguyễn Minh Tiến, em đãthực hiện đồ án: “TÌM HIỀU VỀ ANDROID VÀ XÂY DỰNG ỨNG DỤNGGAME TRÊN ANDROID“” nhằm hiểu rõ về các kĩ thuật lập trình trên thiết bị động,đặc biệt là các kĩ thuật để có thể xây dựng một game hoàn chỉnh

2 Đối tượng nghiên cứu

Với đề tài này, em tập trung vào các nội dung :

- Cách cài đặt các chương trình để có thể chạy android

- Tìm hiểu về Activity trong Android

- Tìm hiểu về Service trong Android

- Cách tạo giao diện trong Android

- Cách sử dụng mediaPlayer trong Android

- Cách lưu trữ dữ liệu trong Android

Trong một khoảng thời gian có hạn, em chỉ tập trung vào nghiên cứu và xâydựng chương trình Game: Ai là triệu phú

3 Mục đích nghiên cứu

- Nghiên cứu kiến trúc Android

- Nghiên cứu các thành phần cơ bản trong Android

- Nghiên cứu cách phát triển ứng dụng trên Android

- Xây dựng ứng dụng Game “Ai là triệu phú” trên nền tảng Android

4 Ý nghĩa lý luận và thực tiễn của đề tài

Ý nghĩa luận: Đề tài là tài liệu tham khảo rất hữu ích cho những aimuốn tìm hiểu về Android Bên cạnh đó, chưa có nhiều tài liệu tham khảo về Androidbằng tiếng việt, do đó em muốn nghiên cứu muốn đóng góp hiểu biết của mình để làmgiàu thêm tài liệu tham khảo cho chủ đề này

Trang 7

Ý nghĩa thực tiễn: Hiện tại, hệ điều hành Android đang được sử dụngrộng rãi trên các thiết bị di động Nhu cầu chơi và học của người dùng trên điện thoạirất cao Chính vì vậy chương trình “Ai là triệu phú” là một Game giải trí và học tập rấthữu ích cho những ai sử dụng điện thoại cài hệ điều hành Android.

5 Cấu trúc của báo cáo

Báo cáo của gồm có 4 phần:

Phần I: Mở đầu

Giới thiệu tổng quan về đề tài “Tìm hiểu về Android và xây dựng ứng dụngGame trên Android”

Phần II: Nội dung

Trong phần này bao gồm các chương sau:

Chương 1: Giới thiệu về Android Android:

Giới thiệu về hệ điều hành Android

Các thành phần trong một ứng dụng Android

Các khái niệm vấn đề cơ bản của Android

Chương 2: Các thành phần cơ bản của một ứng dụng Android

Chương 3: Thiết kế giao diện Android

Chương 4: Lưu trữ dữ liệu trong Android

Chương 5: Multimedia

Chương 6: Xây dựng chương trình Game: Ai là triệu phú

Phần III: Kết luận

Kết quả và hướng phát triển của đề tài

Phần IV: Tài liệu tham khảo

Trang 8

PHẦN 2: NỘI DUNG

CHƯƠNG 1: GIỚI THIỆU VỀ ANDROID

1.1 Giới thiệu hệ điều hành Android

Android là một hệ điều hành chạy trên điện thoại di động được phát triển từnhân Linux Được phát triển vào năm 2005 với một dự án cùng tên “Android” Trongmột phần chiến lược của mình để lấn sâu vào lĩnh vực di động Google đã mua về toàn

bộ quá trình phát triển cũng như đội phát triển của Android

Google phát hành Android dưới dạng mã nguồn mở và miễn phí, do đó bất cứ

ai muốn sử dụng đều có thể tải về mã nguồn Android đầy đủ Hơn nữa các nhà cungcấp (thường là những nhà phát triển phần cứng) có thể phát triển thêm phần mở rộng

và tùy biến cho Android để tạo những sản phẩm riêng biệt của họ so với sản phẩm củanhững công ty khác Điều này làm cho mô hình phát triển Android rất hấp dẫn và do

đó khơi dậy sự quan tâm của nhiều nhà cung cấp Điều này rất phù hợp với các công

ty bị ảnh hưởng bởi hiện tượng này như là Iphone của Apple, một sản phẩm cực kìthành công trong công cuộc cách mạng hóa ngành công nghiệp Smartphone Các công

ty như SamSung, Motorola, SonyEricsson và một số những nhà sản xuất đã tìm đượcmột con đường mới để làm sống dậy sản phẩm của họ Những nhà sản xuất này coiAndroid như một giải pháp – họ sẽ tiếp tục thiết kế phần cứng của riêng mình và sửdụng Android như một hệ điều hành chính[9][10]

Ưu điểm chính của việc áp dụng Android là cung cấp một cách tiếp cận thốngnhất để phát triển ứng dụng Các nhà phát triển chỉ cần phát triển cho Android và cácứng dụng của họ có thể chạy trên nhiều thiết bị khác nhau, miễn là các thiết bị được

hỗ trợ bằng cách sử dụng Android Trong thế giới smartphone ứng dụng là một phầnquan trọng nhất của chuỗi thành công Do đó các nhà sản xuất thiết bị coi Android như

là hy vọng tốt nhất để thách thức sự tấn công của Iphone

1.2 Lược sử về Android

Android được phát hành phiên bản đầu tiên 11/11/2007, là một môi trường hệđiều hành hoàn chỉnh dựa trên hệ điều hành nhân Linux V2.6 Lúc đầu, đích triển khaiđối với Android là lĩnh vực điện thoại di động, gồm các loại điện thoại thông minh vàcác loại thiết bị điện thoại kiểu gập chi phí thấp Tuy nhiên, phạm vi đầy đủ các dịch

Trang 9

vụ điện toán của Android và sự hỗ trợ chức năng phong phú của nó có tiềm năng mởrộng ra ngoài thị trường điện thoại di động Android còn có thể hữu ích đối với cácnền tảng và ứng dụng khác[2].

Nền Android là sản phẩm của Open Handset Alliance (Liên minh thiết bị cầmtay mở), một tập đoàn các tổ chức cùng hợp tác với nhau để xây dựng nên một loạiđiện thoại di động tốt hơn Tập đoàn do Google đứng đầu này gồm các nhà vận hành(điện thoại) di động, các nhà sản xuất thiết bị cầm tay, sản xuất linh kiện, các nhà cungcấp nền và giải pháp phần mềm và các công ty tiếp thị Từ một quan điểm phát triểnphần mềm, Android trở thành trung tâm của thế giới mã nguồn mở và rất có tiềm năngphát triển

Thiết bị cầm tay có khả năng Android đầu tiên trên thị trường là thiết bị G1 doHTC sản xuất và được bán trên T-Mobile Nó trở nên sẵn có sau gần một năm đồn đại,khi mà các công cụ phát triển phần mềm sẵn có duy nhất chỉ là một số bản phát hành

Bộ công cụ phát triển phần mềm (SDK) được cải tiến dần từng bước Khi ngày pháthành G1 gần đến, nhóm Android đã phát hành SDK V1.0 và các ứng dụng bắt đầuvượt lên nhằm hướng tới nền tảng mới này

Để kích thích đổi mới và phát triển các ứng dụng của Android, Google đã tàitrợ hai vòng cuộc thi “Các thách thức nhà phát triển Android”, và hàng triệu đô la đãđược đổ vào các ứng dụng dự thi hàng đầu Vài tháng sau G1, Android Market đượcphát hành, cho phép người sử dụng duyệt và tải về các ứng dụng trực tiếp vào điệnthoại của họ Trong vòng 18 tháng, một nền di động mới đã chính thức có mặt trên thịtrường và sẽ là đối thủ cạnh tranh nặng ký của các nền di động phổ biến trước đó nhưSymbian hay Window Mobile

Android cung cấp khá đầy đủ các công cụ cơ bản và được thiết kế sao cho cácnhà phát triển có thể tận dụng tối đa lợi thế của thiết bị cầm tay để xây dựng nên cácứng dụng thực sự thuyết phục Họ có thể tạo một ứng dụng có thể gọi thực hiện cácchức năng lõi trong điện thoại như thực hiện cuộc gọi, gửi tin nhắn SMS, dùngcamera… hay chia sẻ thông tin cá nhân lên trang web chẳn hạn như thông tin liên lạc,

vị trí địa lí, lịch biểu… Các nhà phát triển còn có thể làm bất cứ việc gì trên thiết bịAndroid bởi vì hệ thống Android giao tiếp thông qua các Intents – nó đơn giản là mộtchuỗi mô tả một hành động nào đó - ví dụ:

Trang 10

“android.provider.Telephony.SMS_RECEIVED” Android còn cung cấp sẵn các dịch

vụ định vị (và đây là một thế mạnh của Google) cùng với một tập các ứng dụng về

“Map” với các tính năng rất ấn tượng như dò đường, tính khoảng cách địa điểm, tìmbạn… Ngoài ra còn có một số tính năng nổi bật khác như Animation và đồng thờicũng hỗ trợ media-playback

Android đã dần hoàn thiện qua các phiên bản, mà phiên bản mới nhất hiện nay

Trang 11

tất cả các thiết bị Android được trang bị với các phần cứng cần thiết Ngoài ra còn có

cả hỗ trợ máy ảnh(camera)

Về mặt lịch sử, có hai lĩnh vực mà các ứng dụng di động đã gắng sức theo kịpcác đối tác máy tính để bàn là đồ họa/đa phương tiện và phương thức lưu trữ dữ liệu.Android giải quyết thách thức về đồ họa bằng sự hỗ trợ dựng sẵn cho đồ họa 2D và3D, gồm cả thư viện OpenGL Gánh nặng lưu trữ dữ liệu được giảm nhẹ vì nềnAndroid có gồm cả cơ sở dữ liệu SQLite mã nguồn mở phổ biến Hình 1.4 cho thấymột khung hình đơn giản hóa về các tầng phần mềm Android

Trang 12

với tính chất này cho phép rút ngắn thời gian thực thi chương trình.Mỗi ứng dụngAndroid chạy trong một cá thể của máy ảo Dalvik, khi đến lượt, cá thể máy ảo nàynằm trong một tiến trình do nhân Linux quản lý, như trình bày dưới đây.

Hình 1.5 Máy ảo Dalvik1.5 Vòng đời của ứng dụng Android:

Không giống như các ứng dụng trên các nền tảng khác, các ứng dụng Androidkhông có một điều khiển đến vòng đời của chúng Thay vào đó, các thành phần ứngdụng phải lắng nghe việc thay đổi trạng thái bên trong của ứng dụng đó và tác độngtrở lại một cách hợp lý Mỗi một ứng dụng Android ở trong chính tiến trình của nó,chạy một thể hiện riêng biệt của Dalvik.Việc quản lý bộ nhớ và tiến trình của mỗi ứngdụng Android được điều khiển một cách riêng trong lúc runtime

Android quản lý tài nguyên một cách chặt chẽ, nó sẽ làm bất cứ việc gì để đảmbảo cho thiết bị duy trì đáp ứng Điều này có nghĩa là các tiến trình sẽ bị hủy đi màkhông có một cảnh báo nào nếu cần giải phóng tài nguyên cho các ứng dụng có độ ưutiên cao

Trang 13

CHƯƠNG 2: CÁC THÀNH PHẦN CƠ BẢN CỦA MỘT ỨNG DỤNG

ANDROID2.1 Activity

2.1.1 Tạo một Activity

Để tạo một Activity mới, cần thừa kế từ lớp Activity, sử dụng các View để cungcấp các tương tác với người dùng, khai báo các thành phần giao diện và thực thi cácchức năng của ứng dụng

package com.paad.myapplication;

import android.app.Activity;

import android.os.Bundle;

public class MyActivity extends Activity {

/** Called when the activity is first created */

Để gắn một giao diện cho một Activity, sử dụng phương thức setContentViewtrong lớp Activity được kế thừa

Trang 14

Có 2 cách để thiết lập giao diện cho Activity: bằng code hoặc thông qua fileđịnh nghĩa layout Ở trên là cách tạo giao diện bằng code, sau đây là cách tạo giaodiện người thông qua layout, truyền tham số vào cho phương thức setContentView làmột resource ID.

Ví dụ sau mô tả cách làm thế nào để khai báo Activity đã được tạo ở phần trên:

Trang 15

2.1.2 Vòng đời của Activity

Hình 2.1 Vòng đời của Activity2.1.3 Khởi động một Activity

Để khởi động một Activity, chúng ta dùng Intent:

o Khai báo tường minh: cung cấp chính xác thông tin của activity cần gọi (nếucùng ứng dụng chỉ cần cung cấp tên class, nếu ứng dụng khác nhau thì cung cấp tênpackage, tên class) Ví dụ: đoạn code bên dưới sẽ khởi động activity tên làTargetActivity

Intent intent = new Intent(getApplicationContext(),TargetActivity.class);startActivity(intent);

o Khai báo không tường minh: cung cấp thao tác cần làm gì, với loại dữ liệunào, thao tác thuộc nhóm nào… hệ thống sẽ tìm activity tương ứng để khởi động Vídụ: đoạn code bên dưới sẽ khởi động một activity nào đó đăng có khả năng xem ảnh.Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivity(intent);

Trang 16

Với cách khởi động activity không tường minh, chúng ta cần phải biết mộtchút về Intent-filter.Intent-filter sẽ giúp một activity đăng ký với hệ thống mình có thểlàm được thao tác gì, trong nhóm nào, với loại dữ liệu nào Như vậy khi intent vàintent-filter khớp nhau, activity sẽ được hệ thống khởi động.

2.1.4 Liên lạc giữa 2 Activity

Có thể khởi động một activity với một yêu cầu nào đó và activity kia khi làmxong công việc sẽ trả lại kết quả cho activity trước Ví dụ activity A yêu cầu mộtactivity làm giúp việc chụp ảnh, activity B đáp ứng được việc này, sau khi user chụpảnh xong sẽ trả lại file ảnh cho activity A Để liên lạc 2 activity chúng ta làm nhu sau:– Khi khởi động một activity, ta có thể gửi kèm dữ liệu trong intent như ví dụsau:

intent.putExtra("value1", new String("Hello"));

intent.putExtra(“value2", new Long(100));

– Bên phía activity được khởi động, có thể lấy dữ liệu được gửi như sau:getIntent().getExtras().getString("value1");

getIntent().getExtras().getLong("value2");

2.2 BroadcastReceiver

BroadcastReceiver là một trong bốn loại thành phần trong ứng dụngAndroid.Chức năng của nó là dùng để nhận các sự kiện mà các ứng dụng hoặc hệthống phát đi

BroadcastReceiver chỉ có duy nhất một phương thức onReceive()

– Khi có sự kiện mà BroadcastReceiver đã đăng ký nhận được phát đi, thìphương thức onReceive() của BroadcastReceiver đó sẽ được gọi

– Sau khi thực thi xong phương thức này, vòng đời của BroadcastReceiver kếtthúc

Trang 17

Lưu ý khi sử dụng: Ngay khi onReceive() kết thúc, hệ thống coi như receiver

đã không còn hoạt động và có thể giải phóng tiến trình chứa receiver này bất cứ lúcnào

Tránh xử lý các code quá lâu trong onReceive()

Không có xử lý bất đồng bộ, chờ callback… trong Receiver (cụ thể nhưhiển thị Dialog, kết nối service…)

2.2.2 Một số broadcast thông dụng

Báo hệ thống khởi động xong

Báo pin có sự thay đổi

Báo có package mới cài vào hoặc xóa đi

Báo tắt máy

Báo cắm sạc, rút sạc

Thông báo tin nhắn tới

Thông báo cắm, rút thẻ nhớ

Thông báo có cuộc gọi đi

Broadcast do người phát triển ứng dụng tự định nghĩa (giúp liên lạc hoặcthông báo một sự kiện giữa các ứng dụng)

o intent: intent được truyền vào sẽ có đầy đủ thông tin như sự kiện nào màreceiver này đăng ký đã xảy ra dẫn đến onReceive() được gọi, có gửi kèm thông tin gìhoặc dữ liệu gì hay không Xem các api:

Trang 18

Dùng trong các ứng dụng nghe nhạc.

Dùng để xử lý các thao tác mất thời gian và không nhất thiết phải hiển thịlên activity (download, upload…)

Đôi khi cần một ứng dụng vận hành liên tục để xử lý những việc mong muốn

mà không làm phiền người dùng

Làm những thao tác tính toán, xử lý đều đặn nào đó và kết quả khi nào ngườidùng cần thì mới xem

public void onStart(Intent intent, int startId) {

// TODO: Actions to perform when service is started

}

@Override

public void onCreate() {

// TODO: Actions to perform when service is created

}

@Override

public IBinder onBind(Intent intent) {

// TODO: Replace with service binding implementation

Trang 19

+ Cách 1: khởi động ngầm Ví dụ:

startService(new Intent(MyService.MY_ACTION));

+ Cách 2: khởi động tường minh Ví dụ:

startService(new Intent(this, MyService.class));

Để dừng một Serivce, sử dùng phương thức stopService, truyền vào Intent xácđịnh Service cần ngưng hoạt động

2.3.2 Vòng đời của Services

Hình 2.2 Vòng đời của service

o Khi có một context nào đó gọi startService() để khởi động một dịch vụ mongmuốn Nếu dịch vụ đó chưa được tạo thì sẽ gọi onCreate() rồi gọi tiếp onStart() và khi

đó dịch vụ chạy nền bên dưới

o Nếu sau đó lại có một context muốn khởi độngdịch vụ này mà dịch vụ đã đangchạy thì chỉ có phương thức onStart() của dịch vụ được gọi

o Dù dịch vụ có được gọi khởi động bao nhiêu lần thì cũng chỉ có thể hiện củadịch vụ và chỉ cần gọi stopService() một lần để kết thúc dịch vụ

2.3.3 Kết nối dịch vụ

Khi một Activity được kết nối tới một Service, nó duy trì một tham chiếu đếnmột thực thể Service Để kết nối đến thực thể này, thực thi phương thức onBind nhưsau:

private final IBinder binder = new MyBinder();

@Override

Trang 20

public IBinder onBind(Intent intent) {

// tham chiếu đến dịch vụ

private MyService serviceBinder;

// xử lý kết nồi giữa service và activity

private ServiceConnection mConnection = new ServiceConnection() {public void onServiceConnected(ComponentName className, IBinder service) {

// được gọi khi liên kết được thực hiện

serviceBinder = ((MyService.MyBinder)service).getService(); }

public void onServiceDisconnected(ComponentName className) { // nhận khi dịch vụ ngắt kết nối một cách bất ngờ

Hoạt động của bindService(): kết nối dịch vụ

Trang 21

Hình 2.3 Hoạt động kết nối dịch vụ

Thông thường, vòng đời của dịch vụ khi có client kết nối từ đầu như sau:

o Cũng bắt đầu bằng onCreate() rồi đến onBind() và dịch vụ chạy dưới nền

o Khi không còn client kết nối tới thì dịch vụ gọi onUnbind() rồi onDestroy()

Có một số trường hợp không thông thường, ví dụ như:

o Có một context khởi động một dịch vụ, sau đó có một số client kết nối (bind)tới service

o Có nhiều client cùng lúc kết nối tới dịch vụ

o Một activity vừa gọi startService() vừa gọi bindService()

2.4 Content Providers

2.4.1 Giới thiệu

Có thể coi trình cung cấp nội dung như là một máy chủ cơ sở dữ liệu Côngviệc của nó là quản lý truy cập và chia sẻ dữ liệu đang tồn tại, chẳng hạn như một cơ

sở dữ liệu SQLite Nó có thể được cấu hình để cho phép các ứng dụng khác truy xuất

và ngược lại.Nếu ứng dụng rất đơn giản thì không nhất thiết phải tạo ra một trình cungcấp nội dung

Trang 22

Content Provider giúp tách biệt tầng ứng dụng ra khỏi tầng dữ liệu Nó có đầy

đủ các quyền điều khiển và được truy xuất thông qua mô hình URI đơn giản như là cóthể thêm, xóa, cập nhật dữ liệu của các ứng dụng

2.4.2 Tạo một Content Provider mới

2.4.2.1 Tạo Content Provider

Để tạo một Content Provider cần thừa kế lại từ lớp trừu tượng ContentProvide,ghi đè lại phương thức onCreate

public boolean onCreate() {

// TODO: Construct the underlying database

Trang 23

2.4.2.2 Đưa ra truy xuất Data Source

Có thể cung cấp các truy vấn và thực thi với Content Provdier bằng cách thựchiện các phương thức delete, insert, update và query Các phương thức này hoạt độngnhư các giao tiếp chung đến nguồn dữ liệu bên dưới, chúng cho phép các ứng Androidchia sẽ dữ liệu với nhau mà không phải tạo một giao tiếp riêng cho mỗi ứng dụng.Bước cuối cùng trong quá trình tạo một Content Provider là định nghĩa kiểuMIME làkiểu dữ liệu mà Provider trả về, override phương thức getType để trả về mộtkiểu String mô tả cho kiểu dữ liệu Kiểu trả về bao gồm cả 2 hình thức: trường đơn vàtất cả dữ liệu

2.4.3 Truy vấn, thêm, cập nhật và xóa nội dung trong Content Provide

Content Provider được truy xuất thông qua lớp Content Resolver Mỗi mộtContext của ứng dụng có một đối tượng ContentResolver, có thể được truy xuất thôngqua phương thức getContentResolver

ContentResolver cr = getContentResolver();

Content Resolver bao gồm một vài phương thức để thực thi và truy vấn đếnContent Providers Một URI dùng để chỉ định Content Provider nào được cung cấpbởi các quyền được định nghĩa trong manifest của ứng dụng URI là một chuỗi tùy ý,

vì thế hầu hết các provider đều đưa ra thuộc tính CONTENT_URI.Content Providerthường đưa ra 2 hình thức URI, một là đựa tất cả các dữ liệu được yêu cầu trên cùngmột dòng đơn lẻ, hoặc là thêm vào /<rowID> vào phía sau CONTENT_URI.2.4.3.1 Truy vấn

Việc truy vấn trên Content Provider có hình thức tương tự như khi truy vấntrong database, dùng phương thức query của đối tượng ContentResolver với các tham

số truyền vào gồm:

Trang 24

Một URI của Content Provider muốn truy vấn.

Một ánh xạ đại diện cho các cột muốn chứa trong tập kết quả

Một mệnh đề where chỉ định các dòng nào được trả về Có thể đưa vào ký tựđại diện ?và sẽ được thay thế bởi các giá trị được lưu bên trong các tham số đượcchọn

Một mảng các đối số kiểu String thay thế cho các ký tự đại diện trong mệnh

// trả về tất cả các cột của các hàng có cột 3 bằng với giá trị thiết đặt và sắpxếp

// theo giá trị của cột 5

String where = KEY_COL3 + “=” + requiredValue;

String order = KEY_COL5;

CursorsomeRows = getContentResolver().query(MyProvider.CONTENT_URI, null, where, null, order);

2.4.3.2 Thêm

Content Resolver cung cấp 2 phương thức để chèn một record mới vào trongContent Provider, đó là insert và bulkInsert Phương thức insert trả về một URI đếnrecord mới được thêm vào, trong khi bulkInsert trả về số thành phần thêm vào thànhcông

Đoạn code sau mô tả cách sử dụng 2 phương thức trên:

// tạo một dòng mới cho các giá trị muốn chèn

ContentValues newValues = new ContentValues();

// gán giá trị cho mỗi hàng

newValues.put(COLUMN_NAME, newValue);

[ lặp lại cho mỗi cột ]

Uri myRowUri = getContentResolver().insert(MyProvider.CONTENT_URI,

Trang 25

// tạo một dòng mới cho các giá trị muốn chèn

ContentValues[] valueArray = new ContentValues[5];

// tạo một mảng các dòng mới và trả về số thành phần thêm thành côngint count = getContentResolver().bulkInsert(MyProvider.CONTENT_URI,valueArray);

2.4.3.3 Xóa

Để xóa một record khi sử dụng Content Resolver, sử dụng phương thức delete,truyền vào URI cho dòng muốn xóa Đồng thời, cũng có thể dùng mênh đề điều kiệnwhere để xóa nhiều dòng

Ví dụ:

// xóa một dòng được chỉ định

getContentResolver().delete(myRowUri, null, null);

// xóa 5 dòng đầu tiên

String where = “_id < 5”;

getContentResolver().delete(MyProvider.CONTENT_URI, where, null)2.4.3.4 Cập nhật

Việc cập nhật cho một Content Provider được điều khiển bởi phương thứcupdate cùa Content Resolver Phương thức update nhận URI của Content Providerđích, một đối tượng ContentValues chứa tập giá trị được ánh xạ đến các cột cần cậpnhật, và một mệnh đề where để chỉ định dòng nào được cập nhật

Khi thực thi, mỗi dòng phù hợp với điều kiện trong mệnh đề where sẽ được cậpnhật và trả về số dòng được cập nhật giá trị thành công

Ví dụ:

// tạo một dòng mới cho các giá trị muốn chèn

ContentValues newValues = new ContentValues();

// tạo ánh xạ thay thế các cột muốn cập nhật và những giá trị gì để gán chomỗi cột

newValues.put(COLUMN_NAME, newValue);

// áp dụng cho 5 hàng đầu tiên

String where = “_id < 5”;

Trang 26

getContentResolver().update(MyProvider.CONTENT_URI, newValues, where,null);

2.4.4 Native Android Content Provider

Android đưa ra nhiều Content Provider hỗ trợ truy xuất đến các ứng dụngnative.Có thể dùng một trong các Content Provider native này để sử dụng các kỹ thuậtđược mô tả ở trên Như một sự thay thế, gói android.provider chứa các lớp thuận tiện

để truy xuất một cách đơn giản đến nhiểu provider bao gồm:

Browser: Dùng browser Content Provider để đọc và điều chỉnh bookmarks,browser history, hoặc web searches

CallLog: Hiển thị hoặc cập nhật các cuộc gọi (cuộc gọi đến, cuộc gọi đi, cáccuộc gọi nhỡ, và chi tiết cuộc gọi

Contacts: dùng để rút trích, chình sữa, hoặc lưu trữ chi tiết danh bạ.MediaStore: cung cấp sự kiểm soát, quản lý truy xuất đa phương tiện trênthiết bị (audio, video, và hình ảnh)

Settings: Truy xuất đến các thiết lập cài đặc của thiết bị, Settings cho phéphiển thị và điều chỉnh các thiết lập Bluetooth, ring tone và nhiều cài đặt khác.Nên sử dụng các Content Providers native này bất cứ khi nào có thể, bởi vì khi

sử dụng chúng sẽ bảo đảm cho ứng dụng được kết hợp với các ứng dụng native hoặcthird-party khác một cách liên tục

2.4.4.1 Media Store Provider

Android Media Store cung cấp một kho lưu trữ các tập tin audio, video, và hìnhảnh.Mỗi khi thêm một tập tin đa phương tiện nào vào Android filesystem, nó sẽ đượcthêm vào Media Store để cho các ứng dụng khác nhìn thấy nó

Một lớp MediaStore bao gồm một số các phương thức tiện lợi để thêm các tậptin vào Media Store một cách đơn giản Ví dụ sau đây sẽ mô tả việc thêm vào một tậptin hình ảnh vào trong Media Store

android.provider.MediaStore.Images.Media.insertImage(

getContentResolver(), sourceBitmap, “my_cat_pic”, “Photo of my cat!”); 2.4.4.2 Contacts Provider

Trang 27

Contact Provider thực sự rất cần thiết trên thiếc bị giao tiếp để đưa ra tất cả cácthông tin có thể từ cơ sở dữ liệu đến bất kỳ ứng dụng nào có quyềnREAD_CONTACTS.

Trong ví dụ sau đây, một Activity nhận một Cursor đến mỗi người trong cơ sở

dữ liệu contact, tạo một mảng kiểu String với mỗi thành phần chứa tên người và sốđiện thoại của người đó

// lấy một con trỏ của mỗi liên hệ

Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);

// quản lý vòng đời con trỏ

startManagingCursor(cursor);

// các thuộc tính để lấy chì số cột

int nameIdx = cursor.getColumnIndexOrThrow(People.NAME);

int phoneIdx = cursor getColumnIndexOrThrow(People.NUMBER);String[] result = new String[cursor.getCount()];

if (cursor.moveToFirst())

do {

// trích xuất tên

String name = cursor.getString(nameIdx);

// trích xuất số điện thoại

String phone = cursor.getString(phoneIdx);

result[cursor.getPosition()] = name + “ (“ + phone + “)”; } while(cursor.moveToNext());

Trang 28

CHƯƠNG 3: THIẾT KẾ GIAO DIỆN CHO ỨNG DỤNG ANDROID

3.1 Một số lớp hỗ trợ thiết kế giao diện cho ứng dụng Android

Android cung cấp một số công cụ thiết kế giao diện:

Views: là lớp UI cơ bản cho các control giao diện Tất cả các control giaodiện người dùng, các lớp layout đều được dẫn xuất từ lớp Views

ViewGroups: được mở rộng từ lớp View và có thể chứa nhiều Views.ViewGroups cũng được kế thừa để cung cấp các lớp quản lý bố cục nhưLinearLayout ViewGroup được dùng để xây dựng nên các component có thể dùng lại(widget) hoặc để quản lý bố cục cho các control

Activity: dùng để hiển thị giao diện người dùng Lớp này do người phát triểnứng dụng viết

Hình 2.4 Quan hệ giữa các thành phần trên3.2 Android Widget Toolbox

Android cung cấp một bộ công cụ các View chuẩn để tạo các giao diện ngườidùng đơn giản,giúp đơn giản hóa việc phát triển và tạo sự đồng nhất giữa các ứngdụng

Các control thông dụng:

• TextView: là một label chỉ có tác dụng hiển thị văn bản, nó hỗ trợ hiển thịnhiều dòng, định dạng chuỗi

Trang 29

• EditText: là một vùng nhập văn bản có thể chỉnh sửa, hỗ trợ nhập nhiềudòng.

• ListView: tạo và quản lý một nhóm các View để hiển thị một danh sách cácphần tử Một ListView chuẩn dùng để hiển thị chuỗi giá trị của một mảng cácTextView

• Spinner: là một control kết hợp, hiển thị một TextView và một ListView kếthợp dùng để chọn một item từ danh sách Nó được tạo thành từ một TextView chứagiá trị hiện tại đang được chọn kết hợp với một nút mà khi nhấn vào sẽ đưa ra mộtdanh sách lựa chọn

• FrameLayout: là layout đơn giản nhất trong Layout Manager,FrameLayout đặt mỗi View con vào góc trái trên của màn hình Việc thêm nhiềucontrol sẽ chồng một cái mới lên trên cái trước đó

• LinearLayout: thêm mỗi View theo một đường thẳng, theo chiều dọc hoặcngang Một layout theo chiều dọc sẽ có một control trên một dòng, layout theo chiềungang chỉ có một dòng cho nhiều View Nó cho phép chỉ định giá trị “weight” cho mỗiView con để điều chỉnh kích thước bên trong không gian cho phép

• RelativeLayout: dùng để định vị trí cho các View cân xứng với các controlkhác cũng như với đường biên của màn hình

• TableLayout: giúp bố trí các View theo một lưới có các dòng và các cột.Các cột có thể được thiết lập để co lại hoặc giản ra

Trang 30

• AbsoluteLayout: trong layout này, vị trí mỗi View sẽ là tọa độ tuyệt đối,đảm bảo bố cục chính xác cho các thành phần Do đó, không thể có được sự linh hoạtđối với các màn hình có kích thước khác nhau.

Sử dụng Layout:

Để sử dụng layout người ta thường dùng phương pháp là sử dụng resource bênngoài từ file XML Một layout XML phải chứa một nút gốc.Nút gốc này có thể chứacác layout và các View lồng nhau để xây dựng nên các giao diện phức tạp

Hình 2.5 Hệ thống các view với các thông số layout được kết nối với mỗi view3.4 Tạo các View:

3.4.1 Chỉnh sửa các View có sẵn

Chỉnh sửa hoặc kế thừa một control sẳn có nếu nó cung cấp các chức năng cầnthiết, bằng cách ghi đè các handler và onDraw của nó Để định nghĩa lại giao diệncũng như các ứng xử của control mới tạo, cần phải ghi đè và thừa kế các điều khiển sựkiện (event handler) kết hợp với các hành vi muốn thay đổi

3.4.2 Tạo các điều khiển ghép (compound control)

Compound control là các widget có thể tái sử dụng, nó chứa nhiều control được

bố trí và có liên hệ với nhau, nó được tạo từ nhiều control cơ bản.Ví dụ như tạo nênmột dropdown combo box bằng cách kết hợp một TextView và một Button mà khiđược nhấn sẽ hiển thị một ListView

Trang 31

Khi tạo một compound control cần định nghĩa layout, hình thức và cách thứctác động lẫn nhau giữa các View mà nó chứa Compound control được tạo thành từviệc dẫn xuất từ lớp ViewGroup.

Để tạo một compound control mới, chọn một lớp layout phù hợp nhất để xácđịnh vị trí cho các control, và dẫn xuất từ nó:

public class MyCompoundView extends LinearLayout {

public MyCompoundView(Context context) {

Một khi đã xây dựng được giao diện cho control, điều tiếp theo là định nghĩađiều khiển sự kiện cho mỗi control con trong nó

3.4.3 Tạo các Control tùy chỉnh

Người phát triển có thể tạo ra các control theo ý của mình để tạo được một giaodiện mang tính duy nhất phù hợp với yêu cầu của người dùng Các control mới cầnphải được thừa kế từ lớp View hoặc SurfaceView

Lớp View cung cấp một đối tượng Canvas và một số phương thức vẽ cũng nhưcác lớp Paint, để tạo một giao diện trực quan.Người thiết kế có thể định nghĩa lại các

sự kiện người dùng như cảm ứng trên màn hình, nhấn phím để tạo nên sự tươngtác.Trong những trường hợp mà không đòi hỏi việc vẽ lại cũng như đồ họa 3D thì lớp

cơ sở View có giải pháp hiệu quả

Trong khi đó, lớp SurfaceView cung cấp một đối tượng canvas hỗ trợ việc vẽ từmột luồng xử lý nền và sử dụng openGL cho đồ họa 3D Đây là một lựa chọn tuyệt

Trang 32

với cho các điều khiển đòi hỏi đồ họa cao, cần phải cập nhật liên tục hoặc hiển thịcác đồ họa phức tạp, như game 3D.

3.5 Tạo giao diện Activity với các View

Một Activity khi chưa thiết kế sẽ khởi động với một màn hình rỗng Để thiếtlập giao diện cho màn hình rỗng này cần gọi phường thức setContentView khi everridelại phương thức onCreate Phương thức setContentView có thể nhận một tham số làresource ID hoặc một thể hiện của View Do đó, có thể định nghĩa giao diện ứng dụngbằng code hoặc tham chiếu đến resource (layout)

Nếu dùng layout resource thì sẽ tách riêng việc thiết kế giao diện và phần code

xử lý, cung cấp một khả năng thay đổi linh hoạt giao diện mà không thay đổi code bêntrong

3.6 Menu

3.6.1 Menu trong Android

Menu đưa ra một giải pháp để tăng tính tiện dụng của ứng dụng mà khôngchiếm dụng không gian trên màn hình Mỗi một Activity có riêng cho nó một menu,được hiển thị khi người dùng nhấn nút Menu

Android cũng hỗ trợ menu ngữ cảnh, nó được gán vào bất kỳ View nào bêntrong một Activity.Một menu ngữ cảnh được hiển thị khi người dùng nhấn nút D-pad,trackball, hoặc nhấn vào màn hình cảm ứng khoảng 3 giây.menu ngữ cảnh hỗ trợsubmenu, checkbox, radio button, shortcut key, và icon

Các loại menu trong android:

• Icon Menu: được kết với menu, xuất hiện ở phần dưới của màn hình thiết bịkhi nút Menu được nhấn Nó hiển thị icon và text cho các menu item hoặc cácsubmenu Icon menu hỗ trợ tạo tối đa 6 menu item, và các menu item này không thểhiển thị checkbox, radio button, hay shortcut key

Hình 2.6 Icon menu

Ngày đăng: 16/05/2024, 16:23

HÌNH ẢNH LIÊN QUAN

Hình 1.1.  Android Market vượt 10 tỷ lượt tải về - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 1.1. Android Market vượt 10 tỷ lượt tải về (Trang 5)
Hình 2.4.  Quan hệ giữa các thành phần trên 3.2 Android Widget Toolbox - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 2.4. Quan hệ giữa các thành phần trên 3.2 Android Widget Toolbox (Trang 28)
Hình 2.5. Hệ thống các view với các thông số layout được kết nối với mỗi view 3.4 Tạo các View: - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 2.5. Hệ thống các view với các thông số layout được kết nối với mỗi view 3.4 Tạo các View: (Trang 30)
Hình 6.1  Sơ đồ usecase tổng quát của hệ thống - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.1 Sơ đồ usecase tổng quát của hệ thống (Trang 52)
Hình 6.6.  Biểu đồ tuần tự cho quá trình yêu cầu trợ giúp 50/50 - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.6. Biểu đồ tuần tự cho quá trình yêu cầu trợ giúp 50/50 (Trang 55)
Hình 6.7.  Biểu đồ tuần tự cho quá trình yêu cầu trợ giúp gọi điện thoại  cho người thân - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.7. Biểu đồ tuần tự cho quá trình yêu cầu trợ giúp gọi điện thoại cho người thân (Trang 56)
Hình 6.8.  Biểu đồ tuần tự cho quá trình yêu cầu trợ giúp hỏi ý kiến khán giả - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.8. Biểu đồ tuần tự cho quá trình yêu cầu trợ giúp hỏi ý kiến khán giả (Trang 57)
Hình 6.9.  Biểu đồ tuần tự cho quá trình kiểm tra đáp án - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.9. Biểu đồ tuần tự cho quá trình kiểm tra đáp án (Trang 58)
Hình 6.12.  Giao diện trợ giúp gọi điện thoại cho người thân  Form trợ giúp hỏi ý kiến khán giả: - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.12. Giao diện trợ giúp gọi điện thoại cho người thân Form trợ giúp hỏi ý kiến khán giả: (Trang 60)
Hình 6.13 Giao diện trợ giúp hỏi ý kiến khán giả - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.13 Giao diện trợ giúp hỏi ý kiến khán giả (Trang 60)
Hình 6.14.  Giao diện nhập trong tin người chơi Form trợ giúp: - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.14. Giao diện nhập trong tin người chơi Form trợ giúp: (Trang 61)
Hình 6.16  Giao diện thông tin trợ giúp - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.16 Giao diện thông tin trợ giúp (Trang 61)
Hình 6.15 Giao diện lựa chọn bật tắt âm thanh - bài tập lớn phát triển ứng dụng cho các thiết bị di động đề tài app game ai là triệu phú
Hình 6.15 Giao diện lựa chọn bật tắt âm thanh (Trang 62)

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

TÀI LIỆU LIÊN QUAN

w