Công nghệ thông tin ngày nay đang là một ngành phát triển vượt bậc, ứng dụng của công nghệ thông tin dường như đi vào tất cả các lĩnh vực trong đời sống. Lĩnh vực phát triển ứng dụng đem lại doanh thu siêu khủng dành cho các nhà phát triển còn hơn cả doanh thu của ngành điện ảnh. Ngày nay, các ứng dụng điện thoại di động phát triển một cách mạnh mẽ. Một chiếc điện thoại không chỉ đơn giản dùng để gọi và nhắn tin nữa, mà còn có rất nhiều chức năng trong đó có cả giải trí bằng trò chơi điện tử và các ứng dụng hỗ trợ cuộc sống hằng ngày. Android là một trong những nền tảng mạnh mẽ chạy trên điện thoại di động, Android ngày càng chiếm lĩnh nhiều hơn trong thị trường thiết bị di động, vì thế phát triển ứng dụng ngày càng trở nên là một cơ hội phát triển lớn cho các nhà phát triển. Là một sinh viên sắp ra trường và có ước mơ trở thành một lập trình viên giỏi trong lĩnh vực ứng dụng Android, nên em sẽ thực hiện đồ án tốt nghiệp lập trình ứng dụng trên thiết bị Android làm bước đầu cho những sự phát triển sau này của em.
LỜI CẢM ƠN Lời đầu tiên, em xin gửi lời cảm ơn chân thành nhất đến gia đình thân yêu của em Những người đã luôn bên em và dõi theo trên từng đoạn đường đi của em Gia đình luôn động viên, chia sẽ và là động lực của em có thể phấn đấu để vượt qua mọi khó khăn, cũng như thử thách trong thời gian qua Em cũng xin gửi lời cảm ơn đến thầy Nguyễn Thanh Cẩm đã tận tình hướng dẫn em làm đề tài này Và qua đây, em cũng xin chân thành cảm ơn các thầy (cô) trong Khoa Công nghệ thông tin – Trường Cao đẳng CNTT hữu nghị Việt Hàn đã truyền đạt kiến thức cho em, cũng như toàn thể các bạn Sinh viên trong 3 năm qua Với vốn kiến thức tiếp thu được trong quá trình học tập, không chỉ là nền tảng cho quá trình nghiên cứu đề tài này, mà còn là hành trang quý báu để em có thể bước vào đời một cách vững chắc và tự tin Cảm ơn tất cả những người bạn đã động viên, khích lệ em trong suốt thời gian vừa qua Cuối cùng, em xin kính chúc thầy (cô) và gia đình dồi dào sức khỏe, hạnh phúc và thành công ! i MỤC LỤC LỜI CẢM ƠN .i MỤC LỤC ii DANH MỤC HÌNH ẢNH v MỞ ĐẦU 1 CHƯƠNG 1 SƠ LƯỢC VỀ ANDROID 3 1.1.Lịch sử Android 3 1.2.Nghiên cứu máy ảo Dalvik .4 1.3.Kiến trúc của Android 4 1.1.1.Linux Kernel .5 1.1.2.Android Runtime 5 1.1.3.Libraries 5 1.1.4.Application Framework 6 1.1.5.Applications 7 1.4.Android Emulator 7 1.5.Các thành phần trong một Android Project 7 1.5.1 Thư mục src .7 1.5.2 Thư mục res .8 1.5.3 File R.Java 8 1.5.4 Android Manifest.xml 10 1.6.Chu kỳ ứng dụng của Android .11 1.1.6.Chu kỳ sống thành phần 12 1.1.7.Activity stack .12 1.1.8.Các trạng thái của chu kỳ sống 13 1.1.9.Chu kỳ sống của ứng dụng .13 1.1.10.Các sự kiện trong chu kỳ sống của ứng dụng 14 1.1.11.Thời gian sống của ứng dụng 14 1.1.12.Thời gian hiển thị của Activity .14 1.1.13.Các phương thức của chu kỳ sống 15 1.7.Các thành phần giao diện trong Android .16 1.1.14.View 16 1.1.15.ViewGroup .17 ii 1.1.16.Button 20 1.1.17.ImageButton 21 1.1.18.ImageView .21 1.1.19.ListView 22 1.1.20.TextView 23 1.1.21.EditText 24 1.1.22.CheckBox 24 1.1.23.MenuOptions 25 1.1.24.ContextMenu 26 1.1.25.Quick Search Box 27 1.1.26.Activity Intent 28 1.7.13.1 Activity 28 1.7.13.2 Intent 29 CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ 32 HƯỚNG ĐỐI TƯỢNG 32 2.1 Giới thiệu bài toán 32 2.2 Mô hình hóa yêu cầu .32 2.2.1 Xác định các tác nhân .32 2.2.2 Xác định các trường hợp sử dụng (Use case) 32 2.2.2.1 Xác định các trường hợp sử dụng .32 2.2.2.2 Đặc tả các trường hợp sử dụng 32 2.1.2.3 Biểu đồ trường hợp sử dụng .33 2.3 Mô hình hóa khái niệm 33 2.3.1 Các gói trong hệ thống .33 2.3.1.1 Các lớp biên .33 2.3.1.2 Các lớp điều khiển 33 2.3.2 Xác định các lớp đối tượng 34 2.4 Biểu đồ hoạt động 35 2.4.1 Biểu đồ hoạt động khởi động ứng dụng 35 2.4.2 Biểu đồ hoạt động chọn chức năng 35 CHƯƠNG 3: CÀI ĐẶT ỨNG DỤNG .36 3.1 Một vài hình ảnh ứng dụng 36 iii 3.2 Hướng dẫn sử dụng .44 KẾT LUẬN 45 1 Đánh giá ứng dụng 45 2 Hướng phát triển trong tương lai 45 3 Tổng quan 45 TÀI LIỆU THAM KHẢO .46 PHỤ LỤC 47 Một số lớp trong ứng dụng 47 1 Lớp MapsActivity .47 2 Lớp MainActivity .50 iv DANH MỤC HÌNH ẢNH Hình 1.1 Android timeline 3 Hình 1.2 Cấu trúc stack hệ thống Android 5 Hình 1.3 Android emulator .7 Hình 1.4 Chu kỳ sống thành phần 12 Hình 1.5 Activity stack .12 Hình 1.6 Chu kỳ sống của Activity 13 Hình 1.7 Các sự kiện trong chu kỳ sống của ứng dụng 14 Hình 1.8 Cấu trúc một giao diện ứng dụng Android .17 Hình 1.9 Bố trí các widget sử dụng LinearLayout 17 Hình 1.10 Bố trí các widget trong FrameLayout 18 Hình 1.11 Bố trí các widget trong RetaliveLayout 19 Hình 1.12 Bố trí widget trong TableLayout 19 Hình 1.13 ImageButton 21 Hình 1.14 ImageView và ImageButton 22 Hình 1.15 Minh họa cho một ListView 23 Hình 1.16 Minh họa MenuOptions 25 Hình 1.17 Minh họa cho ContextMenu 27 Hình 1.18 Minh họa Quick Search Box 28 Hình 1.19 Truyền dữ liệu giữ 2 Activity 30 Hình 1.20 Các thuộc tính của Intent .30 Hình 1.21 Các Action đã được định nghĩa trong Intent 31 Hình 2.1 Biểu đồ trường hợp sử dụng 33 Hình 2.2 Biểu đồ các lớp biên 33 Hình 2.3 Biểu đồ các lớp điều khiển .33 Hình 2.4 Biểu đồ lớp 34 Hình 2.5 Biểu đồ hoạt động khởi động ứng dụng 35 Hình 2.6 Biểu đồ hoạt động lựa chọn chức năng 35 Hình 3.1 Biểu tượng ứng dụng ở màn hình của thiết bị 36 Hình 3.2 Màn hình khởi động ứng dụng 36 Hình 3.3 Màn hình menu 37 Hình 3.4 Màn hình chính mặc định 37 v Hình 3.5 Màn hình danh mục khách sạn .38 Hình 3.6 Màn hình chi tiết khách sạn 38 Hình 3.7 Màn hình danh mục điểm đến 39 Hình 3.8 Chi tiết điểm đến 39 Hình 3.9 Màn hình danh mục thức ăn 40 Hình 3.10 Màn hình chi tiết món ăn .40 Hình 3.11 Màn hình danh mục địa điểm mua sắm 41 Hình 3.12 Màn hình chi tiết địa điểm mua sắm .41 Hình 3.13 Màn hình danh mục taxi 42 Hình 3.14 Màn hình chi tiết taxi .42 Hình 3.15 Màn hình bản đồ 43 Hình 3.16 Màn hình sos 43 vi Xây dựng ứng dụng Hello DaNang trên nền tảng Android MỞ ĐẦU 1 Lý do chọn đề tài Công nghệ thông tin ngày nay đang là một ngành phát triển vượt bậc, ứng dụng của công nghệ thông tin dường như đi vào tất cả các lĩnh vực trong đời sống Lĩnh vực phát triển ứng dụng đem lại doanh thu siêu khủng dành cho các nhà phát triển còn hơn cả doanh thu của ngành điện ảnh Ngày nay, các ứng dụng điện thoại di động phát triển một cách mạnh mẽ Một chiếc điện thoại không chỉ đơn giản dùng để gọi và nhắn tin nữa, mà còn có rất nhiều chức năng trong đó có cả giải trí bằng trò chơi điện tử và các ứng dụng hỗ trợ cuộc sống hằng ngày Android là một trong những nền tảng mạnh mẽ chạy trên điện thoại di động, Android ngày càng chiếm lĩnh nhiều hơn trong thị trường thiết bị di động, vì thế phát triển ứng dụng ngày càng trở nên là một cơ hội phát triển lớn cho các nhà phát triển Là một sinh viên sắp ra trường và có ước mơ trở thành một lập trình viên giỏi trong lĩnh vực ứng dụng Android, nên em sẽ thực hiện đồ án tốt nghiệp lập trình ứng dụng trên thiết bị Android làm bước đầu cho những sự phát triển sau này của em 2 Mục tiêu và nhiệm vụ nghiên cứu Mục tiêu nghiên cứu - Nghiên cứu ngôn ngữ lập trình Java trên nền tảng Android - Xây dựng được một ứng dụng trên Android - Đảm bảo chương trình hiệu quả - Chương trình chạy ổn định, chính xác, an toàn - Giao diện thân thiện, dễ sử dụng - Tối ưu hóa các thao tác dư thừa, đơn giản cho người mới bắt đầu - Hạn chế thấp nhất các sai sót có thể xảy ra trong quá trình sử dụng SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 1 Xây dựng ứng dụng Hello DaNang trên nền tảng Android Nhiệm vụ nghiên cứu - Nghiên cứu ngôn ngữ lập trình Java trên nền tảng Android 3 Đối tượng và phạm vi nghiên cứu Đối tượng - Người dùng Smartphone Phạm vi nghiên cứu - Trên điện thoại Android 4 Phương pháp nghiên cứu - Tìm hiểu về cách viết và xây dựng phần mềm cho Android - Tìm hiểu sâu hơn bộ công cụ phát triển phần mềm Android và môi trường phát triển tích hợp Eclipse (Eclipse IDE) - Cài đặt ứng dụng 5 Lời cảm ơn Em xin gửi lời cảm ơn đến các thầy cô đã tận tình dạy dỗ và giúp đỡ em trong ba năm được học ở trường cao đẳng Công nghệ thông tin Hữu nghị Việt – Hàn, cảm ơn sự hướng dẫn tận tình của thầy Nguyễn Thanh Cẩm cho việc hoàn thành đồ án tốt nghiệp này SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 2 Xây dựng ứng dụng Hello DaNang trên nền tảng Android CHƯƠNG 1 SƠ LƯỢC VỀ ANDROID 1.1 Lịch sử Android Ban đầu, Android là hệ điều hành cho các thiết bị cầm tay dựa trên lõi Linux do công ty Android Inc (California, Mỹ) thiết kế Công ty này sau đó được Google mua lại vào năm 2005 và bắt đầu xây dựng Android Platform Các thành viên chủ chốt tại ở Android Inc gồm có: Andy Rubin, Rich Miner, Nick Sears, and Chris White Hình 1.1 Android timeline Và sau tiếp, vào cuối năm 2007, thuộc về Liên minh Thiết bị Cầm tay Mã Nguồn mở (Open Handset Alliance) gồm các thành viên nổi bật trong ngành viễn thông và thiết bị cầm tay như: Texas Instruments, Broadcom Corporation, Google, HTC, Intel, LG, Marvell Technology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics, Sprint Nextel, T-Mobile, ARM Holdings, Atheros Communications, Asustek Computer Inc, Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, and Vodafone Group,… Mục tiêu của Liên minh này là nhanh chóng đổi mới để đáp ứng tốt hơn cho nhu cầu người tiêu dùng và kết quả đầu tiên của nó chính là nền tảng Android Android được thiết kế để phục vụ nhu cầu của các nhà sản xuất thiết, các nhà khai thác và các lập trình viên thiết bị cầm tay Phiên bản SDK lần đầu tiên phát hành vào tháng 11 năm 2007, hãng T Mobile cũng công bố chiếc điện thoại Android đầu tiên đó là chiếc TMobile G1, chiếc smartphone đầu tiên dựa trên nền tảng Android Một vài ngày sau đó, Google lại tiếp tục công bố sự ra mắt phiên bản Android SDK release Candidate 1.0 Trong tháng 10 năm 2008, Google được cấp giấy phép mã nguồn mở cho Android Platform Khi Android được phát hành thì một trong số các mục tiêu trong kiến trúc của nó là cho phép các ứng dụng có thể tương tác được với nhau và có thể sử dụng lại SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 3 Xây dựng ứng dụng Hello DaNang trên nền tảng Android các thành phần từ những ứng dụng khác Việc tái sử dụng không chỉ được áp dụng cho các dịch vụ mà nó còn được áp dụng cho cả các thành phần dữ liệu và giao diện người dùng Vào cuối năm 2008, Google cho phát hành một thiết bị cầm tay được gọi là Android Dev Phone 1 có thể chạy được các ứng dụng Android mà không bị ràng buộc vào các nhà cung cấp mạng điện thoại di động Mục tiêu của thiết bị này là cho phép các nhà phát triển thực hiện các cuộc thí nghiệm trên một thiết bị thực có thể chạy hệ điều hành Android mà không phải ký một bản hợp đồng nào Vào khoảng cùng thời gian đó thì Google cũng cho phát hành một phiên vản vá lỗi 1.1 của hệ điều hành này Ở cả hai phiên bản 1.0 và 1.1 Android chưa hỗ trợ soft-keyboard mà đòi hỏi các thiết bị phải sử dụng bàn phím vật lý Android cố định vấn đề này bằng cách phát hành SDK 1.5 vào tháng Tư năm 2009, cùng với một số tính năng khác Chẳng hạn như nâng cao khả năng ghi âm truyền thông, vật dụng, và các live folder 1.2 Nghiên cứu máy ảo Dalvik Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động Android Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik (dex) Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử lý Dalvik đã được thiết kế và viết bởi Dan Bornstein, người đã đặt tên cho nó sau khi đến thăm một ngôi làng đánh cá nhỏ có tên là Dalvík ở đảo Eyjafjörður, nơi mà một số tổ tiên của ông sinh sống Từ góc nhìn của một nhà phát triển, Dalvik trông giống như máy ảo Java (Java Virtual Machine) nhưng thực tế thì hoàn toàn khác Khi nhà phát triển viết một ứng dụng dành cho Android, anh ta thực hiện các đoạn mã trong môi trường Java Sau đó, nó sẽ được biên dịch sang các bytecode của Java, tuy nhiên để thực thi được ứng dụng này trên Android thì nhà phát triển phải thực thi một công cụ có tên là dx Đây là công cụ dùng để chuyển đổi bytecode sang một dạng gọi là dex bytecode "Dex" là từ viết tắt của "Dalvik executable" đóng vai trò như cơ chế ảo thực thi các ứng dụng Android 1.3 Kiến trúc của Android Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành Android Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 4 Xây dựng ứng dụng Hello DaNang trên nền tảng Android Hình 3.11 Màn hình danh mục địa điểm mua sắm Hình 3.12 Màn hình chi tiết địa điểm mua sắm SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 41 Xây dựng ứng dụng Hello DaNang trên nền tảng Android Hình 3.13 Màn hình danh mục taxi Hình 3.14 Màn hình chi tiết taxi SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 42 Xây dựng ứng dụng Hello DaNang trên nền tảng Android Hình 3.15 Màn hình bản đồ Hình 3.16 Màn hình sos SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 43 Xây dựng ứng dụng Hello DaNang trên nền tảng Android 3.2 Hướng dẫn sử dụng - Người dùng nhấp vào biểu tượng của ứng dụng ở màn hình của thiết bị - Sau khi ứng dụng được khởi động, người dùng chọn những chức năng mình muốn ví dụ như muốn biết thêm thông tin về các khách sạn để nghỉ ngơi thì nhấp vào “Khách Sạn” ở Menu hoặc ở trên màn hình…… - Nếu không sử dụng ứng dụng nữa thì nhấn nút Back ở điện thoại SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 44 Xây dựng ứng dụng Hello DaNang trên nền tảng Android KẾT LUẬN 1 Đánh giá ứng dụng Mục tiêu đã đạt được Các chức năng chính Màn hình Menu Màn hình chọn chức năng Màn hình chi tiết Màn hình bản đồ Hoàn thành 100% 100% 80% 80% - Xây dựng được một ứng dụng - Giao thân thiện, dễ sử dụng - Hiểu sâu hơn về ngôn ngữ lập trình Java, có thêm nhiều kiến thức, kinh nghiệm về việc lập trình ứng dụng trên Android Studio - Củng cố thêm kiến thức đã học và áp dụng vào thực tiễn Thiếu sót và các lỗi chưa giải quyết - Giao diện chưa được đẹp - Ứng dụng chạy còn chậm - Chức năng còn đơn giản 2 Hướng phát triển trong tương lai - Tối ưu hóa lại giao diện và các chức năng - Thêm chức năng chỉ đường - Phát triển ứng dụng trên host kết hợp cơ sở dữ liệu - Cập nhật kịp thời các thông tin mới nhất 3 Tổng quan Sau khi thực hiện xong đồ án, em đã nắm bắt được quy trình để tạo nên một ứng dụng đơn giản trên nền tảng Android, tạo tiền đề cho những bước tiến sau này trong học tập cũng như công việc Mặc dù ứng dụng chưa được tốt lắm, nhưng cũng phần nào đáp ứng được nhu cầu của mọi người Một lần nữa em xin gửi lời cảm ơn đến các thầy cô đã dạy dỗ trong ba năm học qua, và gửi lời cảm ơn đến thầy Nguyễn Thanh Cẩm đã tận tình giúp đỡ em hoàn thành đồ án này SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 45 Xây dựng ứng dụng Hello DaNang trên nền tảng Android TÀI LIỆU THAM KHẢO Tiếng Việt [1] Đoàn Thanh Sơn – 2015, “Slide bài giảng môn Lập trình Android” Trường CĐ CNTT Hữu nghị Việt – Hàn [2] ThS Lê Viết Trương, 2011, “Giáo trình Phân tích, thiết kế hướng đối tượng” Trường CĐ CNTT Hữu nghị Việt – Hàn Website [1] http://android.vn (Cộng đồng Android Việt Nam) [2] https://developer.android.com SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 46 Xây dựng ứng dụng Hello DaNang trên nền tảng Android PHỤ LỤC Một số lớp trong ứng dụng 1 Lớp MapsActivity Lớp này cần thiết cho việc hiển thị bản đồ cho các địa điểm package vd.hellodanang.Main; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentActivity; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import vd.hellodanang.R; public class MapsActivity extends FragmentActivity implements LocationListener { GoogleMap googleMap; double x,y; String ten; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //show error dialog if GoolglePlayServices not available if (!isGooglePlayServicesAvailable()) { finish(); SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 47 Xây dựng ứng dụng Hello DaNang trên nền tảng Android } setContentView(R.layout.activity_maps); Intent in = getIntent(); // String toadox =in.getStringExtra(Fusion.TOADOX); // x = Double.parseDouble(toadox); // String toadoy =in.getStringExtra(Fusion.TOADOY); x= in.getDoubleExtra("toadox", 0.00); y = in.getDoubleExtra("toadoy", 0.00); // y = Double.parseDouble(toadoy); ten =in.getExtras().getString("name"); System.out.println("MapsActivity: toadox: "+x+" Toa do y: "+y+" Name: "+ten); SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap); googleMap = supportMapFragment.getMap(); if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission See the documentation // for ActivityCompat#requestPermissions for more details return; } googleMap.setMyLocationEnabled(true); LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String bestProvider = locationManager.getBestProvider(criteria, true); Location location = locationManager.getLastKnownLocation(bestProvider); if (location != null) { SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 48 Xây dựng ứng dụng Hello DaNang trên nền tảng Android onLocationChanged(location); } locationManager.requestLocationUpdates(bestProvider, 20000, 0, this); } @Override public void onLocationChanged(Location location) { double latitude = location.getLatitude(); double longitude = location.getLongitude(); LatLng latLng = new LatLng(latitude, longitude); googleMap.addMarker(new MarkerOptions().position(latLng)); googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); googleMap.animateCamera(CameraUpdateFactory.zoomTo(16)); MarkerOptions marker = new MarkerOptions().position( new LatLng(x,y)).title(ten); // Changing marker icon marker.icon(BitmapDescriptorFactory defaultMarker(BitmapDescriptorFactory.HUE_CYAN)); // adding marker googleMap.addMarker(marker); googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(x,y), 15)); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 49 Xây dựng ứng dụng Hello DaNang trên nền tảng Android } private boolean isGooglePlayServicesAvailable() { int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if (ConnectionResult.SUCCESS == status) { return true; } else { GooglePlayServicesUtil.getErrorDialog(status, this, 0).show(); return false; } } } 2 Lớp MainActivity Đây là lớp rất quan trọng trong việc chạy ứng dụng package vd.hellodanang.Main; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import vd.hellodanang.Amthuc.Amthuc; import vd.hellodanang.Danhthang.DanhThangActivity; import vd.hellodanang.Khachsan.Khachsan; import vd.hellodanang.Muasam.Muasam; import vd.hellodanang.R; import vd.hellodanang.Taxi.Taxi; SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 50 Xây dựng ứng dụng Hello DaNang trên nền tảng Android public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { GridView grid; int[] imageId = { R.drawable.khachsan, R.drawable.shoping, R.drawable.danhthang, R.drawable.restau, R.drawable.danhthang, R.drawable.shoping, R.drawable.khachsan, }; private Activity activity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final String[] web = { getString(R.string.grid_khachsan), getString(R.string.grid_shopping), getString(R.string.grid_danhthang), getString(R.string.grid_restau), getString(R.string.grid_taxi), getString(R.string.grid_update), getString(R.string.grid_update), }; CustomGrid adapter = new CustomGrid(MainActivity.this, web, imageId); grid = (GridView) findViewById(R.id.gridView1); grid.setAdapter(adapter); grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Fragment fragment = null; if (position == 0) { SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 51 Xây dựng ứng dụng Hello DaNang trên nền tảng Android Intent tca = new Intent(MainActivity.this, Khachsan.class); startActivity(tca); } if (position == 1) { Intent tca = new Intent(MainActivity.this, Muasam.class); startActivity(tca); } if (position == 2) { Intent tca = new Intent(MainActivity.this, DanhThangActivity.class); startActivity(tca); // Intent new1Activity = new Intent(MainActivity.this, ShoppingActivity.class); // startActivity(new1Activity); // fragment = new DanhThangActivity(); } if (position == 3) { Intent tca = new Intent(MainActivity.this, Amthuc.class); startActivity(tca); } if (position == 4) { Intent tca = new Intent(MainActivity.this, Taxi.class); startActivity(tca); } if (position == 5) { } // else { // Toast.makeText(MainActivity.this, "Wrong Input", Toast.LENGTH_LONG).show(); // } if (fragment != null) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); } } }); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 52 Xây dựng ứng dụng Hello DaNang trên nền tảng Android this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 53 Xây dựng ứng dụng Hello DaNang trên nền tảng Android @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here int id = item.getItemId(); Fragment fragment = null; if (id == R.id.trang_chu) { } // Handle the camera action if (id == R.id.diem_den) { Intent tc = new Intent(this, DanhThangActivity.class); startActivity(tc); } if (id == R.id.am_thuc) { Intent tc = new Intent(this, Amthuc.class); startActivity(tc); } if (id == R.id.khach_san) { Intent tc = new Intent(this, Khachsan.class); startActivity(tc); } if (id == R.id.mua_sam) { Intent tc = new Intent(this, Muasam.class); startActivity(tc); } if (id == R.id.taxi) { Intent tc = new Intent(this, Taxi.class); startActivity(tc); } if (id == R.id.ban_do) { Intent intent = new Intent(this, MapAll.class); startActivity(intent); } if (id == R.id.for_app) { fragment = new DialogAppActivity(); } if (id == R.id.for_team) { fragment = new AboutTeamActivity(); SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 54 Xây dựng ứng dụng Hello DaNang trên nền tảng Android } if (fragment != null) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } private Context getActivity() { return null; } SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 55 ... tượng ứng dụng hình điện thoại Sử dụng ứng dụng Sau khởi động ứng dụng, người chơi bắt đầu sử dụng ứng dụng SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 32 Xây dựng ứng dụng Hello DaNang tảng Android. .. CCLT07B 35 Xây dựng ứng dụng Hello DaNang tảng Android CHƯƠNG 3: CÀI ĐẶT ỨNG DỤNG 3.1 Một vài hình ảnh ứng dụng Hình 3.1 Biểu tượng ứng dụng hình thiết bị Hình 3.2 Màn hình khởi động ứng dụng SVTH:... CCLT07B 36 Xây dựng ứng dụng Hello DaNang tảng Android Hình 3.3 Màn hình menu Hình 3.4 Màn hình mặc định SVTH: Huỳnh Đức Hiển _ Lớp: CCLT07B 37 Xây dựng ứng dụng Hello DaNang tảng Android Hình