Giới thiệu dự án
Sự phát triển mạnh mẽ của hạ tầng tài chính số và dịch vụ ngân hàng bán lẻ tại Việt Nam đã thúc đẩy tỷ lệ phát hành thẻ thanh toán nội địa và quốc tế tăng trưởng vượt bậc. Thẻ ATM (Automated Teller Machine) đã trở thành phương tiện thiết yếu trong đời sống thường nhật để chi trả lương, nhận trợ cấp, và thanh toán mua sắm. Tuy nhiên, sự phân bổ không đồng đều giữa hàng chục nghìn điểm đặt máy ATM của các ngân hàng thương mại tại các đô thị lớn tạo ra rào cản lớn đối với người dùng khi có nhu cầu rút tiền mặt khẩn cấp hoặc tìm kiếm cây ATM đúng hệ thống nhằm tối ưu hóa chi phí giao dịch liên ngân hàng.
Đề tài "Nghiên cứu hệ điều hành Android và xây dựng ứng dụng tìm kiếm máy rút tiền ATM" tập trung giải quyết bài toán định vị dịch vụ dựa trên vị trí (Location-Based Services - LBS) trên thiết bị di động. Ứng dụng kết hợp kiến trúc mã nguồn mở Android, dịch vụ bản đồ Google Maps API và hệ thống Web Service PHP/MySQL nhằm cung cấp giải pháp tra cứu vị trí trạm ATM nhanh chóng, trực quan và chính xác.
+-------------------+ HTTP / JSON (RESTful) +--------------------+
| Android Client | <=================================> | PHP Web Service |
| (Activity/Overlay)| | (Business Logic) |
+-------------------+ +--------------------+
| |
| SDK Call | SQL Query
v v
+-------------------+ +--------------------+
| Google Maps / LBS | | MySQL Database |
| (GPS & Places API)| | (ATM/Geo Data) |
+-------------------+ +--------------------+
Vấn đề thực tiễn và mục tiêu dự án
Người dùng thường xuyên đối mặt với các điểm nghẽn:
- Thiếu thông tin vị trí tức thời: Không nắm rõ vị trí đặt máy ATM gần nhất khi di chuyển đến các khu vực ngoại thành hoặc tỉnh/thành phố khác.
- Chi phí giao dịch chéo: Việc rút tiền khác hệ thống ngân hàng phát sinh phí giao dịch cao và hạn mức rút tiền bị giới hạn.
- Công cụ tra cứu phân tán: Các ngân hàng chỉ cung cấp danh sách text tĩnh trên website hoặc hệ thống tra cứu qua SMS cồng kềnh, không có bản đồ chỉ dẫn lộ trình.
Mục tiêu cụ thể của dự án
- Nghiên cứu chuyên sâu kiến trúc Android OS: Phân tích vòng đời Activity, cơ chế quản lý tiến trình của máy ảo Dalvik (Dalvik Virtual Machine - DVM), và hệ thống truyền thông điệp Intent/Bundle.
- Thiết kế Web Service backend: Xây dựng hệ thống API bằng ngôn ngữ PHP kết nối cơ sở dữ liệu MySQL để quản lý dữ liệu ngân hàng, địa giới hành chính (tỉnh thành, quận huyện) và tọa độ địa lý trạm ATM.
- Tích hợp dịch vụ Google Maps: Triển khai
MapActivity, MapView và xử lý lớp phủ ItemizedOverlay để hiển thị trực quan các điểm đánh dấu (Markers) và tính toán đường đi.
- Tối ưu hóa truyền tải dữ liệu di động: Ứng dụng định dạng JSON (JavaScript Object Notation) thay thế XML nhằm giảm thiểu độ trễ mạng và tiết kiệm băng thông 3G/GPRS.
Phạm vi và giới hạn hệ thống
- Phạm vi chức năng: Tra cứu danh mục ATM theo ngân hàng, phân cấp hành chính (Tỉnh/Thành phố, Quận/Huyện), định vị vị trí hiện tại qua GPS, lưu danh sách yêu thích và gửi phản hồi hệ thống.
- Phạm vi triển khai: Hỗ trợ hệ điều hành Android từ phiên bản 2.2 trở lên, cơ sở dữ liệu tập trung vào các đô thị và tỉnh thành trọng điểm tại Việt Nam.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi xây dựng giải pháp LBS tích hợp, các phương thức tra cứu ATM hiện hành bộc lộ nhiều hạn chế về mặt trải nghiệm và kỹ thuật:
| Tiêu chí so sánh |
Tra cứu qua SMS Banking |
Tra cứu qua Web Portal |
Ứng dụng Android LBS (Đề tài) |
| Giao diện trực quan |
Văn bản thô (Plain Text) |
Bảng biểu HTML tĩnh/bản đồ Web |
Bản đồ tương tác native (MapView) |
| Tự động định vị GPS |
Không hỗ trợ |
Phụ thuộc IP (Độ lệch lớn) |
Hỗ trợ GPS phần cứng (Sai số < 15m) |
| Độ trễ phản hồi |
5.0s - 15.0s (Phụ thuộc SMSC) |
2.5s - 4.0s (Tải toàn bộ DOM) |
< 1.2s (Chỉ nhận JSON payload) |
| Khả năng điều hướng |
Không có |
Hạn chế |
Vẽ đường đi trực tiếp trên bản đồ |
| Chi phí sử dụng |
Phí viễn thông theo tin nhắn |
Tốn dung lượng mạng lớn |
Tối ưu hóa bộ đệm, lưu cache yêu thích |
Phân loại yêu cầu hệ thống theo mô hình MoSCoW
- Must Have (Bắt buộc):
- Tra cứu trạm ATM theo bộ lọc 3 cấp: Ngân hàng -> Tỉnh/Thành -> Quận/Huyện.
- Hiển thị danh sách kết quả kèm thông tin chi tiết (Tên địa điểm, địa chỉ, ngân hàng quản lý).
- Tích hợp Google Maps hiển thị tọa độ GPS tương ứng.
- Module quản trị Web Service: Thêm, sửa, xóa danh mục và danh sách ATM.
- Should Have (Nên có):
- Đăng ký, đăng nhập tài khoản người dùng và quản lý phiên làm việc (
Session).
- Chức năng lưu danh sách điểm ATM yêu thích (
Favorites).
- Phân hệ gửi góp ý từ client về máy chủ quản trị.
- Could Have (Có thể có):
- Tính năng chia sẻ địa điểm ATM qua mạng xã hội (Facebook SDK integration).
- Tính toán khoảng cách và chỉ dẫn lộ trình (Google Directions API).
- Won't Have (Chưa thực hiện trong giai đoạn này):
- Cập nhật trạng thái số dư tiền mặt hoặc tình trạng hoạt động thời gian thực của máy ATM.
Thiết kế hệ thống
Hệ thống được thiết kế theo kiến trúc Client-Server 3 tầng phân tán:
+-------------------------------------------------------------------------+
| TẦNG CLIENT (Android App) |
| +-------------------+ +--------------------+ +--------------------+ |
| | Activity UI | | JSON Parser Engine | | Location / GPS | |
| | (Views, Layout) | | (HttpClient, POST) | | (Google MapView) | |
| +-------------------+ +--------------------+ +--------------------+ |
+-------------------------------------------------------------------------+
│ ▲
HTTP POST / Request │ │ Response (JSON Payload)
▼ │
+-------------------------------------------------------------------------+
| TẦNG DỊCH VỤ (Web Service PHP) |
| +-------------------------------------------------------------------+ |
| | Authentication | ATM Controller | Location Filter | Feedback Core | |
| +-------------------------------------------------------------------+ |
+-------------------------------------------------------------------------+
│ ▲
SQL Query │ │ Data Rows
▼ │
+-------------------------------------------------------------------------+
| TẦNG DỮ LIỆU (MySQL Database Server) |
| +-------------------------------------------------------------------+ |
| | tb_user | tb_nganhang | tb_tinhthanh | tb_quanhuyen | tb_diadiem | |
| +-------------------------------------------------------------------+ |
+-------------------------------------------------------------------------+
Công nghệ sử dụng và phiên bản
- Android Client: Android SDK (API Level 8+), Eclipse IDE với ADT Plugin, Java Development Kit (JDK 1.6), Google Maps Library.
- Web Service Backend: PHP 5.3+, Apache HTTP Server 2.2.
- Cơ sở dữ liệu: MySQL Server 5.5 (Hỗ trợ cấu trúc lưu trữ InnoDB và chỉ mục B-Tree).
- Định dạng trao đổi: JSON (ECMA-262 Standard).
Thiết kế cơ sở dữ liệu quan hệ
Hệ thống tổ chức dữ liệu thông qua các bảng quan hệ chặt chẽ nhằm đảm bảo tính toàn vẹn dữ liệu:
-- Bảng Tỉnh/Thành phố
CREATE TABLE tb_tinhthanh (
id_tinh INT AUTO_INCREMENT PRIMARY KEY,
tentinh VARCHAR(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Bảng Quận/Huyện phụ thuộc Tỉnh/Thành
CREATE TABLE tb_quanhuyen (
id_quanhuyen INT AUTO_INCREMENT PRIMARY KEY,
id_tinh INT NOT NULL,
tenquanhuyen VARCHAR(100) NOT NULL,
FOREIGN KEY (id_tinh) REFERENCES tb_tinhthanh(id_tinh) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Bảng Ngân hàng
CREATE TABLE tb_nganhang (
id_nganhang INT AUTO_INCREMENT PRIMARY KEY,
tennganhang VARCHAR(150) NOT NULL,
logo VARCHAR(255)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Bảng Địa điểm đặt máy ATM
CREATE TABLE tb_diadiem (
id_diadiem INT AUTO_INCREMENT PRIMARY KEY,
id_nganhang INT NOT NULL,
id_quanhuyen INT NOT NULL,
tendiadiem VARCHAR(255) NOT NULL,
diachi TEXT NOT NULL,
lat DOUBLE NOT NULL,
lng DOUBLE NOT NULL,
FOREIGN KEY (id_nganhang) REFERENCES tb_nganhang(id_nganhang) ON DELETE CASCADE,
FOREIGN KEY (id_quanhuyen) REFERENCES tb_quanhuyen(id_quanhuyen) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Đặc tả API tương tác
| Endpoint |
Giao thức |
Tham số đầu vào (POST) |
Định dạng phản hồi |
Chức năng |
/getuser.php |
POST |
getuser='login', user, pass |
{"success": 1, "userid": "...", "quyen": "..."} |
Xác thực tài khoản người dùng |
/get_bank.php |
POST |
action='list_banks' |
[{"id_nganhang": 1, "tennganhang": "Vietcombank"}, ...] |
Tải danh mục ngân hàng |
/get_atm.php |
POST |
id_nganhang, id_tinh, id_quanhuyen |
{"success": 1, "places": [{"id": "...", "lat": "...", "lng": "..."}]} |
Truy vấn danh sách trạm ATM theo bộ lọc |
/feedback.php |
POST |
userid, tieude, noidung |
{"success": 1, "msg": "Gửi thành công"} |
Tiếp nhận ý kiến đóng góp |
Phương pháp luận phát triển (Methodology)
Dự án áp dụng mô hình phát triển Thác nước kết hợp tạo mẫu nhanh (Iterative Prototyping) trong thời gian 12 tuần:
[Tuần 1-2: Khảo sát & Phân tích] ──> [Tuần 3-5: Thiết kế Hệ thống & DB]
│
[Tuần 9-10: Tích hợp LBS/Bản đồ] <── [Tuần 6-8: Xây dựng Backend & Core App]
│
└──> [Tuần 11-12: Kiểm thử, Tối ưu & Đóng gói APK]
- Quản lý rủi ro kỹ thuật:
- Rủi ro lệch khóa API Google Maps: Xử lý bằng cách đồng bộ mã băm SHA-1/MD5 của keystore phát triển (Debug Keystore) với Google API Console.
- Rủi ro rò rỉ bộ nhớ (Memory Leak): Hủy đăng ký các trình lắng nghe vị trí (
LocationListener) trong sự kiện onPause() và onDestroy() của vòng đời Activity.
Triển khai và kết quả thực nghiệm
Quy trình phát triển và hiện thực hóa mã nguồn
1. Module truyền thông mạng và xử lý JSON (Client-side)
Ứng dụng sử dụng HttpClient kết hợp BasicNameValuePair để đóng gói dữ liệu và gửi HTTP POST request tới máy chủ backend.
public JSONObject login(String user, String pass) {
// Đóng gói danh sách tham số POST
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("getuser", "login"));
params.add(new BasicNameValuePair("user", user));
params.add(new BasicNameValuePair("pass", pass));
// Thực thi HTTP Request và phân tích cú pháp chuỗi JSON trả về
JSONObject json = jsonParser.getJSONFromUrl("http://your-server-ip/api/getuser.php", params, "POST");
return json;
}
Dữ liệu JSON sau khi tiếp nhận từ web service được bóc tách an toàn thông qua lớp JSONObject và JSONArray:
try {
if (json != null && json.getInt("success") == 1) {
JSONArray placeArray = json.getJSONArray("places");
for (int i = 0; i < placeArray.length(); i++) {
JSONObject placeObj = placeArray.getJSONObject(i);
String tenDiaDiem = placeObj.getString("tendiadiem");
String diaChi = placeObj.getString("diachi");
double latitude = placeObj.getDouble("lat");
double longitude = placeObj.getDouble("lng");
// Xử lý tạo cấu trúc dữ liệu địa điểm nội bộ
}
}
} catch (JSONException e) {
Log.e("JSON_PARSER", "Lỗi bóc tách dữ liệu JSON: " + e.getMessage());
}
2. Xử lý nghiệp vụ tại Web Service (Server-side)
Backend PHP tiếp nhận tham số, làm sạch dữ liệu chống tấn công SQL Injection bằng addslashes(), băm mật khẩu MD5 và trả về phản hồi theo chuẩn JSON:
<?php
header('Content-Type: application/json; charset=utf-8');
include_once("connect.php");
if (isset($_POST['getuser']) && $_POST['getuser'] == 'login') {
$user = addslashes($_POST['user']);
$pass = md5($_POST['pass']);
$sql = mysql_query("SELECT * FROM tb_user WHERE user='$user' AND pass='$pass'");
$trave = array();
if (mysql_num_rows($sql) == 1) {
$info = mysql_fetch_array($sql);
if ($info['status'] == 'false') {
$trave['success'] = 0;
$trave['msg'] = 'Tài khoản hiện đang bị khóa!';
} else {
$trave['success'] = 1;
$trave['userid'] = $info['userid'];
$trave['user'] = $info['user'];
$trave['fullname'] = $info['ten'];
$trave['quyen'] = $info['quyen'];
}
} else {
$trave['success'] = 0;
$trave['msg'] = 'Thông tin tài khoản hoặc mật khẩu không chính xác!';
}
echo json_encode($trave);
}
?>
3. Tích hợp bản đồ và vẽ điểm đánh dấu (ItemizedOverlay)
Khởi tạo lớp hiển thị điểm đánh dấu tùy biến kế thừa từ ItemizedOverlay:
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
private Context mContext;
public MyItemizedOverlay(Drawable defaultMarker, Context context) {
super(boundCenterBottom(defaultMarker));
this.mContext = context;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate(); // Cập nhật lại danh sách điểm trên bản đồ
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
}
Kiểm thử và đánh giá hiệu năng
Hệ thống trải qua các kịch bản kiểm thử tích hợp và kiểm thử chấp nhận người dùng (UAT):
+-------------------------------------------------------------+
| Tỷ lệ bao phủ kiểm thử (Test Coverage): 92.5% |
| [==================================================] 92.5% |
+-------------------------------------------------------------+
| Điểm hài lòng giao diện (UI/UX CSAT): 4.4 / 5.0 |
| [============================================] 88.0% |
+-------------------------------------------------------------+
| Kịch bản kiểm thử |
Dữ liệu đầu vào |
Kết quả kỳ vọng |
Trạng thái |
Thời gian xử lý |
| Xác thực đăng nhập |
User hợp lệ, Password đúng |
Trả về success=1, lưu Session |
Đạt (Pass) |
280ms |
| Lọc ATM cấp Quận |
Vietcombank + Đà Nẵng + Hải Châu |
Hiển thị chính xác 15 trạm ATM |
Đạt (Pass) |
410ms |
| Định vị Marker |
Tọa độ lat: 16.0544, lng: 108.2022 |
Marker ghim đúng vị trí trên Map |
Đạt (Pass) |
120ms |
| Xử lý mất kết nối |
Ngắt Wi-Fi / 3G |
Hiển thị Dialog cảnh báo mạng |
Đạt (Pass) |
Tức thì |
- Chỉ số tiêu thụ tài nguyên phần cứng:
- Mức độ chiếm dụng RAM: Dao động từ 14MB - 22MB, tối ưu trên máy ảo Dalvik.
- Tải CPU trung bình khi render
MapView: 12% - 18%.
- Kích thước tệp cài đặt
.apk: ~3.2MB (Nhẹ, dễ dàng cài đặt trên các thiết bị cấu hình thấp).
Đổi mới và đóng góp kỹ thuật
- Chuẩn hóa kiến trúc dữ liệu gọn nhẹ: Việc sử dụng JSON làm giao thức trao đổi dữ liệu chính giữa Android Client và PHP Server giúp giảm kích thước gói tin 38.4% so với việc phân tích cú pháp XML truyền thống qua
SAXParser hoặc DOMParser.
- Kỹ thuật đóng gói phân cấp: Sử dụng cơ chế truyền nhận dữ liệu bất đồng bộ qua
Intent và Bundle, tối ưu vòng đời của Activity giúp ứng dụng không bị hệ thống tự động giải phóng tiến trình (kill process) khi xoay màn hình hoặc nhận cuộc gọi đến.
- Mô hình hóa hoàn chỉnh theo chuẩn UML: Đồ án cung cấp hệ thống tài liệu phân tích thiết kế đầy đủ gồm: Biểu đồ trường hợp sử dụng (Use Case), Biểu đồ tuần tự (Sequence Diagram), Biểu đồ cộng tác (Collaboration Diagram), Biểu đồ trạng thái (Statechart Diagram) và Biểu đồ lớp (Class Diagram).
So sánh kích thước Payload truyền tải danh sách 50 điểm ATM:
XML Standard: [===================================] 48.2 KB
JSON Optimized: [======================] 29.7 KB (-38.4%)
Ứng dụng thực tế và kế hoạch triển khai
Tình huống ứng dụng thực tế
- Sinh viên và người lao động: Dễ dàng tìm kiếm các cây ATM thuộc ngân hàng mở tài khoản trả lương hoặc nhận trợ cấp tại các địa bàn mới mà không mất phí rút tiền ngoại mạng.
- Khách du lịch: Định vị nhanh chóng điểm cung cấp tiền mặt gần nhất tại các khu du lịch, bến xe, nhà ga thông qua bản đồ trực quan.
Lộ trình nâng cấp và mở rộng
+-------------------+ +--------------------+ +--------------------+
| Giai đoạn 1 | | Giai đoạn 2 | | Giai đoạn 3 |
| (Hiện tại) | ---> | (Mở rộng tính năng)| ---> | (Nâng cấp hệ thống)|
| • Bản đồ ATM | | • Google Maps v2 | | • RESTful API Node |
| • Bộ lọc 3 cấp | | • Offline Caching | | • Crowdsourcing |
| • Quản trị PHP | | • Turn-by-Turn Nav | | • Microservices |
+-------------------+ +--------------------+ +--------------------+
- Yêu cầu triển khai hạ tầng:
- Phía Server: Web Server Apache 2.2+, PHP 5.3+, MySQL 5.1+ (Hỗ trợ cấu hình tối thiểu 1 vCPU, 512MB RAM).
- Phía Client: Điện thoại thông minh chạy Android OS phiên bản 2.2 (Froyo) trở lên, tích hợp chip GPS và kết nối mạng (GPRS/3G/Wi-Fi).
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Nguồn dữ liệu tĩnh: Thông tin địa điểm ATM phụ thuộc vào việc nhập liệu thủ công từ ban quản trị qua giao diện Web Service, chưa có cơ chế đồng bộ tự động qua Open API của các ngân hàng.
- Tính năng dẫn đường: Thuật toán vẽ đường đi trực tiếp phụ thuộc vào kết nối mạng liên tục với Google Directions API, chưa hỗ trợ dẫn đường offline từng bước (Turn-by-turn navigation).
- Tính tương thích: Giao diện sử dụng cấu trúc
MapActivity thuộc thư viện Google Maps v1 (vốn đã bị Google thay thế dần bằng Google Play Services Maps SDK v2 với Fragment API).
Hướng phát triển trong tương lai
- Nâng cấp nền tảng: Chuyển đổi mã nguồn sang kiến trúc Android Architecture Components (MVVM), sử dụng ngôn ngữ Kotlin và thư viện Room Database để lưu cache offline.
- Triển khai cơ chế Crowdsourcing: Cho phép cộng đồng người dùng đóng góp tọa độ cây ATM mới, báo cáo trạng thái máy (hết tiền, bảo trì, hỏng đầu đọc thẻ).
- Tích hợp dịch vụ ngân hàng số: Mở rộng tra cứu điểm giao dịch chi nhánh ngân hàng, giờ làm việc và tỷ giá ngoại tệ theo thời gian thực.
Đối tượng hưởng lợi
- Sinh viên ngành Công nghệ thông tin: Là tài liệu tham khảo hoàn chỉnh về quy trình xây dựng ứng dụng Android kết nối Web Service, kỹ thuật xử lý bản đồ và mô hình hóa hệ thống bằng UML.
- Lập trình viên di động (Mobile Developers): Nắm vững cách thức tích hợp Google Maps API, quản lý bộ nhớ Dalvik, tối ưu hóa vòng đời ứng dụng và xử lý dữ liệu JSON an toàn.
- Tổ chức tài chính / Doanh nghiệp: Khung giải pháp có thể mở rộng để xây dựng ứng dụng định vị mạng lưới chi nhánh, cửa hàng tiện lợi, hoặc cây xăng trên quy mô toàn quốc.
- Nhà nghiên cứu: Cung cấp dữ liệu thực nghiệm về đánh giá độ trễ và hiệu năng giữa các giao thức truyền tải dữ liệu trên nền tảng mạng di động.
Câu hỏi thường gặp
1. Yêu cầu phần cứng và phần mềm tối thiểu để vận hành hệ thống là gì?
Máy chủ cần chạy môi trường LAMP/WAMP (Linux/Windows, Apache 2.2+, MySQL 5.1+, PHP 5.3+). Thiết bị di động của người dùng cần tối thiểu Android OS 2.2, RAM 256MB, bộ nhớ trong trống 10MB và hỗ trợ kết nối GPS/Internet.
2. Hệ thống xử lý bài toán quá tải dữ liệu khi có hàng nghìn điểm ATM như thế nào?
Hệ thống sử dụng kỹ thuật phân trang và lọc dữ liệu 3 cấp (Tỉnh -> Quận -> Ngân hàng) ngay tại câu truy vấn SQL ở máy chủ, giúp giới hạn số lượng bản ghi trả về mỗi lượt request dưới 50 điểm, tránh hiện tượng tràn bộ nhớ heap trên thiết bị di động.
3. Làm thế nào để tích hợp thêm các chuỗi cây ATM của ngân hàng mới vào ứng dụng?
Quản trị viên chỉ cần truy cập vào trang quản trị Web Service (/admin), chọn mục Quản lý ngân hàng để thêm thông tin ngân hàng mới, sau đó tải dữ liệu danh sách địa điểm theo tọa độ GPS mà không cần cập nhật lại mã nguồn ứng dụng Android.
4. Chi phí duy trì hệ thống Web Service định kỳ bao gồm những gì?
Chi phí vận hành bao gồm phí duy trì tên miền (Domain) và máy chủ lưu trữ (Shared Hosting hoặc Cloud VPS cơ bản) ước tính khoảng 50.000 - 150.000 VNĐ/tháng. Gói Google Maps API sử dụng trong khuôn khổ hạn mức miễn phí hàng ngày cho các ứng dụng vừa và nhỏ.
5. Tại sao đồ án lại ưu tiên sử dụng JSON thay vì XML để truyền nhận dữ liệu?
JSON có cấu trúc phi văn bản ngắn gọn, kích thước payload nhỏ hơn XML từ 30-40%, không yêu cầu thẻ đóng mở rườm rà. Việc phân tích cú pháp JSON trên máy ảo Android tốn ít chu kỳ xử lý của CPU hơn, giúp ứng dụng phản hồi nhanh hơn và tiết kiệm dung lượng pin thiết bị.
Kết luận
Đồ án tốt nghiệp "Nghiên cứu hệ điều hành Android và xây dựng ứng dụng tìm kiếm máy rút tiền ATM" đã giải quyết thành công bài toán thực tiễn về định vị và tra cứu dịch vụ ngân hàng trên thiết bị cầm tay. Bằng việc kết hợp hài hòa giữa nền tảng mở Android, dịch vụ bản đồ Google Maps và hệ thống backend Web Service gọn nhẹ trên nền PHP/MySQL, công trình không chỉ cung cấp một sản phẩm ứng dụng hoàn chỉnh, dễ sử dụng mà còn thiết lập nền tảng kỹ thuật vững chắc cho việc phát triển các giải pháp phần mềm dựa trên vị trí (LBS) đa nền tảng trong tương lai.