chương 1. LÀM VIỆC VỚI TÀI NGUYÊN TRÊN MẠNG INTERNET .1 Kết nối vào mạng Internet. 28 & Bài tập thực hành số 15 .2 Thực hiện các thao tác trên mạng với tiến trình chạy ngầm sử dụng Asynchronous Tasks và trích xuất dữ liệu từ Webservice. 30 & Bài tập thực hành số 16.
30 & Bài tập thực hành số 17. 30 & Bài tập thực hành số 18 .3 Sử dụng Download Manager. 35 & Bài tập thực hành số 19 .4 Câu hỏi và bài tập chương 2. SỬ DỤNG CONTENT PROVIDER, BROADCAST RECEIVER, SERVICE VÀ FIREBASE .1 Sử dụng Intent để gửi các sự kiện Broadcast và thực hiện chúng.
39 & Bài tập thực hành số 20. 41 & Bài tập thực hành số 21 .2 Xây dựng và sử dụng các Receiver. 46 & Bài tập thực hành số 22 .3 Tạo các Content Provider .4 Sử dụng các Content Provider .1 Sử dụng Content Provider tự xây dựng. 54 3 & Bài tập thực hành số 23 .2 Sử dụng Content Provider có sẵn trong Android.
55 & Bài tập thực hành số 24. 56 & Bài tập thực hành số 25. 56 & Bài tập thực hành số 26. 58 & Bài tập thực hành số 27 .5 Chia sẻ file dùng File Provider.
60 & Bài tập thực hành số 28 .6 Service và các ứng dụng chạy ngầm. 62 & Bài tập thực hành số 29. 63 & Bài tập thực hành số 30 .7 Lập lịch cho ứng dụng chạy ngầm. 69 & Bài tập thực hành số 31.
75 & Bài tập thực hành số 32 .9 Kết nối Firebase với ứng dụng Android. 77 & Bài tập thực hành số 33. 80 & Bài tập thực hành số 34. 82 & Bài tập thực hành số 35 .10 Câu hỏi và bài tập chương 3.
ĐIỀU KHIỂN MÀN HÌNH TƯƠNG TÁC VÀ CẢM BIẾN .2 Xử lý một số dạng cơ bản của màn hình tương tác. 87 & Bài tập thực hành số 36. 88 & Bài tập thực hành số 37 .3 Liệt kê các loại cảm biến trên điện thoại. 91 & Bài tập thực hành số 38 .4 Sử dụng Sensor Framework đọc dữ liệu từ cảm biến và ra quyết định.
91 & Bài tập thực hành số 39 .5 Câu hỏi và bài tập chương 4. BẢN ĐỒ TRỰC TUYẾN MAP VÀ LOCATION .2 Kỹ thuật lấy vị trí hiện tại. 95 & Bài tập thực hành số 40 .3 Viết ứng dụng trên bản đồ trực tuyến Map. 96 & Bài tập thực hành số 41 .4 Câu hỏi và bài tập chương 5.
100 TÀI LIỆU THAM KHẢO. 102 4 DANH MỤC CÁC TỪ VIẾT TẮT STT Từ viết tắt Cụm từ gốc Ghi chú 1 dp density-independent pixels 2 dpi dots per inch 3 sp scalable pixels 4 MIME Multipurpose Internet Mail Extensions 5 FCM Firebase Cloud Messaging 5 DANH MỤC BẢNG BIỂU SỐ LIỆU VÀ HÌNH VẼ Hình 1.1 Bài tập thực hành số 1 .1 Giao diện ứng dụng hỗ trợ Multi-Orientation .2 Tạo biến thể cho giao diện ứng dụng theo chiều ngang .3 Giao diện ứng dụng khi xoay theo chiều ngang .4 Thiết kế giao diện hỗ trợ nhiều loại màn hình .5 Phân loại màn hình theo mật độ điểm ảnh .6 Lựa chọn hỗ trợ nhiều màn hình theo mật độ điểm ảnh .7 Lựa chọn một chế độ màn hình để tạo layout .1 Kết quả tuỳ biến thanh ActionBar .1 Màn hình giao diện ứng dụng WeatherForecast .1 Android tìm và đưa ra danh sách ứng dụng .2 Màn hình của PersonPickerActivity .3 Giao diện ứng dụng broadcast intent .4 Activity trong ứng dụng Contact được gọi .5 Activity được gọi khi tap “Pick a Person” .6 Kết quả trả về từ “Pick an Contact” và “Pick a Person” .1 Cấu hình Content Provider.1 Mối quan hệ các bảng dữ liệu trong Danh bạ điện thoại .1 Màn hình giao diện ứng dụng MusicPlayer .2 Tạo một Service mới cho ứng dụng MusicPlayer.1 Màn hình giao diện ứng dụng xử lý ảnh .2 Vòng đời của view model trong Android .1 Mở công cụ Firebase Assistant trong Android Studio .2 Thông báo kết nối Firebase thành công .3 Ví dụ lưu đối tượng sinh viên trên firebase .4 Lưu bảng sinh viên trên Firebase .5 Đăng ký tài khoản Firebase cho ứng dụng.1 Ứng dụng Bài thực hành 38 .1 Ứng dụng Compass, bài tập 6 .1 Tạo mã API Key cho bản đồ trực tuyến .2 Hiển thị bản đồ trực tuyến .3 Ứng dụng hoàn thiện Bài tập TH 41. 99 6 GIÁO TRÌNH HỌC PHẦN Tên học phần: LẬP TRÌNH DI ĐỘNG 2 Mã học phần: CNC107315 Vị trí, tính chất, ý nghĩa và vai trò của học phần: - Vị trí: Là học phần chuyên ngành tự chọn, ngành Công nghệ Thông tin. Học phần cần được học sau Lập trình di động 1 và Cơ sở dữ liệu.
- Tính chất: Học phần nhằm giúp sinh viên có khả năng hoàn thiện, tìm hiểu sâu hơn các kiến thức và kỹ năng đã học về lập trình di động; đồng thời hiểu và vận dụng thêm một số chuyên đề nâng cao vào việc phát triển ứng dụng vừa và nhỏ trên điện thoại di động Android. - Ý nghĩa và vai trò của môn học/mô đun: Thông qua các hoạt động học tập được tổ chức, sinh viên rèn luyện nâng cao khả năng tự học, kỹ năng làm việc trong nhóm phát triển phù hợp với yêu cầu của doanh nghiệp, kỹ năng thuyết trình một vấn đề, kỹ năng viết báo cáo theo mẫu và tính chủ động tích cực trong mọi tình huống. Đặc biệt, trong suốt quá trình học tập và thực hiện dự án sản xuất của mình, sinh viên cũng rèn luyện các kỹ năng nghề nghiệp tích hợp từ việc hình thành ý tưởng, yêu cầu của dự án đến phân tích, thiết kế, cài đặt, kiểm thử và vận hành phần mềm làm được; qua đó thấm dần các quy tắc, quy định, hành vi mà một lập trình viên chuyên nghiệp cần có để khi ra trường các em hoàn toàn hoà nhập được vào các nhóm phát triển tại doanh nghiệp. Mục tiêu của học phần: - Về kiến thức: +) Hiểu một số kỹ thuật trong thiết kế giao diện chuyên sâu trong Android; - Về kỹ năng: +) Vận dụng được một số kỹ thuật thiết kế giao diện nâng cao (Theme và Style, Widget, RecyclerView, Cardview, Multi-Screen size & Orientation; +) Vận dụng được cách tuỳ biến giao diện hệ thống cũng như trong lúc chạy chương trình (runtime); +) Viết được các ứng dụng sử dụng các tài nguyên trên mạng Internet; +) Vận dụng được Content Provider, Broadcast Receiver, Service và Firebase trong các ứng dụng Android; 7 +) Vận dụng được cách điều khiển màn hình tương tác (Touchscreen) và các cảm biến; +) Viết được các ứng dụng android dựa trên bản đồ trực tuyến của Google.
- Về năng lực tự chủ và trách nhiệm: +) Hiểu rõ các quy tắc, quy định và biết cách cư xử một cách chuyên nghiệp trong các nhóm phát triển; +) Rèn luyện tính chủ động, tích cực trong mọi tình huống; +) Rèn luyện kỹ năng tự học. MỘT SỐ KỸ NĂNG THIẾT KẾ GIAO DIỆN NÂNG CAO Mục tiêu: - Về kiến thức: Hiểu một số kỹ thuật thiết kế giao diện chuyên sâu trong Android. - Về kỹ năng: +) Vận dụng được một số kỹ thuật thiết kế giao diện nâng cao (Theme và Style, Widget, RecyclerView, Cardview, Muti-Screen size & Orientation; +) Vận dụng được cách tuỳ biến giao diện hệ thống cũng như trong lúc chạy chương trình (runtime); - Về năng lực tự chủ và trách nhiệm: +) Hiểu rõ các quy tắc, quy định và biết cách cư xử một cách chuyên nghiệp trong các nhóm phát triển; +) Rèn luyện tính chủ động, tích cực trong mọi tình huống; +) Rèn luyện kỹ năng tự học. Mô tả nội dung: Trình bày chuyên sâu về cách tuỳ biến giao diện hệ thống và giao diện ứng dụng dựa trên Themes và Styles.1 Theme và Style Style có thể hiểu là tập hợp các thuộc tính được thiết lập sẵn và có thể tái sử dụng cho nhiều loại giao diện màn hình khác nhau.
Do vậy, trong trường hợp có nhiều thành phần giao diện có những thuộc tính được thiết lập giống nhau thì nên gom chúng vào trong các Styles để có thể tái sử dụng mà không cần thiết lập lại. Còn Theme là tập hợp nhiều Styles khác nhau tạo thành cấu trúc chung cho toàn bộ ứng dụng. Mỗi ứng dụng, mỗi Activity khi được tạo ra bao giờ cũng được gắn với một Theme nhất định và mọi thuộc tính đã được định nghĩa cho từng Style trong Theme sẽ hiệu ứng cho mọi phần tử tương ứng trong ứng dụng đó. Tuy nhiên, chúng ta vẫn hoàn toàn có thể điều chỉnh một số thuộc tính theo ý mình bằng cách định nghĩa lại những thuộc tính tương ứng đó.
Theme và Styles trong một ứng dụng Android thường được định nghĩa trong thư mục chứa tài nguyên hệ thống (res): res/values/styles. Styles thường được sử dụng trong các định nghĩa của layout và Theme thì được dùng trong file cấu hình Manifest.xml của ứng dụng Android (Lưu ý: Sinh viên có thể tham khảo thêm nguồn tài liệu phong phú tại: https://developer. & Bài tập thực hành số 1 Vận dụng những kiến thức, kỹ năng đã được học trong Lập trình di động 1, hãy thiết kế giao diện cho ứng dụng sau (Hình 1. Hãy cho nhận xét! 9 Rõ ràng với giao diện mới thiết kế có rất nhiều thuộc tính lặp lại (giống với lập trình tuyến tính ngày trước) dẫn tới các file giao diện trông rất phức tạp và không hiệu quả.
Ngoài ra, chỉ cần một chút thay đổi nhỏ của giao diện (thao tác thường xuyên được người sử dụng yêu cầu khi viết phần mềm) cũng có thể dẫn tới việc điều chỉnh lặp đi lặp lại các thuộc tính đó nhiều lần, rất khó cho quá trình bảo trì sau này. Với các ứng dụng dạng này, chúng ta thường dùng Styles để định nghĩa cho các thuộc tính chung và có thể tái sử dụng chúng trong toàn chương trình.1 Bài tập thực hành số 1 Styles có thể được định nghĩa trong file res\values\styles.xml với một trong hai cú pháp sau đây: Dạng 1 Tự định nghĩa Style mới <style name="NameOfStyle"> <item name="attributes_name_1">attributes value_1</item> <item name="attributes_name_2">attributes value_2</item>. <item name="attributes_name_n">attributes value_n</item> </style> Dạng 2 Style mới kế thừa từ những thuộc tính của Style khác (Parent’s Style) <style name="NameOfStyle" parent="Name of the Parent’s Style"> <item name="attributes_name_1">attributes value_1</item> <item name="attributes_name_2">attributes value_2</item>. <item name="attributes_name_n">attributes value_n</item> </style> Định nghĩa dạng 1 thường dùng cho trường hợp chúng ta đang xây dựng một Style mới, độc lập với những Styles đã có.
Còn định nghĩa dạng 2 cho phép Style mới có thể kế thừa các thuộc tính của Style Parent hoặc định nghĩa lại những thuộc tính đã có đó (Trường hợp chúng ta muốn thay đổi thuộc tính đã có theo một dạng khác hoặc muốn tự tuỳ biến các thuộc tính của hệ thống theo ý mình – Mục 1.