Báo cáo thực tập chuyên nghành lập trình Android GPSGroup
1. LỜI MỞ ĐẦU
Mạng điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990 và theo thời gian
số lượng các thuê bao cũng như các nhà cung cấp dịch vụ di động tại Việt Nam ngày
càng tăng. Do nhu cầu trao đổi thông tin ngày càng tăng và nhu cầu sử dụng sản phẩm
công nghệ cao nhiều tính năng, cấu hình cao, chất lượng tốt, kiểu dáng mẫu mã đẹp,
phong phú nên nhà cung cấp phải luôn cải thiện, nâng cao những sản phẩm của mình. Do
đó viêc xây dựng các ứng dụng cho điện thoại di động đang là một nghành công nghiệp
mới đầy tiềm năng và hứa hẹn nhiều sự phát triển vượt bậc của nghành khoa học kỹ
thuật.
Cùng với sự phát triển mạnh mẽ của xu hướng lập trình phần mềm ứng dụng cho các
thiết bị di động. Phần mềm, ứng dụng cho điện thoại di động hiện nay rất đa dạng và
phong phú trên các hệ điều hành di động cũng phát triển mạnh mẽ và đang thay đổi theo
từng ngày. Các hệ điều hành Winphone Mobile, Android, IOS, Tizen, Ubuntu, rất phát
triển trên thị trường di động.
Trong vài năm gần đây, hệ điều hành Android ra đời với sự kế thừa những ưu việt của
các hệ điều hành ra đời trước và sự kết hợp của nhiều công nghệ tiên tiến nhất hiện nay,
đã được nhà phát triển công nghệ rất nổi tiếng hiện nay là Google phát triển. Android đã
nhanh chóng là đối thủ cạnh tranh mạnh mẽ với các hệ điều hành trước đó và đang là hệ
điều hành di động của tương lai và được nhiều người sử dụng nhất.
Hiện nay, việc sở hữu một chiếc điện thoại thông minh không còn là một điều quá khó
với nhiều người, khi ai cũng có cho riêng mình một chiếc điện thoại thông minh thì việc
sử dụng nó để phục vụ cho cuộc sống là một điều tất yếu. Mỗi chiếc điện thoại thông
minh đều có tích hợp GPS, và có sẵn phần mềm bản đồ giúp chúng ta xác định vị trí hiện
tại của mình, tìm đường đi, tìm cây xăng, tìm quán ăn, dẫn đường…
2. Các phần mềm bản đồ hỗ trợ sẵn rất nhiều chức năng có ích, nhưng họ lại chưa tập chung
vào các chức năng:
Theo dõi vị trí của nhiều người trong một nhóm
Giúp người dùng đi du lịch tìm được những con đường gắn nhất, đẹp nhất, nhiều quán ăn,
nơi ngủ nghỉ giá rẻ nhất…
Tạo ra một mạng xã hội chia sẻ thông tin cho những người đi du lịch bụi, giao lưu, kết
bạn, trao đổi thông tin, chia sẻ ảnh video…
Với những vấn đề đặt ra ở trên thôi thúc tôi xây dựng lên một phần mềm chạy trên điện
thoại thông minh giúp mọi người có thể dễ dàng theo dõi vị ví của nhau.
3. CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1. Tìm hiểu về spring framework
1.1. Spring là gì?
Spring framework, hay ngắn hơn là Spring, là một cấu trúc dùng để xây dựng
chương trình ứng dụng mã nguồn mở dành cho ngôn ngữ lập trình Java. Phiên bản đầu
tiên của nó do Rod Johnson viết và đã được ông xuất bản cùng với quyển sách đầu tay
Expert One-on-One JavaEE Design and Development (Nhà xuất bản Wrox Press, Tháng
10 năm 2002).
Kiến trúc của Spring framework được ra mắt công chúng lần đầu tiên hồi tháng 6
năm 2003 dưới Giấy phép Apache - phiên bản 2.0. Phiên bản 1.0 đánh dấu mốc thành
tháng 3 năm 2005.
Tuy Spring framework không bắt buộc người ta phải tuân theo một mô hình lập
trình cụ thể nào, song nó lan truyền rộng rải trong cộng đồng những người viết chương
trình dùng Java, như một hình thức chủ yếu thay thế cho mô hình Enterprise Java Bean.
Theo thiết kế, bộ framework này giải phóng lập trình viên dùng Java, cho phép họ nhiều
quyền tự do hơn và đồng thời cung cấp một giải pháp tiện lợi, đầy đủ dẫn chứng bằng
tài liệu, dễ dàng sử dụng, phù hợp với những thực hành thông dụng trong công nghệ
phần mềm.
Bên cạnh những đặc trưng nền tảng của Spring framework là những cái có thể
dùng được trong bất cứ một chương trình ứng dụng Java nào, rất nhiều các mở rộng và
tiến bộ trong việc kiến tạo các trình ứng dụng dành cho nền tảng mạng web (web-based
4. application) dựa trên nền Java Enterprise cũng tồn tại nữa. Spring framework nổi tiếng
cũng một phần do chính đặc thù kể trên và được giới thương mại công nhận như một
nền tảng kiến trúc có tầm quan trọng trong chiến lược kiến tạo phần mềm.
5. 1.2. Lịch sử phát triển Spring
Phần đầu tiên của Spring framework ban đầu nguyên được Rod Johnson viết vào
năm 2000. Vào năm 2001, những mô hình lập trình cho các trình ứng dụng Web được
đại đa số sử dụng đều do Java Servlet API và Enterprise Java Bean cung cấp.
Năm 2003 thành lập dự án phát tại Sourceforge để phát triển Spring. Sau khi phát
triển trên nền tảng ban đầu hơn một năm họ đã phát hành phiên bản đầu tiên (1.0) vào
tháng 3 năm 2004.
Spring framework đã làm cho những kỹ thuật vốn không được biết đến mấy trở
nên những kỹ thuật được mọi người ưa chuộng trong một thời gian ngắn ngủi. Một trong
những kỹ thuật nổi tiếng hơn cả là kỹ thuật “đảo ngược quyền điều khiển” (Inversion of
Control, IoC).
Năm 2005 cho thấy mức độ hưởng ứng nâng cao hơn những năm trước, nguyên
do cũng vì những phiên bản mới được giới thiệu với những cột mốc đáng kể và những
tính năng mới được thêm vào. Diễn đàn Spring (Spring Forum) ra đời cuối năm 2004
đến nay đã sinh trưởng trở thành một nguồn thông tin quan trọng, giúp đỡ cho người sử
dụng.
Vào tháng 12 năm 2005, hội thảo đầu tiên về Spring Framework đã được tổ chức
ở Antwerp vào tháng 6 năm 2006, thu hút hơn 400 người.
1.3. Một số khái niệm chính
Hai trong những thành phần chủ chốt và là nền tảng tạo nên sức mạnh của Spring
6. chính là IoC và DI.
1.3.1. Inversion of Control (IoC)
IoC Container trong Spring được xây dựng dựa trên nguyên lý Inversion of Control
(đảo ngược điều khiển) đã xuất hiện khá lâu trong các mẫu hình thiết kế (design pattern),
và được phổ biến rộng rãi nhờ Robert C. Martin và Martin Fowler. Để hiểu về Spring,
trước tiên chúng ta cần hiểu khái niệm IoC là gì? Muốn vậy, chúng ta cần trả lời câu
hỏi: Control (điều khiển) trong chương trình phần mềm là gì, và Inversion (sự đảo
ngược) đối với điều khiển trong ngữ cảnh này được hiểu như thế nào?
Khái niệm Control Flow (tạm dịch là luồng thực thi) được sử dụng cho trình tự
thực hiện các câu lệnh, chỉ thị hoặc lời gọi hàm trong một chương trình, khi chương
trình này thực thi.
Do chương trình ngày càng phức tạp, nên các lập trình viên áp dụng phương pháp
lập trình hướng đối tượng nhằm phân loại, chia tách các chức năng và gom thành các
đối tượng. Các lập trình viên còn tạo dựng các thư viện tạo sẵn để có thể sử dụng lại.
Luồng thực thi của chương trình, trong những tình huống cần xem xét ở mức tổng thể,
không còn quan tâm đến các bước thực thi câu lệnh cụ thể nữa, mà chỉ xem xét đến quá
trình gọi phương thức của các đối tượng trong ứng dụng cũng như các đối tượng của thư
viện dựng sẵn.
Các lập trình viên, khi xây dựng ứng dụng từ đầu, đã thực hiện hai nhiệm vụ: trực
tiếp điều khiển luồng thực thi của chương trình và xây dựng các chức năng để đáp ứng
nghiệp vụ của ứng dụng. Thực tế, có nhiều chương trình hoặc bộ phận trong chương
7. trình có luồng thực thi rất giống nhau, chẳng hạn phần tương tác với HTTP trong các
ứng dụng web, phần unit testing trong các ứng dụng,… Việc trực tiếp tạo dựng và kiểm
soát luồng thực thi của chương trình lặp đi lặp lại khi xây dựng nhiều ứng dụng sẽ làm
mất nhiều công sức, chi phí, tạo ra sự nhàm chán và dễ phát sinh lỗi. Điều này tạo ra
động lực cũng như môi trường để nguyên lý đảo ngược điều khiển nảy nở và phát triển.
Vậy sự “đảo ngược” (inversion) luồng điều khiển chương trình trong ngữ cảnh này
được hiểu như thế nào? Chúng ta hãy xem xét 2 ví dụ dưới đây.
Ví dụ 1: Ứng dụng web trong Java với JavaServlet
Khi lập trình ứng dụng web bằng JavaServlet cần thực hiện các bước lập trình như
sau:
- Tạo lớp đối tượng kế thừa từ HttpServlet, override các phương thức doGet(),
doPost(),…
- Đăng ký trong file cấu hình Deployment Descriptor tương ứng Servlet này với
đường dẫn xác định.
- Lớp đối tượng Servlet chúng ta tạo ra sẽ được gọi đến khi có một truy vấn
Descriptor.
Vậy ai kích hoạt ứng dụng chúng ta viết để đáp ứng mỗi khi có HTTP Request gửi
đến? Ai chịu trách nhiệm chuyển đổi các thông điệp HTTP (HTTP Request và HTTP
Response) thành các đối tượng Java (HttpServletRequest và HttpServletResponse) để
truyền cho các hàm doGet(), doPost()?
8. Trong quá trình phát triển các thành phần chức năng của ứng dụng, chúng ta thường
ứng dụng được mở rộng và phát triển thêm. Để tạo bộ unit test, chúng ta chỉ cần tạo một
lớp đối tượng, định nghĩa các phương thức khởi tạo, phương thức kết thúc và các phương
Việc điều khiển trình tự thực thi các phương thức được giao cho thư viện bên ngoài
đảm nhiệm chẳng hạn như TestNG hoặc JUnit.
trò. Ứng dụng không còn ôm đồm vừa trực tiếp tạo dựng và kiểm soát luồng thực thi,
vừa xây dựng chức năng nghiệp vụ. Việc kiểm soát luồng thực thi được tách khỏi chức
năng nghiệp vụ và bị đẩy ra bên ngoài. Người lập trình đã ủy thác việc kiểm soát luồng
thực thi ứng dụng cho một thành phần (thường là thư viện dựng sẵn) bên ngoài đảm
nhiệm, chỉ còn tập trung vào chức năng chính của ứng dụng.
Như vậy, khái niệm “đảo ngược” ở đây chính là chuyển nhiệm vụ kiểm soát lưu
trình thực thi từ ứng dụng cho một thành phần chuyên trách (thường là một thư viện
phần mềm khung – framework – dựng sẵn ở bên ngoài). Ứng dụng chính chúng ta quan
tâm phát triển không kiểm soát việc điều khiển luồng thực thi nữa, mà chỉ tập trung vào
việc định nghĩa chức năng. Thư viện phần mềm khung chuyên trách kiểm soát điều
khiển sẽ dựa trên mô tả trong cấu hình của ứng dụng để thay mặt ứng dụng điều phối
luồng thực thi trong chương trình.
Dễ dàng nhận thấy thư viện phần mềm khung này khác với các thư viện thông
9. thường ở chỗ: thư viện thông thường cung cấp các chức năng và chờ được ứng dụng gọi
đến, còn thư viện phần mềm khung tạo dựng luồng thực thi và gọi đến các chức năng
của ứng dụng.
Nói một cách ngắn gọn IoC là một design pattern và tập hợp các kỹ thuật lập trình
truyền thống [4, tr1]. IoC trong Spring cũng hoàn toàn mang ý nghĩa như trên. Trong
Spring các đối tượng chính để xây dựng ứng dụng thì được quản lý bởi Spring IoC
một đối tượng được khởi tạo và quản lý bởi Spring IoC container.
1.3.2. Dependency Injection (DI)
chính là việc các thuộc tính trong một đối tượng được “tiêm chích” (injection) để tham
chiếu lần lượt đến các đối tượng khác. Dependency Injection trong Spring hoạt động
dựa trên Java Reflection.
2. Tìm hiểu về Spring Boot
2.1. Spring boot là gì?
Spring Boot là một Project nằm trên tầng IO Execution (Tầng thực thi) của Spring IO
Framework.
Spring Boot là một bước tiếp theo của Spring, để làm cho Spring dễ dàng hơn trong việc
thiết lập và phát triển ứng dụng. Với Spring Boot các cấu hình Spring được giảm thiểu tối
đa. Spring Boot hỗ trợ các bộ chứa nhúng (embedded containers) điều này cho phép các
ứng dụng web có thể chạy độc lập mà không cần phải trên khai lên các Web Server.
10. Bạn có thể dùng spring boot để tạo ứng dụng Java Web chạy bằng command line 'java
-jar' hoặc xuất khẩu ra file war để triển khai lên Web Server như thông thường. Spring
Boot cung cấp cho bạn một "CLI Tool" để chạy các kịch bản Spring (spring scripts).
Spring Boot có thể giải thích một cách đơn giản bởi hình minh họa dưới đây:
2.2. Ưu điểm của spring boot
Nó rất dễ dàng để phát triển các ứng dụng dựa trên Spring với Java hoặc Groovy.
Nó giảm thiểu thời gian phát triển và tăng năng xuất
Nó tránh việc phải viết nhiều mã nguyên mẫu (boilerplate Code), Annotations và các cấu
hình XML.
Nó dễ dàng để bạn tương tác các ứng dụng Spring Boot với các hệ sinh thái của Spring
như Spring JDBC, Spring ORM, Spring Data, Spring Security etc.
Nó đi theo cách tiếp cận “Nguyên tắc cấu hình mặc định” để giảm thiểu thời gian và nỗ
lực cần thiết để phát triển ứng dụng.
Nó cung cấp các Server nhúng (Embedded HTTP servers) như là Tomcat, Jetty .... để
phát triển và test các ứng dụng web nhanh chóng và dễ dàng.
Nó cung cấp công cụ CLI (Command Line Interface) dể phát triển và test các ứng dụng
Spring Boot (Java hoặc Groovy) từ các dòng lệnh (command prompt) rất dễ dàng và
nhanh chóng.
Nó cung cấp rất nhiều các plugin để phát triển và test các ứng dụng Spring Boot nhanh
chóng sử dụng các công cụ Build như Maven và Gradle
11. Nó cung cấp nhiều plugin để làm việc với các các bộ nhúng và các Database lưu trữ trên
bộ nhớ (in-memory Databases) một cách dễ dàng.
2.3. RESTful Web Service
2.3.1. RESTful là gì?
Những khái niệm đầu tiên về REST (REpresentational State Transfer) được đưa ra vào
năm 2000 trong luận văn tiến sĩ của Roy Thomas Fielding (đồng sáng lập giao thức
HTTP). Trong luận văn ông giới thiệu khá chi tiết về các ràng buộc, quy ước cũng như
cách thức thực hiện với hệ thống để có được một hệ thống REST.
Hiểu đơn giản nó là một bộ các ràng buộc và quy ước, khi áp dụng đầy đủ vào hệ thống
của bạn thì ta có 1 hệ thống REST.
REST Contraints
• Hệ thống hoạt động theo mô hình client-server, trong đó server là tập hợp các
service nhỏ lắng nghe các request từ client. Với từng request khác nhau thì có thể một
hoặc nhiều service xử lý.
• Stateless (phi trạng thái). Đơn giản server và client không lưu trạng thái của nhau
mỗi request lên server thì client phải đóng gói thông tin đầy đủ để thằng server hiểu
được. Điều này giúp hệ thống của bạn dễ phát triển, bảo trì, mở rộng vì không cần tốn
công CRUD trạng thái của client. Hệ thống phát triển theo hướng này có ưu điểm nhưng
cũng có khuyết điểm là gia tăng lượng thông tin cần truyền tải giữa client và server.
• Khả năng caching: Các response có thể lấy ra từ cache. Bằng cách cache các
response, server giảm tải việc xử lý request, còn client cũng nhận được thông tin nhanh
hơn. Ở đây ta đặt 1 thằng cache vào giữa: client- cache- server.
• Chuẩn hóa các interface: Đây là một trong những đặc tính quan trọng của hệ thống
REST. Bằng cách tạo ra các quy ước chuẩn để giao tiếp giữa các thành phần trong hệ
12. thống, bạn đã đơn giản hóa việc client có thể tương tác với server. Các quy ước này áp
dụng cho toàn bộ các service giúp cho người sử dụng hệ thống của bạn dễ dụng hơn. Dễ
hiểu hơn trên hệ thống bạn đặt ra 1 chuẩn API để người dùng dù là mobile, web đều có
thể kết nối vào được. Hệ thống REST có yếu điểm ở đây vì khi chuẩn hóa rồi ta không
thế tối ưu từng kết nối.
• Phân lớp hệ thống: trong hệ thống REST bạn chia tách các thành phần hệ thống
theo từng lớp, mỗi lớp chỉ sử dụng lớp ở dưới nó và giao tiếp với lớp ở ngay trên nó mà
thôi. Điều này giúp bạn giảm độ phức tạp của hệ thống, giúp các thành phần tách biệt
nhau từ đó dễ dàng mở rộng từng thành phần.
Resources (Tài nguyên)
Hệ thống REST trước hệt phải tuân thủ các ràng buộc ở trên. Đi vào chi tiết, hệ thống
REST tập trung vào việc xử lý các tài nguyên. Resource là bất cứ cái gì mà bạn có thể gọi
tên được (một video, ảnh, trang web, báo cáo thời tiết .v.v). Các tài nguyên này giúp ta
định nghĩa được các services trong hệ thống, kiểu thông tin mà nó trả về, và hành vi xử lý
thông tin của nó.
Các đặc tính mô tả một tài nguyên:
• Nhiều cách thức hiển thị: dữ liệu bạn nhận được có thể ở nhiều dạng ( binary,
JSON, XML .v.v) dữ liệu này đại diện cho 1 tài nguyên xác định.
• Nhận diện rõ ràng: Mỗi URL tại một thời điểm chỉ trả về 1 tài nguyên xác định.
• Dữ liệu mô tả (metadata): Kiểu nội dung (Content-type), lần cập nhâp mới .v.v
• Dữ liệu điều khiển: Is-modifiable-since, cache-control.
3. Tìm hiểu về Mongodb
3.1. Mongodb là gì?
NoSQL là Non-Relational: tạm dịch là không có quan hệ. NoSQL là cơ sở dữ
13. liệu không quan hệ, ràng buộc giữa các Collection (hay còn gọi là bảng trong cơ
sở dữ liệu bình thường). Tức là giữa các Collection (Bảng) sẽ không có khóa
chính, khóa ngoại như trong cơ sở dữ liệu bình thường. Việc này sẽ giảm bớt rối
khi cơ sở dữ liệu chúng ta có nhiều bảng. NoSQL đặc biệt nhấn mạnh đến mô hình
lưu trữ cặp giá trị - khóa và hệ thống lưu trữ phân tán.
3.2. Ưu điểm của mongodb
MongoDB là một cơ sở dữ liệu dựa trên Document, trong đó một Collection giữ các
Document khác nhau. Số trường, nội dung và kích cỡ của Document này có thể khác với
Document khác.
Cấu trúc của một đối tượng là rõ ràng.
Khả năng truy vấn sâu hơn. MongoDB hỗ trợ các truy vấn động trên các Document bởi
sử dụng một ngôn ngữ truy vấn dựa trên Document mà mạnh mẽ như SQL.
MongoDB dễ dàng để mở rộng.
Việc chuyển đổi/ánh xạ của các đối tượng ứng dụng đến các đối tượng cơ sở dữ liệu là
không cần thiết.
14. Sử dụng bộ nhớ nội tại để lưu giữ phần công việc, giúp truy cập dữ liệu nhanh hơn.
4. Tìm hiểu về hệ điều hành Android
4.1. Android là gì?
Android là hệ điều hành điện thoại di động mở nguồn mở miễn phí do Google phát triển
dựa trên nền tảng của Linux. Bất kỳ một hãng sản xuất phần cứng nào cũng đều có thể tự
do sử dụng hệ điều hành Android cho thiết bị của mình, miễn là các thiết bị ấy đáp ứng
được các tiêu chuẩn cơ bản do Google đặt ra (có cảm ứng chạm, GPS, 3G,...)
Các nhà sản xuất có thể tự do thay đổi phiên bản Android trên máy của mình một cách tự
do mà không cần phải xin phép hay trả bất kì khoản phí nào nhưng phải đảm bảo tính
tương thích ngược (backward compatibility) của phiên bản chế riêng đó.
Android là nền tảng cho thiết bị di động bao gồm một hệ điều hành, midware và một số
ứng dụng chủ đạo. Bộ công cụ Android SDK cung cấp các công cụ và bộ thư viên các
hàm API cần thiết để phát triển ứng dụng cho nền tảng Android sử dụng ngôn ngữ lập
trình java.
Những tính năng mà nền tảng Android hổ trợ:
• Application framework: Cho phép tái sử dụng và thay thế các thành phần sẳn có
của Android.
• Dalvik virtual macine: Máy ảo java được tối ưu hóa cho thiết bị di động.
• Intergrated browser: Trình duyệt web tích hợp được xây dựng dựa trên WebKIT
engine.
• Optimized graphics: Hổ trợ bộ thư viện 2D và 3D dự vào đặc tả OpenGL ES 1.0.
• SQLite: DBMS dùng để lưu trữ dữ liệu có cấu trúc.
Hổ trở các định dạng media phổ biến như: MPEG4, H.264, MP3, AAC, ARM, JPG,
PNG, GIF.
• Hổ trợ thoại trên nền tảng GSM (Phụ thuộc vài phần cứng thiết bị).
15. • Bluetooth, EDGE, 3G và WiFi (Phụ thuộc vài phần cứng thiết bị).
• Camera, GPS, la bàn và cảm biến (Phụ thuộc vài phần cứng thiết bị).
• Bộ công cụ phát triển ứng dụng mạnh mẽ.
Ở các chương sau chúng ta sẽ đề cập sâu hơn về các vấn đề của ANDROID ví dụ như:
Lịch sử hình thành, cấu trúc ….
4.2. Lịch sử phát triển 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.
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,
MarvellTechnology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics,
SprintNextel, 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 T-Mobile 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
16. được với nhau và có thể sử dụng lại 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 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.
4.3. Tìm hiểu về máy ảo trong android
4.3.1. 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 để
17. 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.
Ban đầu, Dalvik chỉ là một máy ảo khá đơn giản. Song, khi các thiết bị di động ngày càng
trở nên phức tạp hơn, Google sẽ cần phải giải quyết các vấn đề hiệu năng, bởi hiệu năng
máy ảo sẽ luôn kém cỏi hơn rất nhiều so với chạy trực tiếp như trên iOS hay Windows.
Đồng thời, do Dalvik là phần mềm chịu trách nhiệm thực thi gần như tất cả các ứng dụng
Android, Google sẽ phải tìm cách giúp máy ảo Android của mình có thể bắt kịp với các
tiến bộ của ngành công nghiệp phần cứng. Dần dần, Google đã trang bị cho Dalvik một
bộ biên dịch JIT (Just-in-time: biên dịch mã nguồn ngay trước khi thực thi), khả năng
chạy nhiều thread (chạy song song nhiều luồng) cùng vô số thay đổi nhỏ khác.
Tuy vậy, trong những năm vừa qua, tốc độ phát triển của hệ sinh thái Android đã vượt
quá khả năng phát triển của Dalvik. Do đó, Google cần phải xây dựng một phần mềm
runtime (phần mềm chịu trách nhiệm chạy các ứng dụng khác) hoàn toàn mới để làm cơ
sở vững chắc cho tương lai. Cụ thể hơn, giải pháp phần mềm runtime mới của Google sẽ
phải thích ứng với hiệu năng của cả các vi xử lý của ngày hôm nay cũng như các vi xử lý
8 nhân của những năm tới, có thể mở rộng thêm bộ nhớ và RAM của thiết bị.
Từ đó, ART ra đời.
18. 4.3.2. Máy ảo ART
Trước hết, ART được thiết kế để tương thích hoàn toàn với mô hình biên dịch bytecode
của Dalvik. Do đó, khi nhìn từ góc độ nhà phát triển ứng dụng, bạn sẽ không cần phải
viết mã nguồn riêng cho Dalvik rồi viết lại cho ART. Bạn không cần phải lo lắng gì về
tính tương thích giữa 2 môi trường này cả.
Sự thay đổi lớn nhất về thiết kế mà ART mang tới là khả năng biên dịch code theo mô
hình AOT (Ahead of Time) thay vì JIT (Just in Time) như trước đây. Điều này có ý nghĩa
là gì? Bộ runtime mới của Android không còn cần phải dịch từ bytecode sang mã máy
mỗi lần chạy ứng dụng. Thay vào đó, ART sẽ chỉ biên dịch bytecode sang mã máy đúng
một lần duy nhất. Quá trình thực thi ứng dụng trong các lần chạy tương lai sẽ được thực
hiện từ các đoạn mã máy đã được tạo ra từ trước.
Sự thay đổi này sẽ giúp mang tới các ứng dụng được tối ưu hơn. Đây thực sự là một bước
tiến hoàn toàn nằm ngoài khả năng của Dalvik. Trên Android L, do mã nguồn sẽ được tối
ưu và biên dịch sang mã máy đúng một lần duy nhất, chu trình tối ưu này sẽ cần phải
được thực hiện rất tốt. Theo Google, Android giờ đã có thể đạt đến mức tối ưu tốt hơn đối
với toàn bộ code-base (tất cả mã nguồn) của 1 ứng dụng. Điều này là do trình biên dịch
mới giờ đã có thể nhìn vào tổng thể toàn bộ mã nguồn, trong khi trình biên dịch JIT hiện
tại chỉ có thể tối ưu mã trên phạm vi method/local (trong một hàm nhất định).
Nhờ đó, các đoạn code sẽ có thể lược bỏ các đoạn mã có thể bị coi là thừa nhưng vẫn bắt
buộc phải có nếu sử dụng kiến trúc cũ, ví dụ như check exception (kiểm tra và bắt trước
các lỗi có thể xảy ra trong quá trình chạy). Quá trình gọi hàm hoặc gọi interface cũng sẽ
nhanh hơn đáng kể. Quá trình này sẽ được thực hiện bên trong phần mềm "dex2oat" –
phiên bản thay thế cho dexopt trên Dalvik. Các file odex (file dex đã được tối ưu) cũng sẽ
bị thay thế bằng file ELF.
Do ART biên dịch các file thực thi ELF, nhân của Android giờ có thể quản lý các trang
của code page (tập mã hóa ký tự của 1 ngôn ngữ) một cách hiệu quả hơn. Nhờ đó mà hệ
điều hành di động của Google có thể quản lý bộ nhớ tốt hơn và tốn ít RAM hơn.
19. Ảnh hưởng của ART tới thời lượng pin có lẽ cũng là rất đáng kể, do hệ điều hành không
cần phải biên dịch mã nguồn trong quá trình chạy ứng dụng nữa. Nhờ đó, quá trình chạy
ứng dụng sẽ giảm được đáng kể sức ép lên CPU, giúp tiết kiệm pin tốt hơn.
Điểm yếu lớn nhất của ART so với ELF là quá trình biên dịch mã sẽ tốn nhiều thời gian
hơn. Do đó, quá trình khởi động điện thoại cũng như lần bật ứng dụng đầu tiên sẽ tốn
nhiều thời gian hơn so với ứng dụng tương đương trên Dalvik. Tuy vậy, theo tuyên bố
của Google, phiên bản hoàn thiện sẽ có thời gian khởi động tương đương hoặc nhanh hơn
Dalvik. Kể cả nếu gã khổng lồ tìm kiếm không thể thực hiện lời hứa này, người dùng
thông thường cũng sẽ chỉ phải tốn thêm thời gian chờ đợi trong lần đầu cài đặt. Trải
nghiệm sử dụng sau đó sẽ trở nên mượt mà hơn rất nhiều.
4.4. Kiến trúc của android
Hệ điều hành Android là 1 ngăn xếp các thành phần phần mềm, được chia thành 5 phần
và 4 lớp chính như trong hình bên dưới.
20. 4.4.1. Linux Kernel
Dưới cùng là lớp Linux - Linux 3.6 cùng với khoảng 115 bản vá. Lớp này cung cấp 1 cấp
độ trừu tượng giữa phần cứng của thiết bị và các thành trình điều khiển phần cứng thiết
yếu như máy ảnh, bàn phím, màn hình hiển thị... Đồng thời, hạt nhân (kernel) còn xử lý
tất cả các thứ mà Linux có thể làm tốt như mạng kết nối và 1 chuỗi các trình điều khiển
thiết bị, giúp cho giao tiếp với các thiết bị ngoại vi dễ dàng hơn.
4.4.2. Các thư viện
Ở trên lớp nhân Linux là tập các thư viện bao gồm WebKit - trình duyệt Web mã nguồn
mở, được biết đến như thư viện libc, cơ sở dữ liệu SQLite - hữu dụng cho việc lưu trữ và
chia sẻ dữ liệu ứng dụng, các thư viênj chơi và ghi âm audio, video, hay các thư viện SSL
chiụ trách nhiệm bảo mật Internet...
4.4.3. Các thư viện Android
Đây là các thư viện dựa trên Java phục vụ cho việc phát triển Android. Ví dụ của các thư
viện này bao gồm các thư viện ứng dụng dùng để xây dựng giao diện người dùng, vẽ đồ
họa hay truy cập cơ sở dữ liệu. 1 số thư viện chính của Android:
android.app - Cung cấp quyền truy cập vào ứng dụng và là nền tảng của tất cả ứng dụng
Android.
android.content - Cung cấp quyền truy cập nội dung (content), truyền tải thông điệp giữa
các ứng dụng hay các thành phần của ứng dụng.
android.database - Đựoc sử dụng để truy cập dữ liệu của content provider và cơ sở dữ
liệu SQLite
android.opengl - giao diện các phuơng thức Java để sử dụng OpenGL ES
android.os - Cung cấp các ứng dụng với quyền truy cập vào các dịch vụ của hệ điều hành
bao gồm thông điệp, các dịch vụ hệ thống và các giao tiếp nội tại
21. android.text - Đựoc sử dụng để hiển thị và điều chỉnh chữ trên màn hình thiết bị
android.view - Các thành phần cơ bản trong việc xây dựng giao diện người dùng của ứng
dụng.
android.widget - Tập các thành phần giao diện người dùng đã được xây dựng sẵn như các
nút, các nhãn (label), list view,....
android.webkit - Tập các lớp cho phép xây dựng khả năng duyệt web.
4.4.4. Android Runtime
Đây là phần thứ 3 của kiến trúc và nằm ở lớp thứ 2 từ dưới lên. Phần này cung cấp 1 bộ
phận quan trọng là Dalvik Virtual Machine - là 1 loại Java Virtual Machine được thiết kế
đặc biệt để tối ưu cho Android.
Dalvik VM sử dụng các đặc trưng của nhân Linux như quản lý bộ nhớ và đa luồng,
những thứ mà đã có sẵn trong Java. Dalvik VM giúp mọ ứng dụng Android chạy trong
tiến trình riêng của nó, với các thể hiện (instance) riêng của Dalvik virtual Machine.
Android Runtime cũng cung cấp 1 tập các thư viện chính giúp các nhà phát triển ứng
dụng Android có thể viết ứng dụng Android bằng Java
4.4.5. Application Framework
Lớp Android Framework cung cấp các dịch vụ cấp độ cao hơn cho các ứng dụng dưới
dạng các lớp Java. Các nhà phát triển ứng dụng được phép sử dụng các dịch vụ này trong
ứng dụng của họ.
Android Framework bao gồm các dịch vụ chính sau:
22. • Activitty Manager - Kiểm soát tất cả khía cạnh của vòng đời ứng dụng và ngăn
xếp các Activity.
• Content Providers - Cho phép các ứng dụng chia sẽ dữ liệu với các ứng dụng khác.
• Resource Manager - Cung cấp quyền truy cập vào các tài nguyên như các chuỗi,
màu sắc, các layout giao diện người dùng...
• Notifications Manager - Cho phép các ứng dụng hiển thị cảnh báo và các thông
báo cho người dùng.
• View System - Tập các thành phần giao diện (view) được sử dụng để tạo giao diện
người dùng.
4.4.6. Application
Lớp trên cùng của kiến trúc là Application. Các ứng dụng bạn tạo ra sẽ được cài đặt trên
lớp này. Ví dụ như: Danh bạ, nhắn tin, trò chơi...
4.6. Chu Kỳ Ứng Dụng Android
Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng dụng khi
codes cần được run và sẽ còn chạy cho đến khi:
• Nó không phụ thuộc.
• Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác. Một sự
khác thường và đặc tính cơ bản của Android là thời gian sống của tiến trình
ứng dụng không được điều khiển trực tiếp bới chính nó. Thay vào đó, nó được
xác định bởi hệ thống qua một kết hợp của:
• Những phần của ứng dụng mà hệ thống biết đang chạy
• Những phần quan trọng như thế nào đối với người dung Bao nhiêu vùng nhớ
chiếm lĩnh trong hệ thống.
23. 4.7. Chu kỳ thành phần sống trong Android
Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu khởi
tạo và đến thời điểm kết thúc. Giữa đó, đôi lúc chúng có thể là active hoặc inactive, hoặc
là trong trường hợp activies nó có thể visible hoặc invisible.
4.9. Các trạng thái của chu kỳ sống
Một Activity chủ yếu có 3 chu kỳ chính sau:
• Active hoặc running: Khi Activity là được chạy trên màn hình. Activity này tập
trung vào những thao tác của người dùng trên ứng dụng.
• Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dung
vẫn trông thấy. Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ
đầy màn hình. Một Activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi
hệ thống trong trường hợp thiếu vùng nhớ.
• Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác. Nó vẫn còn trạng thái
và thông tin thành viên trong nó. Người dùng không thấy nó và thường bị loại
bỏ trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác.
4.10. Các phương thức của chu kỳ sống
Phương thức: onCreate()
Được gọi khi activity lần đầu tiên được tạo
Ở đây bạn làm tất cả các cài đặt tĩnh -- tạo các view, kết nối dữ liệu đến list và .v.v
Phương thức này gửi qua một đối tượngBundle chứa đựng từ trạng thái trược của
Activity
Luôn theo sau bởi onStart()
24. Phương thức: onRestart()
Được gọi sau khi activity đã được dừng, chỉ một khoảng đang khởi động lần nữa
(stared again)
Luôn theo sau bởi onStart()
Phương thức: onStart()
Được gọi trước khi một activity visible với người dùng.
Theo sau bởi onResume() nếu activity đến trạng thái foreground hoặc onStop() nế
nó trở nên ẩn.
Phương thức: onResume()
Được gọi trước khi activity bắt đầu tương tác với người dùng
Tại thời điểm này activity ở trên dỉnh của stack activity.
Luôn theo sau bởi onPause()
Phương thức: onPause()
Được gọi khi hệ thống đang resuming activity khác.
Phương thức này là điển hình việc giữ lại không đổi dữ liệu.
Nó nên được diễn ra một cách nhanh chóng bởi vì activity kế tiếp sẽ không được
resumed ngay cho đến khi nó trở lại.
Theo sau bởi onResume nếu activity trở về từ ở trước, hoặc bởi onStop nếu nó trở
nên visible với người dùng.
Trạng thái của activity có thể bị giết bởi hệ thống.
Phương thức: onStop()
25. Được gọi khi activity không thuộc tầm nhìn của người dùng.
Nó có thể diễn ra bởi vì nó đang bị hủy, hoặc bởi vì activity khác vữa được
resumed và bao phủ nó.
Được theo sau bởi onRestart() nếu activity đang đở lại để tương tác với người
dùng, hoặc onDestroy() nếu activity đang bỏ.
Trạng thái của activity có thể bị giết bởi hệ thống.
Phương thức: onDestroy()
Được gọi trước khi activity bị hủy.
Đó là lần gọi cuối cùng mà activity này được nhận.
Nó được gọi khác bởi vì activity đang hoàn thành, hoặc bởi vì hệ thống tạm thởi bị
hủy diệt để tiết kiệm vùng nhớ.
Bạn có thể phân biệt giữa 2 kịch bản với phương isFinshing(). Trạng thái của
activity có thể được giết bởi hệ thống.
5. Tìm hiểu về GPS
5.1. GPS là gì?
m 27 vệ tinh quay xung quanh trái đất. Trong số 27 vệ tinh này, 24 vệ tinh đang hoạt
động, 3 vệ tinh còn lại đóng vai trò dự phòng trong trường hợp 1 trong số 24 vệ tinh
chính bị hư hỏng. Dựa vào cách sắp đặt của các vệ tinh này, khi đứng dưới mặt đất, bạn
có thể nhìn được ít nhất là 4 vệ tinh trên bầu trời tại bất kì thời điểm nào.
5.2. Phân loại
Hệ thống định vị toàn cầu của Mỹ là hệ dẫn đường dựa trên một mạng lưới 24 quả vệ tinh
được Bộ Quốc phòng Hoa Kỳ đặt trên quỹ đạo không gian.
26. Các hệ thống dẫn đường truyền thống hoạt động dựa trên các trạm phát tín hiệu vô tuyến
điện. Được biết đến nhiều nhất là các hệ thống sau: LORAN – (LOng RAnge Navigation)
– hoạt động ở giải tần 90-100 kHz chủ yếu dùng cho hàng hải, hay TACAN – (TACtical
Air Navigation) – dùng cho quân đội Mỹ và biến thể với độ chính xác thấp VOR/DME –
VHF (Omnidirectional Range/Distance Measuring Equipment) – dùng cho hàng không
dân dụng.
Gần như đồng thời với lúc Mỹ phát triển GPS, Liên Xô cũng phát triển một hệ thống
tương tự với tên gọi GLONASS. Hiện nay Liên minh châu Âu đang phát triển hệ dẫn
đường vệ tinh của mình mang tên Galileo. Trung Quốc thì phát triển hệ thống định vị
toàn cầu của mình mang tên Bắc Đẩu bao gồm 35 vệ tinh.
Ban đầu, GPS và GLONASS đều được phát triển cho mục đích quân sự, nên mặc dù
chúng dùng được cho dân sự nhưng không hệ nào đưa ra sự đảm bảo tồn tại liên tục và
độ chính xác. Vì thế chúng không thỏa mãn được những yêu cầu an toàn cho dẫn đường
dân sự hàng không và hàng hải, đặc biệt là tại những vùng và tại những thời điểm có hoạt
động quân sự của những quốc gia sở hữu các hệ thống đó. Chỉ có hệ thống dẫn đường vệ
tinh châu Âu Galileo (đang được xây dựng) ngay từ đầu đã đặt mục tiêu đáp ứng các yêu
cầu nghiêm ngặt của dẫn đường và định vị dân sự.
GPS ban đầu chỉ dành cho các mục đích quân sự, nhưng từ năm 1980 chính phủ Mỹ cho
phép sử dụng trong dân sự. GPS hoạt động trong mọi điều kiện thời tiết, mọi nơi trên Trái
Đất, 24 giờ một ngày. Không mất phí thuê bao hoặc mất tiền trả cho việc thiết lập sử
dụng GPS nhưng phải tốn tiền không rẻ để mua thiết bị thu tín hiệu và phần mềm nhúng
hỗ trợ.
27. 5.3. Sự hoạt động của GPS
Các vệ tinh GPS bay vòng quanh Trái Đất hai lần trong một ngày theo một quỹ đạo rất
chính xác và phát tín hiệu có thông tin xuống Trái Đất. Các máy thu GPS nhận thông tin
này và bằng phép tính lượng giác tính được chính xác vị trí của người dùng. Về bản chất
máy thu GPS so sánh thời gian tín hiệu được phát đi từ vệ tinh với thời gian nhận được
chúng. Sai lệch về thời gian cho biết máy thu GPS ở cách vệ tinh bao xa. Rồi với nhiều
quãng cách đo được tới nhiều vệ tinh máy thu có thể tính được vị trí của người dùng và
hiển thị lên bản đồ điện tử của máy.
Máy thu phải nhận được tín hiệu của ít nhất ba vệ tinh để tính ra vị trí hai chiều (kinh độ
và vĩ độ) và để theo dõi được chuyển động. Khi nhận được tín hiệu của ít nhất 4 vệ tinh
thì máy thu có thể tính được vị trí ba chiều (kinh độ, vĩ độ và độ cao). Một khi vị trí
người dùng đã tính được thì máy thu GPS có thể tính các thông tin khác, như tốc độ,
hướng chuyển động, bám sát di chuyển, khoảng hành trình, quãng cách tới điểm đến, thời
gian Mặt Trời mọc, lặn và nhiều thứ khác nữa.
28. CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG
1. Đặc tả bài toán
Hiện nay việc theo dõi vị trí, chia sẻ các địa điểm theo thời gian thực là một trong những
vấn đề nóng được các nhà phát triển lớn quan tâm đến, Google là một trong những nhà
phát triển lớn nhất quan tâm và đang xây dựng các hệ thống lớn liên quan đến vị trí, bản
đồ, thời gian thực, họ rất thành công trong lĩnh vực này.
Trên thế giới cũng như ở việt nam, điện thoại di động thông minh là một thứ không thể
thiếu được trong đời sống hàng ngày của mọi người dân, khi đời sống người dân được
nâng cao thì nhu cầu sử dụng điện thoại cũng tăng lên, nhu cầu theo dõi vị trí của mọi
người xung quanh mình cũng được quan tâm tới nhiều hơn, mọi người cần một phần
mềm có thể theo dõi vị trí trong một nhóm.
• Người sử dụng cần một phần mềm có chức năng theo dõi vị trí của một nhóm
người.
• Người sử dụng cần một phần mềm để đi du lịch tìm được những con đường gắn
nhất, đẹp nhất, nhiều quán ăn, nơi ngủ nghỉ giá rẻ nhất…
• Người sử dụng cần một phần mềm tạo ra một mạng xã hội chia sẻ thông tin cho
những người đi du lịch bụi, giao lưu, kết bạn, trao đổi thông tin, chia sẻ ảnh
video…
Với những vấn đề đặt ra ở trên thôi thúc tôi xây dựng lên một phần mềm chạy trên điện
thoại thông minh giúp mọi người có thể dễ dàng theo dõi vị ví của nhau.
2. Đặc tả chức năng
2.1. Đăng ký
Mô tả chức năng
Chức năng đăng ký tài khoản giúp người sử dụng có thể đăng ký một tài khoản mới.
29. Mô tả hoạt động
1. Người sử dụng bật phần mềm, chọn chức năng đăng ký
2. Phần mềm yêu cầu người sử dụng nhập vào thông tin tài khoản
3. Người dùng nhập thông tin tài khoản vào form
4. Bấm vào nút đăng ký, dữ liệu được gửi tới server
5. Server xử lý dữ liệu, sau đó server sẽ thông báo lại cho người sử dụng đăng ký
thành công hay không
6. Nếu thành công thì chuyển sang màn hình đăng nhập, không thành công thông báo
lỗi
2.2. Đăng nhập
Mô tả chức năng
Chức năng đăng nhập để xác thực quyền truy cập của người dùng, cũng như định danh
thông tin người dùng, sau khi đăng nhập người dùng mới tiếp tục sử dụng các chức năng
khác của ứng dụng
Mô tả hoạt động
1. Người sử dụng vào chức năng đăng nhập
2. Phần mềm yêu cầu nhập thông tin tài khoản
3. Người dùng nhập thông tin tài khoản, sau đó bấm vào nút đăng nhập
4. Dữ liệu được gửi lên server, server kiểm tra trả về kết quả đăng nhập thành công,
hoặc không thành công
30. 2.3. Tạo nhóm
Mô tả chức năng
Chức năng tạo nhóm giúp người dùng tạo gia một nhóm có thể theo dõi vị trí của những
thành viên trong nhóm đó.
Mô tả hoạt động
1. Người sử dụng vào menu, chọn xem nhóm, chọn chức năng tạo nhóm
2. Phần mềm yêu cầu nhập thông tin tạo nhóm
3. Người dùng nhập thông tin tạo nhóm xong, bấm nút tạo nhóm
4. Dữ liệu được gửi tới server
5. Server kiểm tra dữ liệu, đưa ra thông báo tạo nhóm thành công hoặc không thành
công
2.3. Xóa nhóm
Mô tả chức năng
Chức năng giúp người sử dụng có thể xóa nhóm, không muốn theo dõi vị trí nữa
Mô tả hoạt động
1. Người dùng vào xem nhóm
2. Người dùng chọn nút xóa nhóm
2.4. Sử dụng nhóm
Mô tả chức năng
Chức năng này cho phép người sử dụng chọn nhóm, thay đổi các nhóm cần theo dõi vị trí
Mô tả hoạt động
1. Chọn nhóm cần sử dụng để theo dõi vị trí, chỉ được theo dõi vị trí của một nhóm
trong cùng một thời điểm.
31. 2. Hệ thống thông báo chọn nhóm thành công.
2.5. Xem vị trí
Mô tả chức năng
Giúp người sử dụng có thể xem vi trí của mọi người trong một nhóm
Mô tả hoạt động
1. Người dùng bật GPS, chọn cho phép lấy và gửi dữ liệu đi
2. Ứng dụng sẽ liên tục gửi dữ liệu lên server, đồng thời lấy dữ liệu về và vẽ liên tục
vị trí của mọi người trên bản đồ.
3. Các biểu đồ hệ thống
3.1. Biểu đồ UseCase
Mô hình Usecase dưsới đây thể hiện cho số lượng chức năng của hệ thống mà người
dùng có thể tương tác được trực tiếp.
32. 3.1.1. UseCase đăng nhập, đăng ký
Giúp người sử dụng đăng nhập vào ứng dụng, sau đó sử dụng được các chức năng tiếp
theo.
33. 3.1.2. UseCase myGroup
Giúp người sử dụng xem được tất cả các nhóm mà mình đã tham gia, và thêm được nhóm
mới cũng như, xóa được nhóm mà họ đã tham gia.
34. 3.1.3. UseCase xem vị trí
Chức năng này giúp người sử dụng có thể gửi vị trí của mình lên server và lấy dữ liệu vị
trí của mọi người trong nhóm về.
44. CHƯƠNG 3: DEMO CHƯƠNG TRÌNH
1. Một số hình ảnh của ứng dụng
1.1. Cho phép sử dụng Gps trên android
Phần mềm của chúng ta cần sử dụng dữ liệu từ Gps lên cần phải bật Gps lên mới có thể
sử dụng được.
49. 1.6. Xem vị trí
Xem vị trí của mọi người trong một nhóm.
50.
51.
52. 2. Đánh giá ứng dụng
2.1. Mục tiêu đạt được
Các chức năng chính Hoàn thành
Đăng nhập 100%
Đăng ký 100%
Xem nhóm 100%
Tạo nhóm 100%
Xem vị trí 100%
2.2. Các issue và bug chưa giải quyết
• Ứng dụng không chạy được đa nền tảng(issue)
Lý do: Do ứng dụng lập trình trên hệ điều hành android, lên chỉ chạy được trên các điện
thoại máy tính bảng sử dụng hệ điều hành android.
Hướng giải quyết: Chúng ta sẽ nâng cấp công nghệ cho ứng dụng này, như công nghệ lập
trình mobile hibernate, hoặc xamarin, sau khi sử dụng công nghệ này ứng dụng sẽ dễ
dàng hoạt động trên các nền tảng phổ biến như ios, android, winphone mobile, linux, …
• Ứng dụng trao đổi dữ liệu với server theo thời gian cố định lên sẽ tốn nhiều dữ
liệu để truyền tin(issue)
Lý do: Do ứng dụng sử dụng gửi và nhận dữ liệu theo thời gian, lên các request sẽ gửi
liên tục lên server và nhận dữ liệu trả về, làm tốn pin và dung lượng truyền tin.
Hướng giải quyết: Khi nâng cấp phiên bản sau, chúng ta sẽ sử dụng công nghệ socket,
websocket, lúc đó chúng ta sẽ quản lý các client tốt hơn, việc nhận gửi dữ liệu sẽ tiết
kiệm đáng kể dữ liệu cũng như lượng pin của thiết bị.
53. 2.3. Hướng phát triển tương lai
• Sau khi khắc phục tốt các issue trên thì tôi sẽ phát triển phần mềm thành một phần
mềm giúp mọi người di du lịch có thể theo dõi vị trí của nhau.
• Giúp người đi du lịch có thể lưu lại những con đường họ đã đi qua và chia sẻ lên
mạng xã hội facebook, twitter, google+, …
• Có chức năng chia sẻ ảnh khi đang đi trên đường, cho mọi người đi du lịch qua
quãng đường đó có thể xem được.
• Phát triển phần mềm đa nền tảng cho mọi người đều có thể sử dụng được.
3. Kết luận
Sau khi thực hiện xong project này em đã nắm bắt được qui trình làm một dự án phần
mềm trên mobile nói chung đồng thời hiểu thêm được nhiều kiến thức về Android và các
công nghệ liên quan như là Mongodb, Spring boot, Json, Webservice, …