GIỚI THIỆU VỀ ANDROID VÀ CÀI ĐẶT MÔI TRƯỜNG PHÁT TRIỂN Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hình cảm ứng như điện thoại
Trang 1MỤC LỤC
BÀI 1 GIỚI THIỆU VỀ ANDROID VÀ CÀI ĐẶT MÔI TRƯỜNG PHÁT TRIỂN 4
1.1 Giới thiệu 4
1.2 Lịch sử phát triển hệ điều hành Android 5
1.3 Kiến trúc hệ điều hành Android 7
1.4 Các thành phần cơ bản của một ứng dụng Android 9
1.5 Android Application Lifecycle 17
1.6 Cài đặt Android Studio 17
1.7 Thiết bị ảo (AVD - Android Virtual Device) 30
1.8 Debugging trên Android Studio 34
1.9 Website hữu ích dành cho người lập trình 34
BÀI 2 CHƯƠNG TRÌNH HELLO WORLD 35
2.1 Tạo ứng dụng Android đầu tiên 35
2.2 Cấu trúc một ứng dụng Android 39
2.3 Chạy ứng dụng trên AVD 41
2.4 Chạy ứng dụng trên Mobile Phone 44
2.5 Một số phím tắt hữu dụng trong lập trình Android 45
BÀI 3 LÀM VIỆC VỚI LAYOUT 46
3.1 Giới thiệu về XML 46
3.1.1 XML là gì? 46
3.1.2 Cú pháp XML 46
3.2 Giới thiệu về Layout 47
3.3 Cách tạo Layout trong một dự án Android 48
3.4 Frame Layout 50
3.5 Linear Layout 52
3.6 Table Layout 53
3.7 Relative Layout 57
3.8 Absolute Layout 59
BÀI 4: THẢO LUẬN/BÀI TẬP 01: ANDROID LAYOUT 61
Trang 2BÀI 5 ACTIVITY VÀ INTENT 61
5.1 Khái niệm Activity 61
5.2 Cách tạo Activity và kết nối với Layout 62
5.3 Các kiểu xử lý sự kiện trong Android 68
5.4 Truyền dữ liệu giữa các Activity 72
BÀI 6 LÀM VIỆC VỚI TOAST, DIALOG VÀ NOTIFICATION 77
6.1 Giới thiệu 77
6.2 Toast 77
6.3 Alert Dialog 78
6.4 Promt Dialog 79
BÀI 7 CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (1) 82
7.1 Giới thiệu View 82
7.2 Nhóm điều khiển TextView 83
7.3 Nhóm điều khiển Button 84
7.4 Nhóm điều khiển TextFields 85
7.5 Điều khiển CheckBox 86
7.6 Điều khiển RadioButton 90
7.7 Điều khiển Tab 95
BÀI 8: THẢO LUẬN/BÀI TẬP 02: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (1) 101
BÀI 9 CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (2) 101
9.1 Điều khiển TimePicker 101
9.2 Điều khiển TimePickerDialog 101
9.3 Điều khiển DatePicker 102
9.4 Điều khiển DatePickerDialog 102
BÀI 10: THỰC HÀNH 01: ỨNG DỤNG HELLO WORLD 103
BÀI 11 SPINNER, LISTVIEW VÀ GRIDVIEW 103
11.1 Điều khiển Spinner 103
11.2 Điều khiển ListView 105
11.3 Điều khiển GridView 108
Trang 3BÀI 12: THỰC HÀNH 02: ANDROID LAYOUT 109
BÀI 13: THẢO LUẬN/BÀI TẬP 03: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (2) 109
BÀI 14: THỰC HÀNH 03: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (1) 109 BÀI 15 LÀM VIỆC VỚI MENU 109
15.1 Option menu 109
15.2 Context menu 114
BÀI 16: THỰC HÀNH 04: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (2) 120 BÀI 17: THẢO LUẬN/BÀI TẬP 04: CÁC ĐIỀU KHIỂN CƠ BẢN TRONG ANDROID (2) 120
BÀI 18: THỰC HÀNH 05: SPINNER, LISTVIEW, GRIDVIEW 120
BÀI 19 LẬP TRÌNH CSDL VỚI SQLITE (1) 120
19.1 Giới thiệu SQLite 120
19.1.1 SQLite là gì? 120
19.1.2 Có sử dụng được các câu lện SQL trong SQLite hay không? 120
19.1.3 Có thể sử dụng C# để thao tác với CSDL SQLite hay không? 120
19.1.4 Tạo cơ sở dữ liệu SQLite bằng cách nào? 121
19.2 Cách tạo và lưu trữ CSDL SQLite trong một project Android Studio 125
19.3 Các bước làm việc với SQLite trong Android 127
BÀI 20: THỰC HÀNH 06: LÀM VIỆC VỚI MENU VÀ CONTEXT MENU 128
BÀI 21: THẢO LUẬN/BÀI TẬP 05: LẬP TRÌNH CSDL VỚI SQLITE 128
BÀI 22: THỰC HÀNH 07: LẬP TRÌNH CSDL VỚI SQLITE 128
BÀI 23 LẬP TRÌNH CSDL VỚI SQLITE (2) 128
23.1 Các đối tượng làm việc với CSDL SQLite 128
23.2 Thao tác với CSDL SQLite 128
BÀI 24: THỰC HÀNH 08: LẬP TRÌNH CSDL VỚI SQLITE (2) 144
BÀI 25: THẢO LUẬN/BÀI TẬP 06: LẬP TRÌNH CSDL VỚI SQLITE (2) 144
Trang 4BÀI 1 GIỚI THIỆU VỀ ANDROID VÀ CÀI ĐẶT MÔI TRƯỜNG PHÁT TRIỂN
Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng Ban đầu, Android được phát triển bởi Tổng công ty Android, với sự hỗ trợ tài chính từ Google và sau này được chính Google mua lại vào năm 2005 Android ra mắt vào năm
2007 cùng với tuyên bố thành lập Liên minh thiết bị cầm tay mở: một hiệp hội gồm các công ty phần cứng, phần mềm, và viễn thông với mục tiêu đẩy mạnh các tiêu chuẩn mở cho các thiết bị di động Chiếc điện thoại đầu tiên chạy Android được bán vào tháng 10 năm 2008
Android có mã nguồn mở và Google phát hành mã nguồn theo Giấy phép Apache Chính mã nguồn mở cùng với một giấy phép không có nhiều ràng buộc đã cho phép các nhà phát triển thiết bị, mạng di động và các lập trình viên nhiệt huyết được điều chỉnh và phân phối Android một cách tự do Ngoài ra, Android còn có một cộng đồng lập trình viên đông đảo chuyên viết các ứng dụng để mở rộng chức năng của thiết bị, bằng một loại ngôn ngữ lập trình Java có sửa đổi.Vào tháng 10 năm 2012,
có khoảng 700.000 ứng dụng trên Android, và số lượt tải ứng dụng từ Google Play, cửa hàng ứng dụng chính của Android, ước tính khoảng 25 tỷ lượt
Những yếu tố này đã giúp Android trở thành nền tảng điện thoại thông minh phổ biến nhất thế giới, vượt qua Symbian vào quý 4 năm 2010, và được các công ty công nghệ lựa chọn khi họ cần một hệ điều hành không nặng nề, có khả năng tinh chỉnh, và giá rẻ chạy trên các thiết bịcông nghệ cao thay vì tạo dựng từ đầu Kết quả là mặc dù được thiết kế để chạy trên điện thoại và máy tính bảng, Android đã xuất hiện trênTV, máy chơi game và các thiết bị điện tử khác Bản chất mở của Android cũng khích lệ một đội ngũ đông đảo lập trình viên và những người đam mê sử dụng mã nguồn mở để tạo ra những dự án do cộng đồng quản lý Những dự án này bổ sung các tính năng cao cấp cho những người dùng thích tìm tòi hoặc đưa Android vào các thiết
bị ban đầu chạy hệ điều hành khác
Trang 51.2 Lịch sử phát triển hệ điều hành Android
Tổng công ty Android (Android, Inc.) được thành lập tại Palo Alto, California vào tháng 10 năm 2003 bởi Andy Rubin (đồng sáng lập công ty Danger), Rich Miner (đồng sáng lập Tổng công ty Viễn thông Wildfire), Nick Sears (từng là Phó giám đốc T-Mobile) và Chris White (trưởng thiết kế và giao diện tại WebTV) để phát triển, theo lời của Rubin, "các thiết bị di động thông minh hơn có thể biết được vị trí và sở thích của người dùng" DÙ những người thành lập và nhân viên đều là những người có tiếng tăm, Tổng công ty Android hoạt động một cách âm thầm, chỉ tiết lộ rằng họ đang làm phần mềm dành cho điện thoại di động Trong năm đó, Rubin hết kinh phí Steve Perlman, một người bạn thân của Rubin, mang cho ông 10.000 USD tiền mặt nhưng từ chối tham gia vào công ty
Google mua lại Tổng công ty Android vào ngày 17 tháng 8 năm 2005, biến nó thành một bộ phận trực thuộc Google Những nhân viên của chủ chốt của Tổng công
ty Android, gồm Rubin, Miner và White, vẫn tiếp tục ở lại công ty làm việc sau thương vụ này Vào thời điểm đó không có nhiều thông tin về Tổng công ty, nhưng nhiều người đồn đoán rằng Google dự tính tham gia thị trường điện thoại di động sau bước đi này Tại Google, nhóm do Rubin đứng đầu đã phát triển một nền tảng thiết bị
di động phát triển trên nền nhân Linux Google quảng bá nền tảng này cho các nhà sản xuất điện thoại và các nhà mạng với lời hứa sẽ cung cấp một hệ thống uyển chuyển và
có khả năng nâng cấp Google đã liên hệ với hàng loạt hãng phần cứng cũng như đối tác phần mềm, bắn tin cho các nhà mạng rằng họ sẵn sàng hợp tác với các cấp độ khác nhau
Ngày càng nhiều suy đoán rằng Google sẽ tham gia thị trường điện thoại di động xuất hiện trong tháng 12 năm 2006 Tin tức của BBC và Nhật báo phố Wall chú thích rằng Google muốn đưa công nghệ tìm kiếm và các ứng dụng của họ vào điện thoại di động và họ đang nỗ lực làm việc để thực hiện điều này Các phương tiện truyền thông truyền thống lẫn online cũng viết về tin đồn rằng Google đang phát triển một thiết bị cầm tay mang thương hiệu Google Một vài tờ báo còn nói rằng trong khi
Trang 6Google vẫn đang thực hiện những bản mô tả kỹ thuật chi tiết, họ đã trình diễn sản phẩm mẫu cho các nhà sản xuất điện thoại di động và nhà mạng Tháng 9 năm 2007, InformationWeek đăng tải một nghiên cứu của Evalueserve cho biết Google đã nộp một số đơn xin cấp bằng sáng chế trong lĩnh vực điện thoại di động
Ngày 5 tháng 11 năm 2007, Liên minh thiết bị cầm tay mở (Open Handset Alliance), một hiệp hội bao gồm nhiều công ty trong đó có Texas Instruments, Tập đoàn Broadcom, Google, HTC, Intel,LG, Tập đoàn Marvell Technology, Motorola, Nvidia, Qualcomm, Samsung Electronics, Sprint Nextel và T-Mobile được thành lập với mục đích phát triển các tiêu chuẩn mở cho thiết bị di động Cùng ngày, Android cũng được ra mắt với vai trò là sản phẩm đầu tiên của Liên minh, một nền tảng thiết bị
di động được xây dựng trên nhân Linux phiên bản 2.6 Chiếc điện thoại chạy Android đầu tiên được bán ra là HTC Dream, phát hành ngày 22 tháng 10 năm 2008 Biểu trưng của hệ điều hành Android mới là một con rôbốt màu xanh lá cây do hãng thiết kế Irina Blok tại California vẽ
Từ năm 2008, Android đã trải qua nhiều lần cập nhật để dần dần cải tiến hệ điều hành, bổ sung các tính năng mới và sửa các lỗi trong những lần phát hành trước Mỗi bản nâng cấp được đặt tên lần lượt theo thứ tự bảng chữ cái, theo tên của một món
ăn tráng miệng; ví dụ như phiên bản 1.5 Cupcake (bánh bông lan nhỏ có kem) tiếp nối bằng phiên bản 1.6 Donut (bánh vòng) Phiên bản mới nhất là 4.2 Jelly Bean (kẹo dẻo) Vào năm 2010, Google ra mắt loạt thiết bị Nexus—một dòng sản phẩm bao gồm điện thoại thông minh và máy tính bảng chạy hệ điều hành Android, do các đối tác phần cứng sản xuất HTC đã hợp tác với Google trong chiếc điện thoại thông minh Nexus đầu tiên, Nexus One Kể từ đó nhiều thiết bị mới hơn đã gia nhập vào dòng sản phẩm này, như điện thoại Nexus 4 và máy tính bảng Nexus 10, lần lượt do LG và Samsung sản xuất Google xem điện thoại và máy tính bảng Nexus là những thiết bị Android chủ lực của mình, với những tính năng phần cứng và phần mềm mới nhất của Android
Liên minh các thiết bị cầm tay:
Ngày 5 tháng 11 năm 2007, Liên minh thiết bị cầm tay mở rộng (Open Handset Alliance), một côngxoocxiom bao gồm nhiều công ty trong đó có Texas Instruments, Tập đoàn Broadcom, Google, HTC, Intel, LG, Tập đoàn Marvell Technology, Motorola, Nvidia,Qualcomm, Samsung Electronics, Sprint Nextel và T-Mobile được thành lập với mục đích phát triển các tiêu chuẩn mở cho thiết bị di động Cùng với sự thành lập của OHA, họ cũng giới thiệu sản phẩm Android đầu tiên Nó là một thiết bị
di động có hệ điều hành dựa trên nhân Linux phiên bản 2.6
Trang 7Ngày 9 tháng 12 năm 2008, thêm 14 thành viên mới gia nhập dự án Android được công bố, gồm có ARM Holdings, Atheros Communications, Asustek Computer Inc, Garmin Ltd,Softbank, Sony Ericsson, Toshiba Corp, và Vodafone Group Plc
Một số phiên bản hệ điều hành Android:
Kiến trúc Android gồm 4 phần chính, mô hình dưới đây sẽ cho ta cái nhìn tổng quan về kiến trúc Android Nhân của Android được phát triển dựa vào Kernel Linux 2.6 Mỗi tầng trong kiến trúc Android hoạt động dựa vào tầng bên dưới nó
Trang 8Kernel Linux layer:
Dựa trên Kernel Linux version 2.6 bởi nó cung cấp các trình điều khiển các thiết bị phần cứng(driver), quản lý tiến trình, quản lý tài nguyên, bảo mật, như sau:
- Media Libraries – mở rộng từ PacketVideo’s OpenCORE Hỗ trợ nhiều định dạng video và image phổ biến: MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
- Surface Manager – quản lý việc hiển thị và kết hợp đồ họa 2D và 3D
- LibWebCore – dùng webkit engine cho việc render trình duyệt mặc định của HDH Android browser và cho dạng web nhúng (như HTML nhúng) Thư viện đồ họa 2D và 3D
Trang 9- SQLite – quản lý database của ứng dụng
Runtime Android:
- Gồm một tập hợp các thư viện Java Core
- Máy ảo Dalvik thực thi các file định dạng dex (Dalvik Excutable)
- Mỗi ứng dụng Android chạy trên tiến trình riêng của máy ảo Dalvik Dalvik được viết để chạy nhiều máy ảo cùng một lúc một cách hiệu quả trên cùng một thiết bị
- Activity Manager - quản lý vòng đời của các ứng dụng
Applications: Là các ứng dụng mà lập trình viên phát triển như Browser, Media
1.4.1 Activity:
Một activity thể hiện một giao diện đồ họa người dùng Ví dụ một activity có thể biểu diễn một danh sách các menu item để người dùng có thể chọn và có thể hiển thị ảnh cùng với tiêu đề Một ứng dụng gửi tin nhắn văn bản có thể có một hoạt động
là hiển thị một danh sách các liên hệ để gửi tin nhắn tới, hoạt động thứ hai là viết tin nhắn tới liên hệ được chọn, các hoạt động khác nữa là xem lại tin nhắn cũ hay thay đổi cài đặt Mặc dù chúng làm việc cùng nhau để tạo thành một giao diện người dùng, mỗi activity độc lập với những cái khác Mỗi activity là một lớp con của lớp cơ sở Activity
Một ứng dụng có thể gồm chỉ một activity hay nhiều activity Thông thường, một trong số các activity được đánh dấu như là activity đầu tiên phải được trình diễn tới người dùng khi ứng dụng được khởi động Chuyển từ một activity sang activity khác bằng cách cho activity hiện thời khởi động activity kế tiếp
Trang 10Mỗi activity đưa ra một cửa sổ mặc định để hiển thị giao diện Thông thường, cửa sổ sẽ lấp đầy màn hình, nhưng nó có thể nhỏ hơn màn hình và nằm trên các cửa sổ khác Một activity có thể sử dụng cửa sổ bổ sung - ví dụ như một pop-up dialog gọi cho một đáp ứng người dùng ở giữa của activity, hay một cửa sổ biểu diễn những cho người dùng với thông tin quan trọng khi họ chọn một item cụ thể trên màn hình
Nội dung trực quan của cửa sổ được cung cấp bởi một cây phân cấp các đối tượng view dẫn xuất từ lớp View Mỗi view điều khiển một khoảng hình chữ nhật cụ thể bên trong cửa sổ View cha chứa và tổ chức bố cục cho các view con Các view con vẽ trong hình chữ nhật mà chúng điều khiển và đáp ứng lại các hành động người dùng trực tiếp ở khoảng trống này Do đó, các view là nơi mà các tương tác của activity với người dùng diễn ra Ví dụ một view có thể hiển thị một hình ảnh nhỏ và khởi tạo một hoạt động khi người dùng nhấn vào hình ảnh đó Android có một số view
đã xây dựng sẵn mà bạn có thể sử dụng – gồm có các buttons, text view, editext, scroll bars, menu items, check boxes …
Lớp cơ sở Activity định nghĩa một loạt các sự kiện mà điều chỉnh vòng đời của một hoạt động Class Activity định nghĩa các sự kiện sau đây:
- onCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên
- onStart(): Được gọi khi hoạt động trở nên hữu hình so với người dùng
- onResume(): Được gọi khi hoạt động bắt đầu tương tác với người sử dụng
- onPause(): Được gọi để dừng các hoạt động hiện tại và nối lại các hoạt động trước đó
- onStop(): Được gọi khi hoạt động không còn hiển thị với người dùng
- onDestroy(): Được gọi trước khi hoạt động bị phá hủy bởi hệ thống (bằng tay hoặc bằng hệ thống để bảo tồn bộ nhớ)
- onRestart(): Được gọi khi hệ thống đã được dừng lại và khởi động lại một lần
nữa
Vòng đời hoạt động của Activity
- Toàn bộ thời gian sống của một activity xảy ra giữa lời gọi hàm onCreate() và onDestroy() Activity của bạn nên thực hiện thiết đặt toàn cục “global setup” như định nghĩa layout trong hàm onCreate(), và trả lại toàn
bộ tài nguyên trong phương thức onDestroy() Ví dụ, nếu một activity có một tuyến đang chạy ngầm để download dữ liệu, nó có thể tạo ra tuyến đó trong phương thức onCreate() và dừng tuyến trong phương thức onDestroy()
- Thời gian sống thật (visible lifetime) của một activity xảy ra giữa lời gọi
phương thức onStart() và onStop() Trong suốt thời gian này, người dùng có thể nhìn thấy activity trên màn hình và tương tac với chúng.Ví dụ,
Trang 11onStop() được gọi khi một activity mới bắt đầu.Giữa hai phương thức này, bạn có thể quản lý các nguồn tài nguyên cần thiết để hiển thị activity tới người dùng.Ví dụ, bạn đăng ký một BroadcastReceiver trong onStart() để giám sát thay đổi tác động tới giao diện của, và hủy đăng ký trong phương onStop() khi người dùng không thấy giao diện hiển Activity xuất hiện và ẩn với người dùng
- Thời gian chờ foreground lifetime) của một activity xảy ra giữa hai lời
gọi onResume() và onPause() Trong suốt thời gian này, activity là nền cho các activity khác trên màn Một activity có thể thường xuyên chuyển trạng thái thành trạng thái chờ và hoạt – ví dụ, onPause() được gọi khi thiết bị phần cứng ở trạng thái ngủ (sleep) hoặc một hộp thoại xuất hiện Bởi vì trạng thái này có thể xảy ra thường xuyên nên mã lệnh trong hai phương thức này nên được viết cẩn thận để tăng tốc độ chuyển giữa các chế độ
1.4.2 Services:
Một service không có giao diện trực quan, nó chạy trên nền trong một khoảng thời gian không xác định Ví dụ một service có thể chơi nhạc nền, hay nó nạp dữ liệu
Trang 12trên mạng hay tính toán cái gì đó và cung cấp kết quả cho activity cần đến nó Mỗi service mở rộng từ lớp cơ sở Service
Một ví dụ cổ điển là media player chơi các bài hát từ một danh sách Ứng dụng player có thể có một hay hai activity cho phép người dùng chọn bài hát và bắt đầu chơi Tuy nhiên, music playback không tự nó được xử lý bởi một activity bởi vì người dùng sẽ mong muốn chơi tiếp nhạc khi họ rời khỏi player và làm cái gì đó khác Để tiếp tục chơi nhạc, media player activity có thể khởi động một service chạy trên nền
Hệ thống sẽ giữ cho music playback service chạy thậm chí khi activity khởi động nó rời khỏi màn hình
Trong khi kết nối, bạn có thể giao tiếp với dịch vụ thông qua giao diện mà service đó trưng ra Ví dụ như trong music service, giao diện này có thể cho phép người dùng pause, rewind, stop và restart lại playback
Giống như các activity và các thành phần khác khác, service chạy trong thread chính của tiến trình ứng dụng Vì thế chúng không thể chặn những thành phần khác hay giao diện người dùng, chúng thường tạo ra các thead khác cho các nhiệm vụ hao tốn thời gian
1.4.3 Content Provider:
Trang 13Content providers quản lý truy cập tới dữ liệu Chúng đóng gói dữ liệu, và cung cấp cơ chế cho phép định nghĩa bảo mật dữ liệu Content providers là giao diện chuẩn kết nối dữ liệu trong một tiến trình cùng với mã nguồn chạy trong các tiến trình khác
Khi bạn muốn kết nối tới dữ liệu trong content provider, bạn sử đối tượng ContentResolver trong ứng dụng Context để giao tiếp với provider như một máy khách Đối tượng ContentResolver giao tiếp với đối tượng, một thể hiện của lớp triên khai từ giao diện ContentProvider Đối tượng provider nhận dữ liệu yêu cầu từ clients,
xử lý yêu cầu và trả lại kết quả
Ban không cần phát triển provider của riêng bạn nếu không muốn chia sẻ dữ liệu với các ứng dụng khác Tuy nhiên, bạn cần provider của mình để cung cáp những gợi ý cho tìm kiếm trong ứng dụng của bạn Bạn luôn cần provider vì nếu bạn muốn sao chép và dán dữ liệu phức tạp hoặc các tệp từ ứng dụng của bạn sang ứng dụng khác
Android tự nó đã bao gồm content providers để quản lý dữ liệu như audio, video, images, và các thông tin liên hệ của bạn Bạn có thể nhìn thấy một vài thông tin được liệt kê bằng cách sử gói android.provider.Các provider này có thể kết nối tới các ứng dụng Android khác với một số hạn chế nhất đinh
Một số chủ đề quan trọng của Content Provider:
- Content Provider Basics: Làm thế nào để truy cập dữ liệu trong một content provider khi dữ liệu được tổ chức dạng bảng
- Creating a Content Provider: Làm thế nào để tạo content provider của riêng
Trang 14Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ thông báo nào mà nó cho là quan trọng Tất cả các receiver mở rộng từ lớp cơ sở BroadcastReceiver
Broadcast Receiver không hiển thị một giao diện người dùng Tuy nhiên chúng
có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, hay chúng có thể sử dụng NotificationManager để cảnh báo người dùng Notifications có thể lấy sự chú ý của người dùng bằng nhiều cách như lóe sáng đèn sau, rung, tạo ra âm thanh, Chúng thường tạo một biểu tượng trong thanh trạng thái, nhờ đó người dùng có thể mở để lấy thông điệp
1.4.5 Intents và Intent filter:
Ba thành phần cơ bản của một ứng dụng activities, services, and broadcast receivers các thành phần này được kích hoạt thông qua các thông điệp được gọi
là intents Thông điệp Intent là cơ sở cho việc truy xuất giữa các thành phần trong một hoặc các ứng dụng khác nhau Một đối tượng Intent là một cấu trúc dữ liệu bị động giữ một mô tả trừu tượng của một hành động thực thi Có một vài cơ chế cho việc gửi intent tới từng thành phần:
- Một đối tượng Intent được thông qua Context.startActivity() hoặc Activity.startActivityForResult() để khởi động một activity hoặc lấy một activity đã tồn tại để làm một việc gì đó (Cũng có thể sử dụng Activity.setResult() để trả thông tin tới activity được gọi bằng phương thức startActivityForResult().)
- Một đối tượng Intent được sử dụng thông qua phương thức Context.startService() để khởi tạo một service hoặc gửi một yêu cầu mới tới một service khác Tương tự, một intent có thể được gửi thông qua phương thức Context.bindService() để tạo một kết nối giữa các thành phần đang gọi và một service
- Đối tượng Intent được gửi tới các phương thức (như Context.sendBroadcast(),Context.sendOrderedBroadcast(),
hoặc Context.sendStickyBroadcast()) được gửi tới toàn bộ các service đang lắng nghe
Trong mỗi trường hợp, Android tìm các activity, service phù hợp hoặc thiết đặt broadcast receivers để trả lời tới intent, khởi tạo chúng nếu cần
Broadcast intents chỉ được gửi tới broadcast receivers, không bao giờ tới activities hoặc services Một intent thông qua phương thức startActivity() chỉ được gửi tới một activity, không bao giờ tới một service hoặc broadcast receiver
Trang 15To inform the system which implicit intents they can handle, activities, services, and broadcast receivers can have one or more intent filters Each filter describes a capability of the component, a set of intents that the component is willing
to receive It, in effect, filters in intents of a desired type, while filtering out unwanted intents — but only unwanted implicit intents (those that don't name a target class) An explicit intent is always delivered to its target, no matter what it contains; the filter is not consulted But an implicit intent is delivered to a component only if it can pass through one of the component's filters
Để thông báo cho hệ thống ngầm ý đồ mà họ có thể xử lý, activity, service, broadcast receivers có thể có một hoặc nhiều bộ lọc Mỗi bộ lọc mô tả một khả năng của các thành phần, một tập hợp các intent mà thành phần đó là sẵn sàng nhận , Các
bộ lọc các loại intents mong muốn, trong khi lọc sẽ loại bỏ những intent
1.4.6 Process và Thread:
Process: Mỗi ứng dụng là một tiến trình có tài nguyên và không gian bộ nhớ riêng
Trong một tiến trình có thể có một hoặc nhiều tuyến
Thread: Thông thường dùng Thread để xử lý các code xử lý nặng, hoặc mất thời gian
có thể gây chậm chương trình hoặc giao diện bị block
Thread khá thông dụng và trong Android dùng lớp Thread của Java Mặc định, mỗi ứng dụng chạy trong một process và code được thực thi trong thread chính của process đó
Nếu code xử lý quá lâu, không kịp phản hồi lại các sự kiện người dùng trong 5 giây thì sẽ xuất hiện dialog “Application is not responding” và người dùng có thể force close ứng dụng ngay lập tức
Dù không bị đóng ứng dụng thì việc ứng dụng bị chậm là khó chấp nhận Code minh họa triển khai một Thread:
Trang 16Thread thread = new Thread() {
@Override
public synchronized void start() {
// Khởi tạo các đối tượng cần thiết tại đây
super.start();
}
@Override
public void run() {
// code xử lý chính của thread trong này
Trang 171.5 Android Application Lifecycle
1.6.1 Chuẩn bị các công cụ để cài đặt môi trường phát triển (lập trình)
Có nhiều công cụ để tạo ra một sản phẩm Android Vấn đề là bạn chọn công cụ nào?
- Sử dụng Visual Studio (với ngôn ngữ C# mà bạn quen thuộc)
- Sử dụng Eclipse (Sử dụng ngôn ngữ Java)
- Sử dụng Android Studio (Sử dụng ngôn ngữ Java)
Trong khuôn khổ của môn học thì các bài học và demo sẽ được thực hiện trên Android Studio Tuy nhiên có thể một số máy cấu hình không mạnh chạy Eclipse hay ADT sẽ phù hợp hơn là Android Studio vì vậy trong bài học này mình sẽ hướng dẫn nhanh cài đặt Eclipse hay ADT Còn để cài đặt công cụ lập trình Android trên Visual Studio các bạn chỉ cần Google với từ khóa: "lập trình android trên visual studio" là xong ☺
Trang 181.6.2 Cài đặt Android Studio
Trước hết download bộ cài đầy đủ Android Studio tại link (không phân biệt OS 32 hay
64 bit): http://developer.android.com/sdk
Sau khi tải về thành công, bạn chạy tập tin android-studio-bundle, hộp thoại Welcome
to Setup Android Studio sẽ xuất hiện:
Trang 19Nhấn Next để tiếp tục Nếu hệ thống không phát hiện ra JDK trong máy tính của bạn, một hộp thoại yêu cầu chỉ rõ đường dẫn hoặc cài đặt JDK xuất hiện
Nếu đã có JDK, bạn vui lòng trỏ đường dẫn đến nơi cài đặt Sau đó nhấn Next Chưa có hãy nhấn vào link xanh và download về Hộp thoại lựa chọn cấu hình cài đặt
sẽ mở ra
Bạn vui lòng check như hình trên để tránh thiếu sót về sau Sau đó nhấn Next
để tiếp tục Hộp loại thông báo các điều khoản và một số lưu ý khi sử dụng Android Studio xuất hiện
Trang 20Nhấn I Agree để tiếp tục Hộp thoại yêu cầu chọn nơi cài đặt Android Studio và
Android SDK xuất hiện
Bạn nên để đường dẫn mặc định như trên, sau đó nhấn Next để tiếp tục quá
trình cài đặt Hộp thoại chọn Start Menu xuất hiện, chọn Android Studio và nhấn vào
Installl để tiếp tục quá trình cài đặt
Trang 21Chờ đợi quá trình cài đặt
Khi quá trình cài đặt hoàn tất, nhấn Next để tiếp tục
Trang 22Hộp thoại cuối cùng của quá trình cài đặt xuất hiện
Nhấn check vào Start Android Studio, và Finish
Trong quá trình khởi động, nếu có thông báo thiếu JDK, bạn vui lòng cài JDK 7 bản x64 và khởi động lại Android Studio
Trang 23Ở lần khởi động đầu tiên, một hộp thoại import bản Android Studio cũ xuất hiện, nếu bạn cài đặt mới, vui lòng chọn như hình dưới
Nhấn OK và tiếp tục Ở lần đầu tiên, bạn sẽ phải update một vài thứ cho quá
trình làm việc sau này Vui lòng chờ đợi cho đến khi hoàn tất
Đợi một lúc và nhấn tiếp Finish Quá trình download file bắt đầu
Trang 24Khi hoàn tất quá trình download, nhấn Finish để kết thúc Vậy là bạn đã hoàn
Trang 25Bạn mở Android SDK Manager lên - theo như đường dẫn ở đầu bài là:
extras\intel\Hardware_Accelerated_Execution_Manager
Sau đó chọn cài đặt file intelhaxm-android.exe
Nếu hộp thoại sau xuất hiện:
Điều này có nghĩa máy tính của bạn đang bị xung đột giữa các công nghệ ảo
hóa với nhau, mà trong trường hợp này là Hyper-V của Microsoft Để tắt Hyper-V,
Trang 26bạn vào Control Panel > Program and Features > Turn Windows feature on or off
và tiến hành tắt Hyper-V như hình bên dưới:
Sau đó bạn khởi động lại máy và tiến hành chạy lại file cài đặt Intel HAXM Hộp thoại thông báo cài đặt Intel HAXM xuất hiện
Nhấn Next để tiếp tục
Trang 27Cấu hình nên để mặc định của hệ thống và nhấn Next
Nhấn Install và chờ đợi quá trình cài đặt
Trang 28↓
Nhấn Finish để kết thúc quá trình cài đặt Bây giờ bạn có thể build lại project
thành công
Trang 29Quản lý Android SDK Manager:
Để quản lý SDK Manager (các bộ thư viện mà chúng ta dùng lập trình) chúng
ta vào: Tools Android SDK Manager hoặc nhấn biểu tượng SDK Manager
ngoài Toolbar
↓
Chúng ta muốn lập trình trên API nào thì chúng ta check chọn và nhấn
Install
Trang 301.7 Thiết bị ảo (AVD - Android Virtual Device)
Máy ảo Android dùng để chạy các ứng dụng Android trong trường hợp bạn không có thiết bị Android thật để chạy Để tạo máy ảo Android bạn có thể làm theo thứ tự:
Vào Menu Tool Android AVD Manager hoặc nhấn vào biểu tượng AVD manager trên Toolbar
AVD Manager hiện lên các máy ảo hiện có của Android Studio Để tạo một
máy ảo mới bạn chỉ cần nhấn vào Create Vitual Device và làm theo hướng dẫn:
Trang 31↓
↓
↓
Trang 32↓
↓
Trang 33↓
Trang 341.8 Debugging trên Android Studio
Nhiều người chuyển từ J2SE hoặc J2ME sang Android sẽ ngạc nhiên vì câu
lệnh debug kinh điển System.out.println() không còn in ra trên cửa sổ Console nữa
Google đã thay thế nó bằng Logcat, một cửa sổ ghi lại toàn bộ hoạt động của hệ điều hành Để mở Logcat, trước tiên các bạn chọn Window Open Perspective Debug Nếu ko thấy option Debug thì chọn Other và tìm Debug trong cửa sổ mới hiện ra Sau
đó chọn tab Debug mới xuất hiện ở góc trên bên phải của Eclipse (xem hình) Theo kinh nghiệm của mình thì tốt nhất là Maximize Logcat ra luôn cho dễ quan sát
Cảm nhận ngày xưa khi mới sử dụng Logcat là rối và khó dùng Nhưng càng về sau mình càng quen và thấy nó tiện hơn Console nhiều, vì Console chỉ đưa ra thông báo do chúng ta gọi, còn Logcat thì đưa cả luôn những thông báo của hệ điều hành, giúp chúng ta nắm được hệ điều hành đang làm gì, gọi đến cái gì, khởi chạy những gì…
Một số website dành cho người lập trình Android:
- Android developer website: http://developer.android.com
- Java2S: http://www.java2s.com/Code/Android/CatalogAndroid.htm
- Google: Google is all
- Ebook: Android Advanced Tutorial
Trang 35BÀI 2 CHƯƠNG TRÌNH HELLO WORLD
Khởi động Android Studio, trong hộp thoại Welcome to Android Studio, chọn
Start a new Android Studio project để tạo 1 project mới
Hộp thoại đặt tên ứng dụng và tên domain xuất hiện
Trang 36Trong hộp thoại này:
- Application name: là tên của ứng dụng
- Company Domain: là tên domain của công ty Kết hợp với tên của ứng dụng
để tạo ra package Cái này sử dụng để upload ứng dụng của bạn lên store
- Pakage name: Tên của gói ứng dụng của bạn Dùng để phân biệt khi với các
gói khác trên store
- Project location: Nơi lưu trữ ứng dụng của bạn (thường mình để khác ổ C)
Sau khi nhập xong thông tin (bao gồm tên ứng dụng, domain và nơi lưu project), nhấn Next để tiếp tục Hộp thoại chọn device mà bạn muốn phát triển ứng dụng xuất hiện
Bạn chọn như hình trên nếu muốn phát triển ứng dụng trên phone và tablet Sau
đó nhấn Next để tiếp tục
Trang 37Chọn Blank Activity và nhấn Next Hộp thoại nhập thông tin của Activity xuất
hiện
Trong hộp thoại này
- Activity Name: Tên lớp lưu giữ mã nguồn
- Layout Name: Tên file XML làm giao diện cho Activity Name
- Title: Tên tiêu đề, sẽ hiển thị khi kích hoạt activity trên device
- Menu Resource Name: Tên file xml để tạo menu cho phần mềm
Trang 38Sau khi nhập đầy đủ thông tin, nhấn Finish để kết thúc Chờ building project
Quá trình tạo project đến đây là kết thúc
Giao diện ứng dụng HelloWorld khi mới tạo ra:
Trang 392.2 Cấu trúc một ứng dụng Android
Về cơ bản giao diện một Project trong Android có thể chia làm 6 vùng cơ bản theo chức năng:
Vùng 1: Hiển thị cấu trúc của một ứng dụng Android
Chức năng một số thư mục/ file trong cấu trúc này:
- manifests: là file xml lưu trữ các thông tin cấu hình của ứng dụng file này
tương tự file web.config trong lập trình web Một ứng dụng Android muốn truy cập Internet, làm việc với SD card…cần phải được cấu hình trong manifests
Trang 40o tab application: định nghĩa thành phần của ứng dụng sử dụng
o android:icon: trỏ đến file ảnh icon của ứng dụng Ví dụ trong hình trên
icon đang sử dụng có tên là ic_launcher được đặt trong thư mục drawable (tùy thuộc loại màn hình mà ứng dụng sẽ load file có tên ic_launcher trong thư mục drawable-… tương ứng (như đã mô tả ở trên)
o android:label: nhãn của ứng dụng, trỏ đến thành phần có tên app_name
trong file string.xml
o android:theme: định nghĩa kiểu giao diện ứng dụng, trỏ đến thành phần
có tên AppThêm trong file stypes.xm
o tag Activity: định nghĩa các activity của ứng dụng Trong bài kế tiếp
sau sẽ nói kỹ về tag này và các thành phần trong tag này
o android:name: tên của Activity khởi tạo chạy ứng dụng Trong ứng
dụng bài 2, Activity này có tên là MainActivity, thực chất là một file java Chúng ta sẽ đi kỹ hơn về Activity trong những bài kế tiếp
- Thư mục java: Thư mục này chứa các source nguồn của ứng dụng Bạn có
thể thêm bao nhiêu package và các class java vào trong các package này tùy thích
- Thư mục res\drawable: Lưu trữ các file ảnh có cùng nội dung nhưng có độ
phân giải và kích thước khác nhau, phục vụ cho mục đích hiển thị trên các loại màn hình có kích thước và độ phân giải khác nhau sao cho trông ứng dụng luôn hiển thị giống nhau trên các loại màn hình này Chúng ta sẽ đi sâu tìm hiểu về các thư mục này trong các bài học kế tiếp
- Thư mục res\layout: Lưu trữ layout của ứng dụng dưới định dạng xml
Chúng ta sẽ đi sâu tìm hiểu các loại layout trong bài học kế tiếp