ĐẠI IIỌC QUỐC GIA TIIÀNII PIIỐ IIỒ CHÍ MINH TRƯỜNG ĐẠI HỌC KINII TÉ - LUẬT KHOA IIỆ THỐNG THÔNG TIN TS LÊ HOÀNH SỬ (Chủ biên) ThS IIỒ TRUNG THÀNH ThS TRẦN DUY THANH GIAO TRINH PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG NÂNG CAO TR1.ÍỜNG CAO »ẮNG CƠNG NGHI T U Ị ' v \í ’ ■ r* n r -n *1 ^ ' ỉỉ '1 • i 11 P>K''B V u ■*c- y c V -> J o r NHÀ XUẤT BẢN ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỊ CHÍ MINH - 2017 ỈIÁO TRÌNH »HÁT TRIỂN ỨNG DỤNG DI ĐỘNG JÂNG CAO L Ê HOÀNH S (Chủ biên) H T R U N G TH AN H T R Â N D U Y TH AN H tiếng Việt © , TRƯỜNG ĐẠI HỌC KINH TẾ -LUẬT (ĐHQG-HCM), NXB ĐHỌG-HCM :ÁC TÁC GIÁ iăn quyền tác phẩm bào hộ Luật Xuất bàn vả Luật Sở hữu trí tuệ Việt Nam Nghiêm ấm hình thức xuất bản, chụp, phát tán nội dung chưa có đồng ý cùa tác già «Ihà xuất bàn ĐÈ CĨ SÁCH HAY, CẢN CHUNG TA Y BẢO VỆ TÁC QUYÊN! LỜI GIỚI THIỆU N gành lập trình ứng dụng di động thay đổi hàng giờ, nhiều công nghệ phát triển với tính trội N hu cầu sử dụng di động đặc biệt smartphone ngày tăng nhanh, kèm với hành vi trao đổi bn bán thiết bị di động, tốn di động, điện toán đám m ây di động, mạng xã hội di động, tương lai cần nhiều nhân lực liên quan tới phát triển ứng dụng di động, hội để ngành Thương mại Đ iện tử đào tạo ngành Lập trình Di động, m ột nhu cầu thiết yếu cấp tiến cách m ạng công nghệ Trong tất hệ điều hành dành cho di động nay, nói: Android m ang lại m ột cách m ạng thật cho lập trình viên Nổi bật với tính mở, đơn giản m ạnh mẽ, khơng tổn phí cho quyền đặc biệt cộng đồng lập trình viên vơ lớn mạnh A ndroid thật tảng m ạnh mẽ cho phép lập trình viên, người chưa lập trình thiết bị di động tạo ứng dụng m ột cách nhanh chóng dễ dàng Có thể nói Android dần m ang lại phong cách thói quen sử dụng điện thoại người dùng Tiếp nối Giáo trình Phát triển ứng dụng di động bản, Giáo trình P h t triến ứ n g d ụ n g di dộng n â n g cao cung cấp kiến thức lập trình nâng cao cho thiết bị di động sử dụng hệ điều hành Android, cách sử dụng ngơn ngữ lập trình Java vào việc triển khai dự án thiết bị Android Với lượng lý thuyết danh sách tập phong phú giúp độc giả hiểu sâu lý thuyết áp dụng triển khai dự án thực tế di động Tuy có nhiều cố gắng cơng tác biên soạn giáo trình cịn nhiều thiếu sót, chúng tơi xin trân trọng tiếp thu ý kiến đóng góp quý báu từ người đọc để hồn thiện lần tái Xin chân thành cảm ơn! Nhóm biên soạn iii MỤC LỤC LỜI GIÓI TIIIỆU iii CIIƯƠNG 1: MENU VÀ ĐIỀU KIIIẺN TÌM K IÉM 1.1 Option Menu 1.2 Context M enu 1.3 Menu Search View .6 1.4 Bài tậ p CHƯƠNG 2: FRAGMENT 12 2.1 Fragment phiên hỗ trợ 12 2.2 Vòng đời Fragment 13 2.3 Cấu trúc XML lưu trữ Fragment 15 2.4 Xây dựng sử dụng Fragment 16 2.5 Bài tập 22 CHƯƠNG 3: CÁC CIIUYẺN HOẠT TRƠNG ÚNG DỤNG 26 3.1 Property Animation 26 3.1.1 Giới thiệu Property Animation 26 3.1.2 Cách tạo tập tin Property Animation 27 3.1.3 Cách nạp Property Animation 29 3.2 View Animation .30 3.2.1 Giới thiệu View Animation 30 3.2.2 Cách tạo tập tin View Animation 30 3.2.3 Alpha Animation .31 3.2.4 Scale Animation .32 3.2.5 Translate Animation 33 3.2.6 Rotate Animation 34 3.2.7 Két họp View Animation 35 3.3 Drawable Animation 36 v 3.3.1 Giới thiệu Drawable Animation 36 3.3.2 Cách tạo tập tin Drawable Animation 37 3.3.3 Cách nạp Drawable Animation 39 3.4 Bài tậ p 40 CHƯƠNG 4: DATA BINDING TRONG ANDROID 45 4.1 Giới thiệu Data Binding Android 45 4.2 Thêm thư viện Data Binding vào Android Studio 45 4.3 Tạo Data Model (POJO) 46 4.4 Thiết lập Data Binding file layout 47 4.5 Thực Data Binding Activity 49 4.6 List Data Binding .50 4.7 Bài tập 57 CHƯƠNG 5: SQLITE TRONG ANDROID 60 5.1 Giới thiệu SQLite .60 5.2 Cách cài plug in SQLite Manager Firefox 61 5.3 Cách sử dụng SQLite Manager .62 5.4 Sao chép liệu SQLite vào hệ thống điện thoại 66 5.5 Mở/đóng kết nối SQLite Android 68 5.6 Truy vấn SQLite Android 69 5.7 Thêm liệu vào SQLite Android 71 5.8 Cập nhật liệu SQLite Android 72 5.9 Xóa liệu SQLite Android 72 5.10 Bài tập .73 CHƯƠNG 6: CONTENT PROVIDER 85 6.1 Giới thiệu Content Provider .85 6.2 Content URI 86 6.3 Content Resolver 87 6.4 Content Provider để đọc danh bạ hong hệ thống điện thoại 90 6.5 Content Provider để đọc Call Log hệ thống điện thoại 91 VI 6.6 Content Provider để đọc tin nhắn điện thoại 92 6.7 Bài tậ p 93 CHƯƠNG 7: LẬP TRÌNH ĐA TUYÉN TRONG ANDROID 96 7.1 Giới thiệu đa tiến trình 96 7.1.1 Khái niệm Thread 96 7.1.2 Khái niệm MultiThread .98 7.2 Lập trình đa tuyến với Handler class 99 7.2.1 Kỹ thuật lập trình Using Message với Handler class 99 7.2.2 Kỹ thuật lập trình Using Post với Handler class 105 7.3 Kỹ thuật lập trình đa tuyến với AsyncTask 109 7.3.1 Xử lỷ AsyncTask khơng có kết trả v ề 111 7.3.2 Xử lý AsyncTask có kết trả 115 7.4 Đa tiến trình hẹn i 7.5 Bài tậ p 120 CHƯƠNG 8: SERVICE VÀ BROADCAST RECEIVER 125 8.1 Service 125 8.1.1 Giới thiệu Service 125 8.1.2 Cách tạo Service 127 8.1.3 Intent Service 132 8.2 Broadcast Receiver 135 8.2.1 Giới thiệu vê Broadcast Receiver 135 8.2.2 Tạo Broadcast Receiver 136 8.2.3 Đăng ký Broadcast Receiver 137 8.2.4 Hủy Broadcast Receiver 137 8.3 Bài tậ p 140 CHƯƠNG 9: TƯƠNG TÁC DỊCH v ụ INTERNET 143 9.1 Một số đối tượng hỗ trợ tương tác dịch vụ Internet 143 9.2 Kỹ thuật đọc định dạng HTML 145 9.3 Kỹ thuật đọc định dạng XML 148 vii 9.4 Kỹ thuật đọc định dạng JSON 154 9.5 Kỹ thuật tương tác dịch vụ Web SOAP 167 9.5.1 Triệu gọi kiêu liệu s 170 9.5.2 Triệu gọi kiểu liệu đổi tượng 175 9.5.3 Triệu gọi kiểu liệu danh sách đổi tượng 181 9.6 Kỹ thuật tương tác dịch vụ Web Restful 185 9.7 Công cụ Download Manager 189 9.7.1 Giới thiệu công cụ Download M anager 189 9.7.2 Cách lập trình với Download Manager 190 9.7.3 Tùy chỉnh thông báo cho Download Manager 192 9.8 Bài tậ p 194 CHƯƠNG 10: GOOGLE M AP 199 10.1 Giới thiệu Google Maps Android API 199 10.2 Cách tạo Google Map Activity 203 10.3 Cách cấu hình hiển thị Google M ap 208 10.4 Các thao tác Google M ap .211 10.4.1 Thay đỏi chê độ hiên thị Google Map 211 10.4.2 Hiển thị vị trí Google M ap 214 10.4.3 Vẽ đồ họa Google Map 216 10.4.4 Vẽ đường địa điếm Google M ap 220 10.4.5 Chinh sửa InfoWindowAdapter cho Google M ap 228 10.5 Bài tậ p .231 CHƯƠNG 11: SENSOR 235 11.1 Giới thiệu sơ lược Cảm biến 235 11.2 Lấy thông tin điều khiển Cảm biến 241 11.3 Xử lý thông tin số Cảm biển 244 11.4 Bài tập .251 CHƯƠNG 12: GOOGLE ADM OB 255 viii 12.1 Giới thiệu Google Admob 255 12.2 Cách tạo tài khoản Google Admob 256 12.3 Tạo Google Admob ứng dụng Android 260 12.4 Bài tập .266 CHƯƠNG 13: GOOGLE PLAY 267 13.1 Giói thiệu Google Play 267 13.2 Các phương thức toán Google Play 271 13.2.1 Thẻ tín dụng thẻ ghi n ợ 271 13.2.2 Thanh toán trực tiếp qua nhà cung cấp dịch vụ di động 272 13.2.3 Các hình thức tốn khơng hơ trợ 273 13.3 Cách đăng ký Google Play Developer 273 13.4 Cách build chứng thực ứng dụng 276 13.5 Cách dưa ứng dụng lên Google Play 280 13.6 Bài tậ p .285 CÁC TIIUẬT N G Ữ 286 TẢI LIỆU TIIAM K HẢO 290 IX DANH MỤC HINH ANH Hình 1.1 Option Menu Android Hình 1.2 Tạo thư mục menu cho ứng dụng Hình 1.3 Context M enu Hình 1.4 Menu SearchView Hình 2.1 Fragm ent 12 Hình 2.2 Vịng đời Fragment 13 Hình 2.3 Màn hình nằm đứng ngang dùng Fragment 18 Hình 2.4 Layout nằm đứng ngang Fragment 18 Hình 2.5 Đặt tên layout cho Fragment 19 Hình 2.6 Chọn Orientation cho Fragment 19 Hình 2.7 Lóp MyFragment 20 Hình 3.1 Property Animation .26 Hình 3.2 Tạo file XML objectAnimator 27 Hình 3.3 Thư mục Animator 29 Hình 3.4 Hiệu ứng chạy Property Animation 30 Hình 3.5 View Animation 30 Hình 3.6 Tạo file XML View Animation 31 Hình 3.7 Cấu trúc thư mục View Animation 31 Hình 3.8 Drawable Animation 37 Hình 3.9 Tạo file XML Drawable Animation 37 Hình 3.10 Cấu trúc thư mục Drawable Animation 38 Hình 3.11 Ví dụ Drawable Animation 39 Hình 4.1 Data Binding 45 Hình 4.2 Ví dụ giao diện Binding 47 Hình 4.3 Ví dụ giao diện List Data Binding 50 Hình 4.4 Cấu trúc Project List Data Binding 50 Hình 5.1 Chọn Add-ons Firefox 61 X DANH MỤC BẢNG Bảng 5.1 Ví dụ Bảng liệu SQLite 61 Bảng 6.1 Ví dụ cấu trúc bảng Content Provider 85 Bảng 7.1 Quá trình xử lý Using Message với Handler class 100 Bảng 7.2 Quá trình xử lý Using Post với Handler class 105 Bảng 8.1 Các phương thức Service 126 Bảng 8.2 Bảng so sánh loại Service 135 Bảng 9.1 Các phương thức URLConnection 143 Bảng 9.2 Các phương thức định nơi lưu trữ Download Manager 193 Bảng 10.1 Các phưoưg thức đối tượng Polyline 216 Bảng 10.2 Các phương thức đối tượng Polygon 218 Bảng 10.3 Các phương thức đối tưọng Circle 219 XV Chưong MENU VÀ ĐIỀU KHIỂN TÌM KIẾM Menu Control đặc biệt, dùng để chứa chức phụ tùy chỉnh dành riêng cho ứng dụng, chương trình có q nhiều chức ta đưa vào Menu để bố trí cho giao diện thơng thống Có nhiều loại Menu, giáo trình tập trung vào Option Menu, Context Menu, đặc biệt ứng dụng menu Search view vào chức tìm kiêm phân mêm 1.1 Option Menu Là menu bong ứng dụng chứa thao tác cho ứng dụng gọi người dùng nhấn phím Menu, có hai nơi để hiển thị Option Menu: Nhấn vào phím mềm hình Activity, nhấn lâu vào phím back cứng thiết bị Thơng thường cách hiển thị Menu lệ thuộc vào phiên thiết bị Ở hình ta thấy Activity có hai Menu: Giới thiệu Hướng dẫn Đè có Option Menu xử lý thao tác người dùng, ta làm theo ba bước sau: Bước 1: Tạo tập tin XML cho Menu muốn hiển thị Trong res, ta tạo thư mục menu (click chuột phải vào res/chọn New/ chọn Directory ^ đặt tên menu: ▼ Ml res p EM d r a w a b le ► EM layout ▼ EM menu v> menu main.jcml ► EM mipmap ► EM values Hình 1.2 Tạo thư mục menu cho ứng dụng Tạo file menu XML: Click chuột phải vào menu/chọn New/chọn Menu Resource File Đặt tên file menu tùy vào nhu cầu, trường họp ta đặt tên menu_main Tiến hành soạn nội dung cho XML sau: Tag menu root element XML menu, menu bên dùng tag item Android cho phép có nhiều cấp menu con, nhiên với Mobile ta nên dùng cấp Hai thuộc tính bắt buộc phải có khai báo menu item là: id title Id dùng cho lập trinh viên viết lệnh truy suất tới menu item, title tiêu đề hiển thị menu item Bu'0'c 2: Override hàm khởi tạo Menu cho Activity Đê Menu bước áp dụng cho Activity ta phải override lại phương thức onCreateOptionsMenu Activity (ví dụ ta muốn tạo Menu cho MainActivity): @Override public boolean onCreateOptionsMenu(Menu menu) { Menulnflater inflatem=getMenuInflater(); inflater.inflate(R.menu.we«u_wum, menu); return super.onCreateOptionsMenu(menu); } Ta dùng hàm getMenuInflaterO để lấy đối tượng Menulnflater ra, sau dùng hàm inflate để nạp XML Menu vào cho Activity Đối số tên tập tin XML bước (R.menu.menu_main), đối số biến menu nằm hàm onCreateOptionsMenu Ta lưu ý muốn tạo hàm nhanh chóng cần gõ vài ký tự đầu hàm dùng tổ họp phim Ctrl + space để Android Studio tự xuất Buóc 3: Xử lý kiện người dùng Khi nạp Menu cho Activity, ta cần phải biết người dùng lựa chọn Menu Item Đê làm điều ta override phương thức onOptionsItemSelected: @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getltemld()) { case R.id mnuHuongDcm: Intent intent =new Intent(MainActivity.this,HuongDanActivity.class); startActivity(intent); break; case R.\d.mnuGioiTfiieu: break; } return super.onOptionsItemSelected(item); } Vì Activity có nhiều Menu Item nên ta thường dùng switch để kiểm tra người dùng lựa chọn Menu Item Trong hàm có biến đối tượng item, biến Menu Item mà người dùng chọn Hàm getltemldO cho ta biết Id Menu Item mà người dùng lựa chọn, tương ứng với Id till ta gọi lệnh thực với Menu Item Cuối ta có mã nguồn MainActivity sau: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedlnstanceState) { super.onCreate(savedlnstanceState); setContentView(R.layout.flcP'v/iy_/nflin); } @Override public boolean onCreateOptionsMenu(Menu menu) { Menulnflater inflater=getMenuInflater(); inflater in flate(R.menu menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getltemld()){ case R.id mnuHuongDan: Intent intent =new Intent(MainActivity.this,HuongDanActivity.class); startActivity(intent); break; case R.id.mnuGioiThieu: break; } return super.onOptionsItemSelected(item); } } 1.2 Contcxt M enu Context Menu loại control cho phép người dùng nhấn thật lâu vào control để hiển thị Menu Item chức Context Menu sử dụng nhiều ứng dụng di động Hình 1.3 Context Menu Để tạo Context Menu ta thực bốn bước sau; Bước 1: Tạo XML Menu tên m aincontextm enu.xm l (cách tạo thư mục, tập tin xml tưong tự Option Menu): Trong XML trên, ta tạo thêm namespace: xmlns:app xmlns:app="hUp://schemas.android.com/apk/res-auto" Muốn thiết lập Menu Item thành SearchView, ta thêm hai thuộc tính: app:actionViewClass="android.widget.SearchView" j app:showAsAction="always" Bước 2: Nạp menu XML file vào Activity cách override OnCreateOptionsMenu @0verride public boolean onCreateOptionsMenu(Menu menu) { Menulnflater inílatej=getMenuInflater(); in flater inflate) R.menu./m/m_/7/em/,menu); return super.onCreateOptionsMenu(menu); } Đè xử lý lắng nghe người dùng nhập ký tự nhập tìm kiếm ta dùng đối tượng SearchVievv hàm sau: @Override public boolean onCreateOptionsMenu(Menu menu) { Menulnflater inflater=gelMenuInflater(); inflater.inílate(R menu.mm'/wuem/,menu); Menultem mnuSearch=menu.findItem(R.id.m/n/.Seflrc7i); SearchView searchView= (SearchView) MenuItemCompat.ge/7lc//o«F/ew(mnuSearch); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { return false; } @Override public boolean onQueryTextChange(String s) { adapterTinhThanh getF ilter().filter(s); return false; } }); return super.onCreateOptionsMenu(menu); Sự kiện OnQueryTextListener dùng để lắng nghe thao tác người dùng nhập ô Search Trong kiện có hàm onQueryTextChange, bắt giá trị mà người dùng nhập, ta thường xử lý lọc liệu hàm 1.4 Bài tập Bài 1: Trình bày bước để tạo Option Menu Bài 2: Trình bày bước để tạo Context Menu Bài 3: Trình bày bước để tạo Menu SearchView Bài 4; Nạp danh sách tỉnh thành thành phổ Việt Nam vào ListView hình bên dưới: An Giang Aboứt BA Km-Vũng Tàu Bác Giang Béc(t#n BÔ sung Menu SearchView, Menu Item Help, About cho ứng dụng Chưong trình tự động lọc danh sách Tỉnh Thành tương ứng với ký tự ô Search Bài 5: Viết chương trình cho phép thêm danh sách nhân viên vào ListView, thơng tin nhân viên gồm có: mã, tên, giới tính Yêu cầu dùng Custom layout, giao diện hình đây: Khi nhấn nút “Nhập NV”: Thông tin nhân viên hiển thị vào ListView bên dưới, tùy vào giới tính mà hình ảnh xuất khác BỔ sung thêm chức năng: - Chức menu tìm kiếm nhân viên (dùng SearchView) - Context Menu nhấn vào ListView: cho phép lựa chọn sửa, xóa nhân viên Bài 6: Tạo giao diện có chứa ba Button, gán Context Menu gắn cho Button để đổi màu: Red, Green, Blue hình đây: Bài 7: Thiết kế phần mềm quản lý sản phẩm, thông tin sản phẩm bao gồm: mã, tên đơn giá; tất sản phẩm lưu trữ tạm nhớ, thiết kế giao diện thực yêu cầu đây: Câu •đẽ Danh sách sán phẩm Vertu Constellation IPhone 5S Nokia Lumia 925 Sam sung Galaxy S4 HTC Desire 600 HKPhone Revo LEAD 10 Bổ sung thêm chức năng: - OptionMenu, Menu SearchView: Hướng dẫn sử dụng, Tìm kiếm - Nhấn giữ vào dòng sản phẩm: hiển thị Context Menu có Item: Xem chi tiết (màn hình chi tiết năm bên phải) - Nút xóa sản phẩm: dùng Intent result để xóa sản phẩm - Nút trở về: đóng hình chi tiết quay trở lại hình ban đâu Bài 8: Viết chương trình sổ tay nhà hàng, hỗ trợ chức Menu SearchView để tìm kiếm, hỗ trợ Context Menu, OptionMenu (giới thiệu, hướng dẫn sử dụng): Context Menu 11 ChưoTig FRAGMENT Trong phần lớn ứng dụng Android, biết có Activity hiển thị hình thời điểm Chúng ta muốn chia hình nhiều phần để dễ sử dụng Fragment đáp úng điều Chương trình bày kiến thức liên quan tới Fragment như: phiên hỗ trợ, vòng đời, cấu trúc XML, cách lữu trữ trạng thái Fragment cuối cách xây dựng sử dụng Fragment 2.1 Fragment phicn hỗ trọ’ Fragment đối tượng nhúng Activity, cho phép thực nhận tương tác, có vịng đời riêng thực trao đổi thông tin với Activity Fragment khác Hình 2.1 Fragment Fragment API thêm vào từ phiên Android PloneyComb (API 11) Fragment nằm package: android.app.Fragment Phiên hỗ trợ: android.support.v4.app.Fragmcnt (API - Android 1.6) Fragment có layout riêng nó, có sir kiện vịng địi riêng Chúng ta thêm xóa Fragment Activity Activity chạy Có thể kết họp nhiều Fragment Activity để xây dụng giao diện người dùng đa khung Một Fragment sử dụng nhiều Activities Các lóp Fragment dùng để lập trình: Fragment, ListFragment, DialogFragment, PreferenceFragment, WebViewFragment 12 2.2 Vông doi cüa Fragment Moi Fragment cô vông dôi riêng, vông dôi giông vôi vông dôi cüa mot Activity: onCreateQ onStartQ onResumef) T Fragment le V actlva J User navigates backward or fragment is removed/replaced The fragment is added to the back stack, then removed/replaced V I onPauseQ ~T~ ~T~ onStopO Z3ZZITZ onDestroyViewQ The fragment returns to the layout from the back stack _ J Hinh 1.2 Vông dôi cüa Fragment 13 ... dùng Tiếp nối Giáo trình Phát triển ứng dụng di động bản, Giáo trình P h t triến ứ n g d ụ n g di dộng n â n g cao cung cấp kiến thức lập trình nâng cao cho thiết bị di động sử dụng hệ điều hành... ây di động, mạng xã hội di động, tương lai cần nhiều nhân lực liên quan tới phát triển ứng dụng di động, hội để ngành Thương mại Đ iện tử đào tạo ngành Lập trình Di động, m ột nhu cầu thiết... cơng nghệ phát triển với tính trội N hu cầu sử dụng di động đặc biệt smartphone ngày tăng nhanh, kèm với hành vi trao đổi buôn bán thiết bị di động, toán di động, điện toán đám m ây di động, mạng