Xây dựng ứng dụng đặt taxi trên thiết bị android
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
CƠ SỞ TẠI THÀNH PHỐ HỒ CHÍ MINH
-BÁO CÁO ĐỊNH KỲ THỰC TẬP
TỐT NGHIỆP ĐẠI HỌC
Đề tài : “Xây dựng ứng dụng đặt taxi trên thiết bị Android”
Giáo viên hướng dẫn : ThS Lê Minh Hóa
Hệ : Đại học chính quy
TPHCM, Tháng 8/2015
Trang 2LỜI CẢM ƠN
Sau một thời gian thực hiện Đồ án đến nay, mọi công việc đã hoàn thành Trongquá trình thực hiện đồ án tôi đã nhận được nhiều sự giúp đỡ từ mọi người Tôi xin chânthành gửi lời cám ơn đến những người tôi vô cùng biết ơn:
Trước hết, tôi xin chân thành cảm ơn Khoa Công Nghệ Thông Tin, Học Viện CôngNghệ Bưu Chính Viễn Thông cơ sở tại Thành Phố Hồ Chí Minh đã tạo điều kiện tốt chotôi thực hiện đề tài thực tập tốt nghiệp này
Tôi xin chân thành cảm ơn thầy Lê Minh Hóa đã tận tình hướng dẫn tôi trong suốtthời gian thực hiện đề tài
Cuối cùng tôi xin chân thành cảm ơn quý thầy cô trong khoa đã tận tình giảng dạy,trang bị cho chúng tôi những kiến thức quý báu trong những năm học vừa qua
Mặc dù đã cố gắng hoàn thành đề tài trong phạm vi cho phép, nhưng đây là ngônngữ mới, khá xa lạ với tôi nên không thể tránh khỏi sai sót, tôi rất mong nhận được sựđóng góp phê bình của các thầy cô để để được những kinh nghiệm khi ra trường và côngviệc sau này
Sinh viên
Trang 3CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập- Tự do- Hạnh phúc
TP Hồ Chí Minh, ngày tháng năm 2015
NHẬN XÉT CỦA ĐƠN VỊ THỰC TẬP THỰC TẬP TỐT NGHIỆP ĐẠI HỌC
1 Tên đề tài: “Xây dựng ứng dụng đặt taxi trên thiết bị Android”.
2 Sinh viên:
3 Giáo viên hướng dẫn: ThS.Lê Minh Hóa
4 Nơi thực tập: Học viện Công nghệ Bưu chính Viễn thông.
NỘI DUNG NHẬN XÉT
Xác nhận của cơ sở thực tập
Trang 4CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập- Tự do- Hạnh phúc
TP Hồ Chí Minh, ngày tháng năm 2015
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN THỰC TẬP TỐT NGHIỆP ĐẠI HỌC
1 Tên đề tài: “Xây dựng ứng dụng đặt taxi trên thiết bị Android”.
2 Sinh viên:
3 Giáo viên hướng dẫn: ThS Lê Minh Hóa
4 Nơi thực tập: Học Viện Công Nghệ Bưu Chính Viễn Thông.
NỘI DUNG NHẬN XÉT
………
………
2 Đánh giá chi tiết: ………
………
………
………
3 Nhận xét về tinh thần, thái độ làm việc: ………
………
4 Kết luận: ………
………
5 Điểm hướng dẫn ():
GIẢNG VIÊN HƯỚNG DẪN
Trang 5Sau khi nghiên cứu đề tài tôi đã quyết định chia thời gian nghiên cứu làm hai giai đoạn: Giai đoạn một, tập trung nghiên cứu về những vấn đề cơ bản của ngôn ngữ, cách sử dụng.Net Web Service trong Android, cách thức đặt Taxi Giai đoạn hai sẽ tiến hành viết chương trình dựa trên những gì đã nghiên cứu ở giai đoạn 1.
Trang 6Mục lục
Trang 7CHƯƠNG I: TÌM HIỂU VỀ WEB SERVICE, GOOGLE CLOUD MESSAGE
I Giới thiệu về Web Service:
1. Khái niệm :
Theo định nghĩa của W3C (World Wide Web Consortium), Webservice là một hệ thống phần mềm được thiết kế để hỗ trợ khả năng tươngtác giữa các ứng dụng trên các máy tính khác nhau thông qua mạngInternet, giao diện chung và sự gắn kết của nó được mô tả bằng XML Webservice là tài nguyên phần mềm có thể xác định bằng địa chỉ URL, thựchiện các chức năng và đưa ra các thông tin người dùng yêu cầu Một Webservice được tạo nên bằng cách lấy các chức năng và đóng gói chúng saocho các ứng dụng khác dễ dàng nhìn thấy và có thể truy cập đến những dịch
vụ mà nó thực hiện, đồng thời có thể yêu cầu thông tin từ Web servicekhác Nó bao gồm các mô đun độc lập cho hoạt động của khách hàng vàdoanh nghiệp và bản thân nó được thực thi trên server
2. Đặc điểm :
- Web service cho phép client và server tương tác được với nhaungay cả trong những môi trường khác nhau Ví dụ, đặt Web server cho ứngdụng trên một máy chủ chạy hệ điều hành Linux trong khi người dùng sửdụng máy tính chạy hệ điều hành Windows, ứng dụng vẫn có thể chạy và
xử lý bình thường mà không cần thêm yêu cầu đặc biệt để tương thích giữahai hệ điều hành này
- Phần lớn kĩ thuật của Web service được xây dựng dựa trên mãnguồn mở và được phát triển từ các chuẩn đã được công nhận, ví dụ nhưXML
- Một Web service bao gồm có nhiều mô-đun và có thể công bố lênmạng Internet
- Là sự kết hợp của việc phát triển theo hướng từng thành phần vớinhững lĩnh vực cụ thể và cơ sở hạ tầng Web, đưa ra những lợi ích cho cảdoanh nghiệp, khách hàng, những nhà cung cấp khác và cả những cá nhânthông qua mạng Internet
- Một ứng dụng khi được triển khai sẽ hoạt động theo mô hìnhclient-server Nó có thể được triển khai bởi một phần mềm ứng dụng phíaserver ví dụ như PHP, Oracle Application server hay Microsoft.Net…
Trang 83. Kiến trúc Web Service:
- Tầng vận chuyển với những công nghệ chuẩn là HTTP, SMTP,JMS
- Tầng giao thức tương tác dịch vụ (Service CommunicationProtocol) với công nghệ chuẩn là SOAP SOAP là giao thức nằmgiữa tầng vận chuyển và tầng mô tả thông tin về dịch vụ, chophép người dùng triệu gọi một dịch vụ từ xa thông qua một thôngđiệp XML
- Tầng mô tả dịch vụ (Service Description) với công nghệ chuẩn làWSDL và XML WSDL là một ngôn ngữ mô tả giao tiếp và thựcthi dựa trên XML Web Service sử dụng ngôn ngữ WSDL đểtruyền các tham số và các loại dữ liệu cho các thao tác, các chứcnăng mà web service cung cấp
- Tầng dịch vụ (Service) : Cung cấp các chức năng của Service
- Tầng đăng ký (Service Registry) với công nghệ chuẩn là UDDI
- Ngoài ra, để các dịch vụ có tính an toàn, toàn vẹn và bảo mậtthông tin, trong kiến trúc dịch vụ Web, chúng ta có thêm các tầngPolicy, Security, Transaction, Management
4. Các thành phần của Web Service :
a XML – eXtensible Markup Language:
Là một chuẩn mở do W3C đưa ra cho cách thức mô tả dữ liệu, nóđược sử dụng để định nghĩa các thành phần dữ liệu trên trang web vàcho những tài liệu B2B Về hình thức, XML hoàn toàn có cấu trúc thẻ
Trang 9giống như ngôn ngữ HTML nhưng HTML định nghĩa thành phần đượchiển thị như thế nào thì XML lại định nghĩa những thành phần đó chứacái gì Với XML, các thẻ có thể được lập trình viên tự tạo ra trên mỗitrang web và được chọn là định dạng thông điệp chuẩn bởi tính phổ biến
và hiệu quả mã nguồn mở
Do dịch vụ Web là sự kết hợp của nhiều thành phần khác nhau nên
nó sử dụng các tính năng và đặc trưng của các thành phần đó để giaotiếp XML là công cụ chính để giải quyết vấn đề này và là kiến trúc nềntảng cho việc xây dựng một dịch vụ Web, tất cả dữ liệu sẽ được chuyểnsang định dạng thẻ XML Khi đó, các thông tin mã hóa sẽ hoàn toànphù hợp với các thông tin theo chuẩn của SOAP hoặc XML-RPC và cóthể tương tác với nhau trong một thể thống nhất
b WSDL – Web Service Description Language.
WSDL định nghĩa cách mô tả dịch vụ Web theo cú pháp tổng quátcủa XML, bao gồm các thông tin:
WSDL thường được sử dụng kết hợp với XML schema và SOAP đểcung cấp dịch vụ Web qua Internet Một client khi kết nối tới dịch vụWeb có thể đọc WSDL để xác định những chức năng sẵn có trên server
Trang 10Sau đó, client có thể sử dụng SOAP để lấy ra chức năng chính xác cótrong WSDL.
c Universal Description, Discovery, and Integration (UDDI)
Để có thể sử dụng các dịch vụ, trước tiên client phải tìm dịch vụ, ghinhận thông tin về cách sử dụng và biết được đối tượng nào cung cấpdịch vụ UDDI định nghĩa một số thành phần cho biết các thông tin này,cho phép các client truy tìm và nhận những thông tin được yêu cầu khi
sử dụng dịch vụ Web
d SOAP – Simple Object Access Protocol
Chúng ta đã hiểu cơ bản Web service như thế nào nhưng vẫn cònmột vấn đề khá quan trọng Đó là làm thế nào để truy xuất dịch vụ khi
đã tìm thấy? Câu trả lời là các Web service có thể truy xuất bằng mộtgiao thức là Simple Object Access Protocol – SOAP Nói cách khácchúng ta có thể truy xuất đến UDDI registry bằng các lệnh gọi hoàntoàn theo định dạng của SOAP
SOAP là một giao thức giao tiếp có cấu trúc như XML Nó đượcxem là cấu trúc xương sống của các ứng dụng phân tán được xây dựng
từ nhiều ngôn ngữ và các hệ điều hành khác nhau SOAP là giao thứcthay đổi các thông điệp dựa trên XML qua mạng máy tính, thôngthường sử dụng giao thức HTTP
Một client sẽ gửi thông điệp yêu cầu tới server và ngay lập tứcserver sẽ gửi những thông điệp trả lời tới client Cả SMTP và HTTP đều
là những giao thức ở lớp ứng dụng của SOAP nhưng HTTP được sửdụng và chấp nhận rộng rãi hơn bởi ngày nay nó có thể làm việc rất tốtvới cơ sở hạ tầng Internet
Thông điệp theo định dạng SOAP là một văn bản XML bình thườngbao gồm các phần tử sau:
- Phần tử gốc – envelop: phần tử bao trùm nội dung thông điệp, khaibáo văn bản XML như là một thông điệp SOAP
- Phần tử đầu trang – header: chứa các thông tin tiêu đề cho trang, phần
tử này không bắt buộc khai báo trong văn bản Header còn có thể mangnhững dữ liệu chứng thực, những chứ ký số, thông tin mã hóa hay càiđặt cho các giao dịch khác
Trang 11- Phần tử khai báo nội dung chính trong thông điệp – body, chứa cácthông tin yêu cầu và thông tin được phản hồi.
- Phần tử đưa ra các thông tin về lỗi -fault, cung cấp thông tin lỗi xảy ratrong qúa trình xử lý thông điệp
Một SOAP đơn giản trong body sẽ lưu các thông tin về tên thôngđiệp, tham chiếu tới một thể hiện của dịch vụ, một hoặc nhiều tham số
Có 3 kiểu thông báo sẽ được đưa ra khi truyền thông tin: requestmessage(tham số gọi thực thi một thông điệp), respond message (cáctham số trả về, được sử dụng khi yêu cầu được đáp ứng) và cuối cùng làfault message (thông báo tình trạng lỗi)
Kiểu truyền thông: Có 2 kiểu truyền thông
- Remote procedure call (RPC): cho phép gọi hàm hoặc thủ tục quamạng Kiểu này được khai thác bởi nhiều Web service
- Document: được biết đến như kiểu hướng thông điệp, nó cung cấpgiao tiếp ở mức trừu tượng thấp, khó hiểu và yêu cầu lập trình viên mấtcông sức hơn
Hai kiểu truyền thông này cung cấp các định dạng thông điệp, tham
số, lời gọi đến các API khác nhau nên việc sử dụng chúng tùy thuộc vàothời gian và sự phù hợp với Web service cần xây dựng
Cấu trúc dữ liệu: Cung cấp những định dạng và khái niệm cơ bảngiống như trong các ngôn ngữ lập trình khác như kiểu dữ liệu (int,string, date…) hay những kiều phức tạp hơn như struct, array, vector…Định nghĩa cấu trúc dữ liệu SOAP được đặt trong namespace SOAP-ENC
Mã hóa: Giả sử service rquester và service provider được phát triểntrong Java, khi đó mã hóa SOAP là làm thế nào chuyển đổi từ cấu trúc
Trang 12dữ liệu Java sang SOAP XML và ngược lại, bởi vì định dạng cho WebService chính là XML Bất kỳ một môi trường thực thi SOAP nào cũngphải có một bảng chứa thông tin ánh xạ nhằm chuyển đổi từ ngôn ngữJava sang XML và từ XML sang Java – bảng đó được gọi làSOAPMappingRegistry Nếu một kiểu dữ liệu được sử dụng dưới mộtdạng mã hóa thì sẽ có một ánh xạ tồn tại trong bộ đăng ký của môitrường thực thi SOAP đó.
5. Ví dụ xây dựng một dịch vụ Web:
B1: Tạo cơ sở dữ liệu như sau:
B2: Dùng Visual Studio tạo một Web Service:
- Tạo ASP.NET Web Application
Trang 13- Tạo Web Service:
Trang 14B3: Tiến hành tương tác CSDL để viết các dịch vụ (dùng Linq)
- Tạo kết nối: Chọn Server Explorer, chọn biểu tượng đượckhoanh đỏ
Trang 15- Màn hình kết nối hiện ra, tiến hành điền thông tin thích hợp.(Chú ý Test Connection nếu Succeeded là được).
Trang 17- Add Linq:
- Tiến hành kéo thả CSDL, Store Proceduce
Trang 18B4: Tiến hành viết dịch vụ getListTaxiNearCustomer trả về danhsách taxi trong bán kính 3km tính từ vị trí người dùng.
Trang 19B5: F5 chạy thử dịch vụ.
Trang 20II Giới thiệu về Google Cloud Message (GSM).
1. Giới thiệu :
Google Cloud Messaging (GCM) là một dịch vụ cho phép gửi dữ liệu từmáy chủ của bạn đến các thiết bị Android của người dùng, và ngược lại
GCM được sử dụng cho hoạt động giao dịch giữa các ứng dụng và máy chủ
hỗ trợ đầu cuối Cloud Messaging hiện đang được tích hợp vào Google PlayServices và nhờ những cải tiến mạnh mẽ
2. Nguyên tắc hoạt động :
3. Thành phần :
Có 3 thành phần chính là:
Trang 21- GCM Connection Servers: Máy chủ google dùng để gửi tin nhắn giữa server
- Để sử dụng, ta cần đăng ký token với GCM Để làm được điều này sử dụng
đối tượng InstanceID.
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(senderId,
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
- Sử dụng một service extend InstanceIDListenerService để theo dõi sự thay
đổi của token Phương thức onTokenRefresh được gọi khi token bị thay đổi
@Override
public void onTokenRefresh() {
// Do something
}
- Sử dụng một service extend GcmListenerService để nhận tin nhắn Phương
thức onMessageReceived được gọi khi có tin nhắn truyền tới
@Override
Trang 22public void onMessageReceived(String from, Bundle data) {
String message = data.getString("message");
Log.i(TAG, "From: " + from);
Log.i(TAG, "Message: " + message);
+ Authorization: key = YOUR_API_KEY
+ Content-Type: application/json cho định dạng JSON hoặc www-form-urlencoded;charset=UTF-8 cho định dạng plant text Nếu khôngkhai báo thì mặc định là plant text Ví dụ:
Trang 23+ time_to_live: quy định thời gian lưu trữ ở bộ nhớ GCM nếu thiết bị offline.Tối đa là 4 tuần.
Ví dụ:
{ "collapse_key": "score_update", "time_to_live": 108,
"data": { "score": "4x8", "time": "15:16.2342"
}, "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx "
kSOAP2 được tạo thành từ XML parse, de/serializer và transport layer
- XML parse: kSOAP2 sử dụng kXML và pull parse xml để phân tích cú pháp
- De/serializer: Mapping các đối tượng vào tài liệu XML và ngược lại Có 2đối tượng chính để thực hiện là là SoapPrimitives hoặc SoapObjects
- The transport layer: tầng này cung cấp các cơ chế để server và client truyền thông điệp với nhau
2 Sử dụng :
- Tạo phần body gồm namespace và tên phương thức Thêm thuộc tính nếu
cần thiết
Trang 24+ Ví dụ một HTTP Request như hình dưới Namespace sẽ là http://nhattuan.org, Method name là driverLogin Chúng ta cần có thêm một thuộc tính imei dạng string/
Final String NAMESPACE = “http://nhattuan.org”;
Final String METHOD_NAME = “driverLogin”;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("imei",imei);
- Tạo một Envelop (Sử dụng SOAP 1.1):
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
// Sử dụng Web Service chạy trên Net envelope.dotNet = true;
// Thêm phần body vào envelopenvelope.setOutputSoapObject(request);
- Tạo đối tượng HTTPTransportSE để gửi request
Trang 25// URL địa chỉ của web service, ví dụ:
// http://ttaxi.somee.com/TTaxiWebService.asmxHttpTransportSE transportSE = new HttpTransportSE(URL);
- Gửi request:
// SOAPAction = NAMESPACE + METHOD_NAMEtransportSE.call(SOAP_ACTION, envelope);
- Nhận response từ server:
+ Dữ liệu trả về có kiểu Primitive Data:
SoapPrimitive response=(SoapPrimitive) envelope.getResponse();+ Dữ liệu trả về có kiểu Complex Data:
SoapObject response = (SoapObject) envelope.getResponse();
// Có thể duyệt mảng nếu có nhiều giá trịfor(int i=0; i< response.getPropertyCount(); i++) {
SoapObject soapItem =(SoapObject) response.getProperty(i);String item1 = soapItem.getProperty (“item1”).toString();//……
Cụ thể, sử dụng một fused location provider để lấy vị trí cuối cùng của thiết
bị Fused location provider là một trong các location APIs của Google play