ngữ đánh dấu siêu văn bản được thiết kế ra để tạo nên các trang web gọi là môi trường phát triển tích hợp phát triển ứng dụng phần mềm chuẩn của W3C, là giao thức sử dụng XML để định ngh
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM TPHCM
KHOA CÔNG NGHỆ THÔNG TIN
LÊ ANH TOÀN TRẦN CÔNG MINH
XÂY DỰNG ỨNG DỤNG TRA CỨU TÀU, XE TRÊN
HỆ ĐIỀU HÀNH ANDROID
KHÓA LUẬN TỐT NGHIỆP
TP.HỒ CHÍ MINH - NĂM 2012
Trang 21
TRƯỜNG ĐẠI HỌC SƯ PHẠM TPHCM
KHOA CÔNG NGHỆ THÔNG TIN
LÊ ANH TOÀN TRẦN CÔNG MINH
XÂY DỰNG ỨNG DỤNG
TRA CỨU TÀU, XE TRÊN
HỆ ĐIỀU HÀNH ANDROID
CHUYÊN NGÀNH: CÔNG NGHỆ PHẦN MỀM
KHÓA LUẬN TỐT NGHIỆP
Trang 32
LỜI CẢM ƠN
Trong thời gian thực hiện luận văn, dưới sự hướng dẫn của Khoa Công Nghệ Thông Tin Trường Đại Học Sư Phạm Tp.HCM và đặc biệt là sự hướng dẫn của thầy Trần Ngọc Bảo, chúng em đã hoàn thành luận văn với thời gian như dự kiến Có được kết quả ấy chúng em xin chân thành gởi lời cám ơn đến :
Đại học Sư Phạm Tp.HCM đã tận tình hướng dẫn, giúp chúng em định hướng và phát triển luận văn tốt nghiệp Sự giúp đỡ và hướng dẫn nhiệt tình của thầy đã giúp chúng em củng cố kiến thức và hoàn thành tốt luận văn tốt nghiệp Chúng em xin chân thành cám
ơn thầy
Tp.HCM nói riêng và các thầy cô Trường Đại Học Sư Phạm nói chung đã tận tình hướng dẫn dạy bảo, giúp chúng em trang bị những kiến thức quý báu trong suốt thời gian học tập
và nghiên cứu
Dù rất cố gắng và liên tục nâng cao kiến thức, nhưng đề tài vẫn không thể tránh những sai sót và hạn chế Do đó chúng em rất mong nhận được sự thông cảm và ý kiến chỉ bảo để chúng em có thể hoàn thiện những sai sót mà chúng em đã mắc phải Một lần nữa, chúng em xin chân thành cảm ơn
Nhóm sinh viên thực hiện
Lê Anh Toàn – Trần Công Minh
Trang 43
MỤC LỤC
Bảng các thuật ngữ và các từ viết tắt 8
Danh mục các bảng biểu 9
Danh mục các hình ảnh 11
Lời nói đầu 14
PHẦN 1: TÌM HIỂU VỀ KỸ THUẬT LẬP TRÌNH TRÊN ANDROID 16
1 Các bước để tiến hành lập trình trong Android 16
1.1 Java Runtime Environment (JRE) 16
1.2 Eclipse IDE 16
1.3 Android SDK 16
1.4 Android ADT 17
2 Kỹ thuật lập trình với các điều khiển 17
2.1 ListView 17
2.1.1 Yêu cầu đặt ra 17
2.1.2 Giải quyết 18
2.2 GridView 18
2.2.1 Yêu cầu đặt ra 18
2.2.2 Giải quyết 18
2.3 Spinner View, DatePicker 19
2.3.1 Yêu cầu đặt ra 19
2.3.2 Giải quyết 19
2.4 TabHost View 20
2.4.1 Yêu cầu đặt ra 20
2.4.2 Giải quyết 21
2.5 Gallery và ImageView 21
2.5.1 Yêu cầu đặt ra 21
2.5.2 Giải quyết 22
Trang 54
3 Kỹ thuật lập trình với SQLite 22
3.1 Giới thiệu 22
3.2 Ví dụ minh họa 24
3.2.1 Đặt vấn đề 24
3.2.2 Giải quyết 25
4 Kỹ thuật lập trình với Web Service 25
4.1 Dạng SOAP (Simple Object Access Protocol) 25
4.2 Ví dụ minh họa 26
4.2.1 Đặt vấn đề 26
4.2.2 Giải quyết 28
5 Phát audio, video trong Android 28
5.1 Giới thiệu 28
5.1.1 Phát audio 28
5.1.2 Phát video 30
5.2 Minh họa 31
5.2.1 Vấn đề đặt ra 31
5.2.2 Giải quyết 31
PHẦN 2: XÂY DỰNG ỨNG DỤNG TRA CỨU THÔNG TIN TÀU, XE 32
6 Kiến trúc ứng du ̣ng và đă ̣c tả yêu cầu 32
6.1 Kiến trúc ứng du ̣ng 32
6.2 Các sơ đồ đặc tả yêu cầu 33
7 Phân tích, thiết kế 46
7.1 Mô hình thực thể kết hợp (CDM) 46
7.1.1 Thực thể Hang 47
7.1.2 Thực thể PhuongTien 47
7.1.3 Thực thể LoaiPhuongTien 47
7.1.4 Thực thể Phim 48
7.1.5 Thực thể HinhAnh 48
Trang 65
7.1.6 Thực thể DiaDiem 48
7.1.7 Thực thể Tuyen 48
7.1.8 Thực thể TrungGian 49
7.1.9 Thực thể LoaiGhe 49
7.1.10 Thực thể Gia 49
7.1.11 Thực thể DoiTuong 50
7.1.12 Thực thể KhuyenMai 50
7.1.13 Mối kết hợp ChiTietTuyen 50
7.1.14 Mối kết hợp ChiTietViTri 51
7.2 Mô hình vật lý (PDM) 51
7.2.1 Bảng Hang 53
7.2.2 Bảng Phim 53
7.2.3 Bảng LoaiPhuongTien 54
7.2.4 Bảng ChiTietHang 54
7.2.5 Bảng PhuongTien 54
7.2.6 Bảng HinhAnh 55
7.2.7 Bảng KhuyenMai 56
7.2.8 Bảng Gia 56
7.2.9 Bảng ChiTietViTri 57
7.2.10 Bảng LoaiGhe 58
7.2.11 Bảng Tuyến 58
7.2.12 Bảng TrungGian 59
7.2.13 Bảng ChiTietTuyen 60
7.2.14 Bảng Nhom 60
7.2.15 Bảng NguoiDung 60
7.2.16 Bảng ChucNang 61
7.2.17 Bảng ChiTietChucNang 61
7.3 Thiết kế giao diện 62
Trang 76
7.3.1 Giao diện phân hệ tra cứu trên nền web 62
7.3.2 Giao diện quản trị phân hệ web 67
7.3.3 Giao diện phân hệ tra cứu trên thiết bị di động 99
8 Cài đặt 109
8.1 Cài đặt phân hệ quản trị web 109
8.2 Cài đặt phân hệ tra cứu trên nền web 109
8.3 Cài đặt phân hệ tra cứu trên mobile 110
9 Tổng kết 110
9.1 Kết luận 110
9.1.1 Những kết quả đạt được về mặt lý thuyết 110
9.1.2 Những kết quả đạt được về mặt ứng dụng 110
9.2 Hướng phát triển 111
TÀI LIỆU THAM KHẢO 112
PHỤ LỤC: MÃ NGUỒN PHẦN MINH HỌA KỸ THUẬT 113
1 Kỹ thuật lập trình với các điều khiển 113
1.1 ListView 113
1.1.1 Xây dựng giao diện 113
1.1.2 Xây dựng xử lý 115
1.2 GridView 117
1.2.1 Xây dựng giao diện 117
1.2.2 Xây dựng xử lý 118
1.3 Spinner View, DatePicker 121
1.3.1 Xây dựng giao diện 121
5.3.2 Xây dựng xử lý 123
1.4 TabHost View 126
1.4.1 Xây dựng giao diện 126
1.4.2 Xây dựng xử lý 128
1.5 Gallery và ImageView 128
Trang 87
1.5.1 Xây dựng giao diện 128
1.5.2 Xây dựng xử lý 129
2 Kỹ thuật lập trình với SQLite 131
2.1 Xây dựng giao diện 131
2.2 Xây dựng xử lý 136
3 Kỹ thuật lập trình với Web Service 144
3.1 Xây dựng giao diện 144
3.2 Xây dựng xử lý 148
4 Demo lập trình phát audio, video 153
4.1 Xây dựng giao diện 153
4.2 Xây dựng xử lý 155
Trang 98
Bảng các thuật ngữ và các từ viết tắt
hỗ trợ cho phần mềm Eclipse trong việc phát triển ứng dụng Android
Google và dựa trên nền tảng Linux
điện thoại di động, cho phép truyền cả dữ liệu thoại và
dữ liệu ngoài thoại (tải dữ liệu, gửi email, tin nhắn nhanh, hình ảnh )
ngữ đánh dấu siêu văn bản được thiết kế ra để tạo nên các trang web
gọi là môi trường phát triển tích hợp
phát triển ứng dụng phần mềm
chuẩn của W3C, là giao thức sử dụng XML để định nghĩa dữ liệu dạng thuần văn bản thông qua giao thức HTTP
tham chiếu tới tài nguyên trên mạng Internet
từ xa thông qua một địa chỉ
server hoặc workstation và cung cấp những chức năng
mà sự diễn tiến của nó không cần sự tương tác trực tiếp của người dùng
Trang 109
Danh mục các bảng biểu
Bảng 6.1 - Đặc tả use case tra cứu giờ tàu, xe 34
Bảng 6.2 - Đặc tả use case tra cứu hành trình tàu, xe 35
Bảng 6.3 - Đặc tả use case tra cứu giá vé tàu, xe 36
Bảng 6.4 - Đặc tả use case gọi đặt vé tàu, xe 36
Bảng 6.5 - Đặc tả use case chia sẻ thông tin kết quả tra cứu 37
Bảng 6.6 - Đặc tả use case xem lược sử tra cứu 37
Bảng 6.7 - Đặc tả use case đăng nhập 39
Bảng 6.8 - Đặc tả use case nhập liệu 39
Bảng 6.9 - Đặc tả use case phân quyền 40
Bảng 7.1 - Mô tả thực thể Hang 47
Bảng 7.2 - Mô tả thực thể PhuongTien 47
Bảng 7.3 - Mô tả thực thể LoaiPhuongTien 47
Bảng 7.4 - Mô tả thực thể Phim 48
Bảng 7.5 - Mô tả thực thể HinhAnh 48
Bảng 7.6 - Mô tả thực thể DiaDiem 48
Bảng 7.7 - Mô tả thực thể Tuyen 49
Bảng 7.8 - Mô tả thực thể TrungGian 49
Bảng 7.9 - Mô tả thực thể LoaiGhe 49
Bảng 7.10 - Mô tả thực thể Gia 50
Bảng 7.11 - Mô tả thực thể DoiTuong 50
Bảng 7.12 - Mô tả thực thể KhuyenMai 50
Bảng 7.13 - Mô tả thực thể ChiTietTuyen 50
Bảng 7.14 - Mô tả thực thể ChiTietViTri 51
Bảng 7.15 - Mô tả bảng Hang 53
Bảng 7.16 - Mô tả bảng Phim 53
Bảng 7.17 - Mô tả bảng LoaiPhuongTien 54
Trang 1110
Bảng 7.18 - Mô tả bảng ChiTietHang 54
Bảng 7.19 - Mô tả bảng PhuongTien 54
Bảng 7.20 - Mô tả bảng HinhAnh 55
Bảng 7.21 - Mô tả bảng KhuyenMai 56
Bảng 7.22 - Mô tả bảng Gia 56
Bảng 7.23 - Mô tả bảng ChiTietViTri 57
Bảng 7.24 - Mô tả bảng LoaiGhe 58
Bảng 7.25 - Mô tả bảng Tuyen 58
Bảng 7.26 - Mô tả bảng TrungGian 59
Bảng 7.27 - Mô tả bảng ChiTietTuyen 60
Bảng 7.28 - Mô tả bảng Nhom 60
Bảng 7.29 - Mô tả bảng NguoiDung 60
Bảng 7.30 - Mô tả bảng ChucNang 61
Bảng 7.31 - Mô tả bảng ChiTietChucNang 61
Trang 1211
Danh mục các hình ảnh
Hình 2.1 - Giao diện điều khiển ListView 17
Hình 2.2 - Giao diện điều khiển GridView 18
Hình 2.3 - Giao diện minh họa Spinner View và Datepicker 19
Hình 2.4 - Giao diện điều khiển TabHost 20
Hình 2.5 - Giao diện điều khiển Gallery và ImageView 21
Hình 3.1 - Giao diện ứng dụng minh họa SQLite 24
Hình 4.1 - Minh họa kết quả sau khi gọi web service 27
Hình 4.2 - Mô hình kết nối gọi Web Service và giao diê ̣n minh ho ̣a 27
Hình 4.3 - Hình minh họa việc chèn thư viện KSOAP2 vào ứng dụng 28
Hình 5.1 - Minh họa phát tập tin video và audio 31
Hình 6.1 - Kiến trúc ứng dụng tra cứu thông tin tàu xe 32
Hình 6.2 - Sơ đồ use case của người dùng cuối 34
Hình 6.3 - Sơ đồ use case của người quản trị hệ thống tàu, xe 38
Hình 6.4 - Quy trình xử lý nghiệp vụ tra cứu giờ tàu, xe trên thiết bị di động 41
Hình 6.5 - Quy trình xử lý nghiệp vụ tra cứu lộ trình tàu, xe trên thiết bị di động 41
Hình 6.6 - Quy trình xử lý nghiệp vụ tra cứu giá vé tàu, xe trên thiết bị di động 42
Hình 6.7 - Quy trình xử lý nghiệp vụ tra cứu trên nền web 43
Hình 6.8 - Quy trình xử lý nghiệp vụ nhập liệu trên web server 44
Hình 6.9 - Quy trình xử lý nghiệp vụ phân quyền 45
Hình 7.1 - Sơ đồ CDM 46
Hình 7.2 - Sơ đồ vật lý PDM 52
Hình 7.3 - Giao diện trang tra cứu 62
Hình 7.4 - Giao diện kết quả khi không cung cấp loại phương tiện và hãng 63
Hình 7.5 - Giao diện kết quả tra cứu khi cung cấp thông tin hãng vận chuyển 63
Hình 7.6 - Giao diện kết quả tra cứu khi cung cấp thông tin loại phương tiện 64
Hình 7.7 - Giao diện kết quả khi cung cấp loại phương tiện và hãng 64
Trang 1312
Hình 7.8 - Giao diện thông tin lộ trình của tuyến 65
Hình 7.9 - Giao diện thông tin giá vé trên các trạm của tuyến 66
Hình 7.10 - Giao diện thông tin giá vé giữa các trạm của tuyến 66
Hình 7.11 - Giao diện thể hiện hình ảnh của phương tiện 67
Hình 7.12 - Giao diện màn hình đăng nhập 67
Hình 7.13 - Activity biểu diễn Use case đăng nhập 68
Hình 7.14 – Giao diện màn hình chính của trang quản trị 69
Hình 7.15 - Giao diện màn hình quản lý phương tiện dành cho nhân viên hệ thống 69 Hình 7.16 - Activity biểu diễn use case nhập liệu 70
Hình 7.17 - Giao diện màn hình quản lý phương tiện cho các đối tượng khác 71
Hình 7.18 - Activity biểu diễn use case nhập liệu 72
Hình 7.19 - Giao diện quản lý tuyến đối với nhân viên nhập liệu hệ thống 73
Hình 7.20 - Activity biểu diễn use case nhập liệu 74
Hình 7.21 - Giao diện quản lý tuyến đối với các đối tượng khác 75
Hình 7.22 - Activity biểu diễn use case nhập liệu 76
Hình 7.23 - Giao diện quản lý hãng đối với nhân viên nhập liệu hệ thống 77
Hình 7.24 - Activity biểu diễn use case nhập liệu 78
Hình 7.25 - Giao diện quản lý hãng đối với các đối tượng khác 79
Hình 7.26 - Activity biểu diễn use case nhập liệu 80
Hình 7.27 - Giao diện quản lý tài khoản đối với nhân viên nhập liệu hệ thống 81
Hình 7.28 - Activity biểu diễn use case nhập liệu 82
Hình 7.29 - Giao diện quản lý tài khoản đối với các nhóm đối tượng khác 83
Hình 7.30 - Activity biểu diễn use case nhập liệu 84
Hình 7.31 - Giao diện quản lý nhóm người dùng 85
Hình 7.32 - Activity biểu diễn use case nhập liệu 86
Hình 7.33 - Giao diện danh mục địa điểm 87
Hình 7.34 - Activity biểu diễn use case nhập liệ 88
Hình 7.35 - Giao diện danh mục hình ảnh đối với nhân viên hệ thống 89
Trang 1413
Hình 7.36 - Activity biểu diễn use case nhập liệu 90
Hình 7.37 - Giao diện danh mục hình ảnh đối với các đối tượng khác 91
Hình 7.38 - Activity biểu diễn use case nhập liệu 92
Hình 7.39 - Giao diện danh mục phim đối với nhân viên hệ thống 93
Hình 7.40 - Activity biểu diễn use case nhập liệu 94
Hình 7.41 - Giao diện danh mục phim đối với các đối tượng khác 95
Hình 7.42 - Activity biểu diễn use case nhập liệu 96
Hình 7.43 - Giao diện danh mục loại ghế 96
Hình 7.44 - Giao diện danh mục đối tượng 97
Hình 7.45 - Giao diện danh mục loại phương tiện 97
Hình 7.46 - Giao diện danh mục khuyến mãi 98
Hình 7.47 - Giao diện danh mục nhóm chức năng 98
Hình 7.48 - Giao diện màn hình chính ứng dụng 99
Hình 7.49 - Giao diện màn hình lược sử tra cứu 99
Hình 7.50 - Activity biểu diễn use case lược sử tra cứu 100
Hình 7.51 - Giao diện màn hình Giới thiệu 101
Hình 7.52 – Giao diện màn hình hướng dẫn sử dụng 101
Hình 7.53 – Giao diện màn hình tra cứu 102
Hình 7.54 - Activity biểu diễn Use case tra cứu tàu, xe 103
Hình 7.55 - Giao diện màn hình danh sách phương tiện 104
Hình 7.56 - Giao diện màn hình thể hiển giờ chạy tàu, xe 104
Hình 7.57 - Activity biểu diễn Use case xem giờ chạy tàu, xe 105
Hình 7.58 - Giao diện màn hình thể hiện lộ trình 106
Hình 7.59 - Activity biểu diễn Use case xem lộ trình tàu, xe 106
Hình 7.60 - Giao diện màn hình thể hiện giá vé 107
Hình 7.61 - Activity biểu diễn Use case xem giá vé tàu, xe 108
Hình 7.62 - Giao diện màn hình thể hiện lộ trình trên bản đồ 109
Trang 1514
Lời nói đầu
Ngày nay khi các thiết bị cầm tay trở nên phổ biến, cũng như sự phát triển lớn mạnh của các hệ thống viễn thông làm cho các dịch vụ phục vụ nhu cầu con người trên thiết bị cầm tay ngày càng phổ biến Đặc biệt là các dịch vụ tra cứu trực tuyến trên thiết bị cầm tay, nó được dự đoán là rất phát triển khi mà công nghệ mạng 3G đang được phát triển một cách rộng rãi, đem lại cho người dùng tốc độ truyền tải dữ liệu rất nhanh Cùng với
đó là sự ra đời của hệ điều hành mã nguồn mở Android có khả năng tùy biến cao, có thể coi đây là một bước tiến trong lĩnh vực công nghệ
Theo comScore, thị trường điện thoại thông minh Mỹ thời gian gần đây có nhiều dấu hiệu cho thấy hệ điều hành Android của Google đã chế ngự hoàn toàn hệ điều hành iOS của Apple và BlackBerry của RIM Chỉ trong quý đầu tiên của năm 2011, đã có đến 69,5 triệu người Mỹ sử dụng loại điện thoại này, tăng 13% so với cuộc khảo sát tương tự kết thúc vào tháng 11/2010 33% số người dùng điện thoại tuổi từ 13 trở lên tham gia cuộc khảo sát cho biết họ thích hệ điều hành Android, 28,9% thích các dòng điện thoại BlackBerry của RIM, trong khi chỉ có 25,2% người sử dụng chọn các sản phẩm của Apple Với những con số đó đã nói lên sự phát triển vượt bậc, tính ưu việt và tiềm năng phát triển của hệ điều hành Android lớn đến mức nào
Khi nhu cầu thông tin ngày càng phát triển, người dùng sẽ muốn truy cập hoặc tìm kiếm thông tin mọi lúc, mọi nơi Không phải lúc nào người dùng cũng có thể sử dụng laptop hay desktop để tìm kiếm thông tin Hơn nữa, ngày nay điện thoại thông minh đầy
đủ chức năng, cấu hình cao, có giá thành rẻ và ngày càng được phổ biến Do đó việc xây dựng các ứng dụng trên thiết bị di động sẽ trở thành một ngành công nghiệp hứa hẹn sẽ có tốc độ phát triển nhanh trong những năm tới
Dân số trung bình cả nước năm 2011 ước tính 87,84 triệu người (Tổng cục Thống kê), nhu cầu đi lại vào các dịp lễ, tết thường rất lớn Do đó nhu cầu thông tin về giá vé
Trang 1615
tàu, xe thường rất lớn nhưng nguồn thông tin cung cấp lại thường rất ít Hiện nay ở trong nước cũng có một số ứng dụng tra cứu như thông tin các tuyến xe buýt (ứng dụng VietBus) được xây dựng lên để đáp ứng nhu cầu đi lại với xe buýt Tuy nhiên, các ứng
minh dùng hệ điều hành Android vẫn chưa được quan tâm và phát triển đúng mức Vì những lý do trên mà chúng em quyết định đi sâu nghiên cứu, tìm hiểu kỹ thuật lập trình trên Android để xây dựng một ứng dụng tra cứu thông tin về tàu, xe trên thiết bị di động
sử dụng hệ điều hành mã nguồn mở Android
Đề tài của nhóm chủ yếu hướng đến hai vấn đề chính sau đây:
Một là, xây dựng ứng dụng tra cứu thông tin các hãng tàu, xe trên Android có các chức năng chính sau:
- Cho phép tra cứu thông tin giờ chạy, lộ trình, giá vé với điểm đi và điểm đến do người dùng cung cấp
- Cho phép chia sẻ thông tin tra cứu thông qua các ứng dụng như SMS, Facebook, Gmail
- Cho phép xem lại lược sử các tra cứu gần đây nhất của người dùng
về các hãng tàu, xe Bên cạnh đó là việc hỗ trợ lấy tin tĩnh từ trang web dạng HTML của hãng tàu, xe
Luận văn đươ ̣c trình bày gồm 2 phần chính:
Phần 1: giới thiê ̣u về mô ̣t số kỹ thuâ ̣t lâ ̣p trình cơ bản trên Android
Mă ̣c dù chúng em đã đầu tư khá nhiều công sức và thì giờ vào luâ ̣n văn này nhưng chắc chắn cũng không tránh khỏi những sai sót Chúng em rất mong nhận được những ý kiến đóng góp và sự thông cảm của quý thầy cô Xin chân thành cảm ơn
Anh Toàn & Công Minh
Trang 1716
Nô ̣i Dung Luâ ̣n Văn
PHẦN 1: TÌM HIỂU VỀ KỸ THUẬT LẬP TRÌNH TRÊN ANDROID
1 Các bước để tiến hành lập trình trong Android
Không giống như iOS, SDK chạy hệ điều hành Android có thể hoạt động được trên
hình máy tính hiện nay đều có thể tải về và sử dụng được bộ công cụ lập trình lập trình này Thêm nữa, các nền tảng và các bộ công cụ lập trình của Android đều miễn phí Do
đó các nhà phát triển có thể tải về trực tiếp các bộ công cụ lập trình này trên trang chủ của người phát hành Để có thể bắt đầu lập trình trên hệ điều hành Android, một số phần mềm sau sẽ cần phải được cài đặt :
1.1 Java Runtime Environment (JRE)
Bộ JRE giúp làm nền tảng để chạy các ứng dụng trên hệ điều hành Android Tại thời điểm hiện tại thì bộ Java Platform mới nhất là JRE 7 Chúng ta có thể vào trang
http://www.oracle.com/technetwork/java để tải về và cài đặt vào máy Nên cài đặt theo đường dẫn mặc định mà phần mềm đã gợi ý để tránh những khó khăn khi tham chiếu đến các thư mục sau này khi lập trình
1.3 Android SDK
Trang 1817
Là gói hỗ trợ lập trình trên hệ điều hành Android Chúng ta có thể vào trang web :
http://developer.android.com/sdk/index.html và tải về bản SDK phù hợp cho mình.Công
đường dẫn của nó) và tiến hành cài đặt
1.4 Android ADT
Đây là một trình cắm thêm (plug-in) dành cho Eclipse IDE nhằm mang lại các tính năng mạnh mẽ, môi trường tích hợp để xây dựng các ứng dụng trên hệ điều hành Android Công việc tiếp theo là tiến hành tải về và cài đặt trình cắm thêm này vào
>> Android SDK and AVD Manager Khi cửa sổ mới hiện ra thì chúng ta sẽ đánh dấu vào tất cả các Packages hiện có và tiến hành cài đặt chúng Sau khi cài đặt xong, chúng ta
đã có thể sử dụng
2 Kỹ thuật lập trình với các điều khiển
2.1 ListView
2.1.1 Yêu cầu đặt ra
Sử dụng điều khiển ListView xây dựng giao diện hiển thị chi tiết lộ trình mà phương
tiện vận chuyển sẽ đi qua Giao diện đơn giản như sau :
Hình 2.1 - Giao diện điều khiển ListView
Trang 1918
2.1.2 Giải quyết
Để thực hiện được yêu cầu trên, chúng ta sẽ thực hiện theo các bước chính sau:
getCount(), getItem(), getItemId(), getView() để thực hiện việc gắn kết dữ liệu đến điều khiển ListView
ListView Thông qua hàm setListAdapter() để đổ dữ liệu và hiển thị lên ListView Ngoài
ra, để thiết lập xử lý khi chọn một mục tin, ta dùng hàm onListItemClick() Chi tiết xin
xem thêm trong phần Phụ lục mục 1.1
2.2 GridView
2.2.1 Yêu cầu đặt ra
Sử dụng điều khiển GridView xây dựng giao diện màn hình của ứng dụng như sau:
Hình 2.2 - Giao diện điều khiển GridView
2.2.2 Giải quyết
Để thực hiện được yêu cầu trên, chúng ta sẽ thực hiện theo các bước chính sau :
Trang 2019
getCount(), getItem(), getItemId(), getView() để thực hiện việc gắn kết dữ liệu đến điều khiển GridView
Thông qua hàm setAdapter() để đổ dữ liệu và hiển thị lên GridView Ngoài ra, để thiết lập
xử lý khi chọn một mục tin, ta thiết lập setOnItemClickListener() cho GridView và hiện
thực hàm onItemClick() Chi tiết xin xem thêm trong phần Phụ lục mục 1.2
2.3 Spinner View, DatePicker
2.3.1 Yêu cầu đặt ra
Sử dụng điều khiển Spinner và DatePicker xây dựng giao diện tra cứu thông tin tàu,
xe Khi người dùng chọn ngày tra cứu, hộp thoại DatePicker sẽ được hiển thị cho phép thiết lập ngày tháng và chọn điểm đi, điểm đến, loại phương tiện, hãng vận chuyển qua Spinner Giao diện đơn giản như sau:
Hình 2.3 - Giao diện minh họa Spinner View và Datepicker
2.3.2 Giải quyết
Trang 2120
Để thực hiện được yêu cầu trên, chúng ta sẽ thực hiện theo các bước chính sau :
Spinner, DatePicker Gắn kết dữ liệu lên điều khiển Spinner bằng cách tạo một thể hiển của lớp ArrayAdapter, sau đó gọi hàm setAdapter() để thực thi Để hiển thị hộp thoại DatePicker ta cần nạp chồng hàm onCreateDialog() Thông tin ngày tháng khi cập nhật trong hộp thoại được xử lý thông qua hàm onDateSet(), tai đây ta có thể lấy thông tin
2.4 TabHost View
2.4.1 Yêu cầu đặt ra
Sử dụng điều khiển TabHost đã được tùy chỉnh xây dựng chức năng cho phép người
dùng tùy chọn Tab hiển thị theo từng mục đích sử dụng trong ứng dụng Khi người dùng nhấn vào từng mục trong Tab thì giao diện sẽ được thay đổi cho phù hợp với từng loại Tab như hình sau :
Hình 2.4 - Giao diện điều khiển TabHost
Trang 2221
2.4.2 Giải quyết
Để thực hiện được yêu cầu trên, chúng ta sẽ thực hiện theo các bước chính sau :
Bước 1: định nghĩa giao diện tab trong tệp XML Sau đó tạo một lớp thừa kế từ lớp TabActivity để hiển thị giao diện đã định nghĩa
TabHost Ta có thể chỉ định nội dung hiển thị và biểu tượng hình ảnh (văn bản) của tab lần lượt thông qua hàm setContent() và setIndicator()
đã tạo trước đó liên kết với các tab trong điều khiển TabHost Chi tiết xin xem thêm trong
phần Phụ lục mục 1.4
2.5 Gallery và ImageView
2.5.1 Yêu cầu đặt ra
Sử dụng điều khiển Gallery và ImageView xây dựng chức năng cho phép người
dùng xem danh sách hình ảnh phương tiện vận chuyển Khi người dùng chọn các mục hình ảnh trong Gallery thì hình đó sẽ được hiển thị ở kích cở lớn hơn trên ImageView Giao diện trình bày như hình sau :
Hình 2.5 - Giao diện điều khiển Gallery và ImageView
Trang 2322
2.5.2 Giải quyết
Để thực hiện được yêu cầu trên, chúng ta sẽ thực hiện theo các bước chính sau :
getCount(), getItem(), getItemId(), getView() để thực hiện việc gắn kết hình ảnh lên điều khiển Gallery
Thông qua hàm setAdapter() đổ hình ảnh và hiển thị lên Gallery Ngoài ra, để thiết lập xử
lý khi chọn một mục hình ảnh ta thiết lập hàm setOnItemClickListener() cho Gallery và
hiện thực hàm onItemClick() Chi tiết xin xem thêm trong phần Phụ lục mục 1.5
3 Kỹ thuật lập trình với SQLite
thời điểm chạy ứng dụng thì ta làm như sau:
Tạo một lớp thừa kế từ SQLiteOpenHelper, dùng để mở, đóng cơ sở dữ liệu, quản lý việc tạo cơ sở dữ liệu cũng như phiên bản của nó thông qua các hàm onCreate(), open(), close() và onUpgrade() Ngoài ra trong lớp này, ta có thể định nghĩa các hàm dùng cho việc thêm, xóa, sửa các dòng trong cơ sở dữ liệu Một số hàm thường dùng của lớp SQLiteOpenHelper
được dùng để tạo cơ sở dữ liệu (nếu chưa có)
Trang 2423
SQLiteDatabase, số chỉ phiên bản cũ, số chỉ phiên bản mới của cơ sở dữ liệu, được dùng
để cập nhật cơ sở dữ liệu
mở một cơ sở dữ liệu (chỉ cho phép đọc, không ghi)
mở một cơ sở dữ liệu (cho phép ghi)
Để thực hiện việc truy vấn, thêm, xóa, sửa dữ liệu ta dùng lớp SQLiteDatabase Một
số hàm thường dùng của lớp này :
Ta cần dùng một số hàm để lướt trên dòng dữ liệu như moveToFirst() để dịch chuyển đến dòng đầu tiên, còn moveToLast() đến dòng cuối cùng , moveToNext() đến dòng tiếp theo dòng hiện tại, moveToPrevious() đến dòng trước dòng hiện tại, getCount() lấy số lượng
- String table: tên của bảng sẽ được thực hiện truy vấn
- String[] columns: danh sách các cột cần lấy Nếu “null” sẽ lấy tất cả các cột
- String selection : điều kiện lọc Nếu “null” sẽ lấy tất cả
- String[] selectionArgs : danh sách các giá trị dùng để thay thế “?” trong tham số selection
- String groupBy: điều kiện gom nhóm, định dạng tương tự như GROUP BY trong SQL
- String having: điều kiện lọc cho các dòng khi gom nhóm, định dạng tương tự như mệnh đề HAVING trong SQL
- String orderBy: sắp xếp, định dạng tương tự như mệnh đề ORDER
BY trong SQL
Hàm insert() có 3 tham số và giá trị trả về là mã của dòng mới nhất được chèn, nếu thất bại trả về -1
- String table: bảng cần chèn dữ liệu
- String nullColumnHack : dùng để tối ưu, có thể “null” SQL không cho phép thêm một hàng trống vào mà không biết ít nhất tên của một cột Nếu tham số
Trang 2524
values là rỗng sẽ không có dòng nào được thêm vào Trường hợp này, ta có thể giải quyết bằng cách truyền tên một cột được phép “null” vào nullColumnHack
- ContentValue values: giá trị ở dạng cặp {“khóa”,”giá trị”}
- String table: bảng cần cập nhật
- ContentValues values: (column_name, value)
- String whereClause: điều kiện “where” cập nhật, null sẽ cập nhật tất
cả các dòng
- String[] whereArgs: các tham số trong whereClause
- String table: bảng cần xóa
- String whereClause: null nếu xóa tất cả các dòng
- String[] whereArgs: các tham số cho whereClause
Trang 2625
3.2.2 Giải quyết
Các bước chính để thực hiện minh họa trên như sau:
Bước 1: xây dựng lớp thực hiện việc tạo, cập nhật cơ sở dữ liệu cũng như định nghĩa các thao tác truy vấn, thêm, xóa, sửa Cấu trúc chính như sau:
onCreate() và onUpdate() để phục vụ việc tạo, cập nhật cơ sở dữ liệu
phụ lục
Bước 2: tạo lớp thừa kế từ ListActivity để xây dựng màn hình chính Trong minh họa này, khi người dùng ấn vào mục tin trong ListView thì sẽ hiển thị hộp thoại cho phép cập nhật, xóa thông tin Để xử lý khi mục tin trên ListView được chọn, ta nạp chồng hàm onListItemClick, onCreateDialog() và onPrepareDialog() để hiển thị hộp thoại Bên cạnh
đó, để xử lý sự kiện khi người dùng nhấn vào các điều khiển Button, ta hiện thực giao diện OnClickListener() để xử lý sự kiện trong hàm onClick()
Bước 3: tạo lớp thừa kế từ BaseAdapter để thực hiện gắn kết dữ liệu từ cơ sở dữ liệu lên điều khiển ListView trong màn hình chính Các hàm cần nạp chồng là getCount(), getItem(), getItemId(), getView() lần lượt dùng định nghĩa hàm lấy số lượng, thông tin,
lục mục 2
4 Kỹ thuật lập trình với Web Service
4.1 Dạng SOAP (Simple Object Access Protocol)
Để gọi Web Service dạng SOAP, ta sẽ dùng thư viện KSOAP2 Có thể tải thư viện này tại địa chỉ sau :
http://www.4shared.com/file/uOhx5aoj/ksoap2-android-assembly-24-jar.html Trong thư viện này, việc thực hiện yêu cầu đến Web Service cũng như nhận kết quả trả về thường thông qua lớp SoapObject Có 3 tham số quan trọng được yêu cầu : không
Trang 2726
gian tên, tên phương thức dùng, địa chỉ URL của Web Service Ngoài ra, có một tham số mở rộng khác cũng quan trọng không kém là SOAP_ACTION, nó là sự kết hợp giữa không gian tên và tên phương thức bằng công thức sau:
SOAP_ACTION = NAMESPACE + METHOD_NAME Các bước sau sẽ giúp thực hiện một lời gọi Web Service với KSOAP2 :
không gian tên và tên phương thức (hàm) của dịch vụ
dùng hàm addProperty() Hàm này có 2 tham đối lần lượt là tên biến cần truyền tham trị
và giá trị của nó
tin khác như: phiên bản SOAP, Web Service có dựa trên NET hay không, thiết lập đầu ra cho thông điệp kết quả
của Web Service cần gọi
Bước 5: thực hiện lời gọi call() từ đối tượng HttpTransportSE, với 2 tham số truyền vào là SOAP_ACTION và đối tượng SoapSerializationEnvelope đã tạo
SoapSerializationEnvelope bằng hàm getResponse() khi kết quả trả về là một kiểu chuỗi hay bằng thuộc tính bodyIn khi kết quả trả về là một kiểu danh sách
4.2 Ví dụ minh họa
4.2.1 Đặt vấn đề
Chúng ta sẽ tạo một ứng dụng minh họa hiển thị chi tiết lộ trình tàu lửa bằng việc gọi Web Service xây dựng bằng NET (dạng SOAP) Web Service này có tham số đầu vào là mã tuyến, điểm đi, điểm đến Kết quả đầu ra với thông tin gồm thông tin chính như tên trạm trên lộ trình, thời gian đi, thời gian đến , cự ly chặng Ví dụ kết quả gọi Web Service với mã tuyến là 154, điểm đi là Sài Gòn, điểm kết thúc là Nha Trang dạng như sau:
Trang 2827
Hình 4.1 - Minh họa kết quả sau khi gọi web service
Mô hình kết nối Web Service và giao diện chương trình đơn giản như sau:
SQL Server
Web Service
(.NET)
Gọi Web Service nhận dữ liệu
Truy xuất lấy dữ liệu
Hình 4.2 - Mô hình kết nối gọi Web Service và giao diện minh họa
Trang 2928
4.2.2 Giải quyết
viện, ta sẽ có một tệp có định dạng là jar Để chèn thư viện đó vào ứng dụng, ta chỉ cần chọn nhấn chuột phải vào tên dự án ứng dụng, sau đó chọn Properties>Java build path>Libraries>Add External Jars >chọn đường dẫn đến thư viện đã tải về>OK
Hình 4.3 - Hình minh họa việc chèn thư viện KSOAP2 vào ứng dụng
hình Lớp này cũng sẽ hiện thực giao diện OnClickListener, nạp chồng hàm onClick() để
xử lý sự kiện khi người dùng ấn vào nút thực hiện gọi Web Service lấy thông tin chi tiết
về lộ trình Xin xem thêm chi tiết trong phần Phụ lục mục 3
5 Phát audio, video trong Android
5.1 Giới thiệu
5.1.1 Phát audio
Trang 3029
Để phát tập tin audio, ta sử dụng lớp MediaPlayer Lớp này có thể dùng để điều khiển việc phát các tập tin audio, video Một số phương thức thường dùng của lớp MediaPlayer :
video phát
setVideoPath(): thiết lập nguồn dữ liệu phát video
start(): bắt đầu phát audio, video
MediaPlayer
prepare() và prepareAsync(): thao tác chuẩn bị cho việc phát audio, video dùng lần lượt cho trường hợp đồng bộ và bất động bộ
, video đã được phát hoàn thành
video đã được nạp vào và sẳn sàng để phát
trong quá trình phát audio, video
Để phát một tâ ̣p tin audio, ta có thể làm như sau :
phát
phát audio
Trang 3130
Chú ý: khi gọi hàm stop() để dừng việc phát, nhưng sau đó muốn phát lại thì phải
gọi lần lượt các hàm reset(), prepare(), start()
5.1.2 Phát video
Việc phát tập tin video phức tạp hơn so với việc phát tập tin audio sử dụng API của MediaPlayer, một phần vì chúng ta phải cung cấp thêm một bề mặt hiển thị video được phát Tuy nhiên, Android cung cấp một widget gọi là VideoView giúp giải quyết khó khăn trên Thêm nữa, nó còn cung cấp một số tùy chỉnh để hiển thị phù hợp với nhu cầu người sử dụng
Chú ý:
trên một số máy tính và hệ điều hành
vậy, chúng phải được đặt trong thẻ nhớ SD Card của AVD đó
Để phát một tâ ̣p tin video, ta có thể làm như sau:
trực tiếp ở một đường dẫn trên mạng hoặc setVideoPath() để truyền vào một đường dẫn video thông thường như từ thẻ nhớ chẳng hạn Để phát được đường dẫn video ở trên mạng, ta cần khai báo quyền android.permission.INTERNET để cho phép truy cập mạng
điều khiển như rewind, pause, play, forward… ta có thể tạo một thể hiện từ lớp MediaController, sau đó thiết lập nó đến VideoView qua hàm setMediaController()
Ngoài ra để phát một video từ YouTube, ta có có thể sử dụng đối tượng Intent với tham số ACTION_VIEW Nếu thiết bị đã cài đặt ứng dụng YouTube thì ứng dụng này sẽ được gọi, ngược lại trình duyệt của thiết bị sẽ hiển thị video Cách sử dụng đơn giản như sau :
startActivity(newIntent(Intent.ACTION_VIEW, Uri.parse("URL_VIDEO")));
với URL_VIDEO là đường dẫn video trên youtube cần phát
Trang 325.2.2 Giải quyết
Các bước chính để thực hiện minh họa trên như sau :
.3gp) được Android hỗ trợ từ thẻ nhớ lên ListView của màn hình hiển thị danh sách bài hát Lấy đường dẫn truy cập thẻ nhớ thiết bị bằng cách gọi hàm Enviroment.getExternalStorageDirectory().getAbsolutePath(), sau đó tải các tập tin có định dạng audio, video được hỗ trợ vào danh sách bài hát Tất nhiên để truy cập được thẻ nhớ, ta cần khai báo quyền WRITE_EXTERNAL_STORAGE
Bước 2: tạo và sử dụng đối tượng MediaPlayer để phát bài hát loại audio khi người dùng chọn bài hát audio
người dùng chọn bài hát video
Trang 33Thông tin chi tiết tàu, xe Kết quả tra cứu
Web Services
Database
Quản lý thông tin tàu, xe
Back-end
SQL Server
Giao diện tra cứu tàu, xe trên nền Web
Kết quả tra cứu
Trang web của công ty vận tải
Window Service (Lập lịch) Lấy dữ liệu thông qua HTML
Hình 6.1 - Kiến trúc ứng dụng tra cứu thông tin tàu xe
Trang 3433
Kiến trúc hệ thống tra cứu tàu, xe gồm :
tin tàu, xe trên nền web ASP.NET
Phân hệ tra cứu trên nền thiết bị di động chạy hệ điều hành Android : người dùng thực hiện việc tra cứu thông tin tàu, xe trên thiết bị di động chạy hệ điều hành Android Ứng dụng này hoạt động bằng việc gọi các Web Service tương ứng với thông tin người dùng cung cấp thông qua mạng Internet, sau đó thông tin chi tiết về tàu (xe) sẽ được trả về cho người dùng
Phân hệ quản trị trên web server ASP.NET : trong phân hệ này, người quản trị hệ thống sẽ quản lý thông tin về tàu, xe thông qua ứng dụng quản lý trên nền web (ASP.NET) Ứng dụng quản lý này truy xuất cơ sở dữ liệu từ hệ quản trị Microsoft SQL Server, để thực hiện các thao tác của người quản trị hệ thống Ngoài việc nhập liệu từ web server thì dữ liệu cũng sẽ được lấy từ các trang HTML của một số hãng vận tải thông qua Window Service được lập lịch thực hiện theo định kỳ
6.2 Các sơ đồ đặc tả yêu cầu
6.2.1 Sơ đồ Use-case
Trang 35Tra cứu lộ trình tàu, xe
Xem lược sử tra cứu
Chia sẻ thông tin tra cứu
Gọi đặt vé tàu, xe
Xem thông tin hãng
Hình 6.2 - Sơ đồ use case của người dùng cuối
Người dùng sẽ được cung cấp các thông tin về lộ trình, giờ đi, đến và tất cả các giá
vé trên tuyến tra cứu Ngoài ra, người dùng cũng có thể chia sẻ thông tin tra cứu của mình lên trên qua các ứng du ̣ng như SMS , Gmail, Facebook để bạn bè được biết Và người dùng cũng có thể lưu lại lược sử tra cứu để xem lại bất cứ lúc nào khi cần thiết mà không cần phải thực hiện lại việc tra cứu Một tiện ích khác là người dùng được cung cấp số điện thoại và chức năng gọi điện thoại ngay trên ứng dụng để thực hiện cuộc gọi tới các hãng vận chuyển
Bảng 6.1 - Đặc tả use case tra cứu giờ tàu, xe
Use Case Name Tra cứu giờ tàu, xe
Trang 36tiện, danh sách phương tiện của tất cả các hãng thỏa yêu cầu được hiển thị
Bảng 6.2 - Đặc tả use case tra cứu hành trình tàu, xe
Use Case Name Tra cứu hành trình tàu, xe
Action Steps 1 Người dùng chọn xem hành trình 2 Hệ thống hiển thị thông tin chi tiết về hành trình tàu,
xe Extension Points
Trang 3736
Bảng 6.3 - Đặc tả use case tra cứu giá vé tàu, xe
Use Case Name Tra cứu giá vé tàu, xe
Action Steps
1 Người dùng chọn xem giá vé tàu, xe
2 Thông tin chi tiết về giá vé tàu, xe được hiển thị Extension Points
3 Hệ thống hiển thị thông tin kết quả không hợp lý do
dữ liệu bị sai
Bảng 6.4 - Đặc tả use case gọi đặt vé tàu, xe
Use Case ID UC 4
Use Case Name Gọi đặt vé tàu, xe
Trang 3837
gọi
không tồn tại trong thực tế
được thực hiện
Bảng 6.5 - Đặc tả use case chia sẻ thông tin kết quả tra cứu
Use Case Name Chia sẻ thông tin kết quả tra cứu
(lộ trình, giá vé, giờ chạy)
2 Chọn chức năng chia sẻ thông tin tra cứu
Extension Points
Exceptions
1 Không thể chia sẻ thông tin do lỗi đường truyền mạng hoặc thiết bị di động không có ứng dụng hỗ trợ chia sẻ
2 Thông tin chia sẻ bị thiếu: do chưa đủ thời gian để lấy hết thông tin kết quả tra cứu từ Web Service
Bảng 6.6 - Đặc tả use case xem lược sử tra cứu
Use Case Name Xem lược sử tra cứu
Trang 3938
2 Danh sách tra cứu đã thực hiện được hiển thị
3 Người dùng chọn xem chi tiết thông tin kết quả tra cứu được
Extension Points Người dùng chia sẻ thông tin tra cứu
hoặc thiết bị di động không có ứng dụng hỗ trợ chia sẻ
2 Chi tiết thông tin đã tra cứu bị thiếu: do chưa đủ thời gian để lấy hết thông tin kết quả tra cứu từ Web Service
Trang 4039
Người quản trị hệ thống và người quản trị của hãng vận chuyển sẽ thực hiện việc nhập dữ liệu cho các thông tin về tàu, xe Ngoài ra, quản trị viên cũng có thể thực hiện việc phân quyền cho từng user trong hệ thống Nhưng trước khi làm các việc đó thì các quản trị viên phải thực hiện việc đăng nhập vào hệ thống để hệ thống xác định và kiểm tra các quyền đối với quản trị viên
Bảng 6.7 - Đặc tả use case đăng nhập
tàu, xe
Extension Points
1 Tài khoản bị khóa
2 Nhập sai thông tin tài khoản
3 Tài khoản không tồn tại
Post-Conditions
Bảng 6.8 - Đặc tả use case nhập liệu
tàu xe