Xây dựng mô hình ứng dụng mạng thông qua hệ điều hành Android và Web Service

Những năm gần đây, nhu cầu về phát triển thông tin đang phát triển như vũ bão trên thế giới  nói chung và Việt Nam nói riêng, đặt biệt là các công nghệ tiên tiến, nền tảng hệ điều hành cho các điện thoại di động cầm tay, smartphone. Những chiếc smartphone này ra đời nhằm đem lại sự thuận tiện trong công việc, giao tiếp kinh doanh và hỗ trợ người sử dụng , hiệu quả mà nó mang lại rất lớn.

Hiện nay, các ứng dụng trên máy tính đang dần hiện thực trên các điện thoại smartphone và có thể nói chưa bao giờ có xu thế phát triển mạnh như hiện nay. Bên cạnh sự độc quyền của Apple về hệ điều hành iOS cho các điện thoại smartphone mà Apple sản xuất. Các hệ điều hành mới đang được nổi lên và dần hoàn thiện như Android của Google, Bada của Samsung… đã mang lại cho người dùng nhiều sự lựa chọn trong việc chọn cho mình những thiết bị ưng ý, đáp ứng được những nhu cầu cần thiết. Việc ra đời các điện thoại và máy tính bảng giá rẻ của các tập đoàn lớn đã đưa ra xu thế phát triển mạnh mẽ hơn nữa về lĩnh vực này và mang lại lợi ích cho người sử dụng. Hệ điều hành Android của Google đang ngày càng phát triển và hoàn thiện hơn nữa. Số lượng người dùng các điện thoại chạy hệ điều hành ngày càng nhiều và những tiện ích, hiệu quả mà nó mang lại ngày càng lớn. Hàng triệu ứng dụng được phát triển trên nền tảng Android và đưa ra thị trường qua Android Market.
           
 Vì vậy, chúng tôi chia sẻ đề tài này một phần cũng vì sự hứng thú mà hệ điều hành này mang lại. Tiếp thu các công nghệ mới của hệ điều hành Android và giao tiếp thông qua web service của .Net.
Sau đây là bài viết công nghệ này : “Xây dựng mô hình ứng dụng mạng thông qua hệ điều hành Android và Web Service”.


MỤC LỤC
Chương 1: MỞ ĐẦU

Chương 2: CƠ SỞ LÝ THUYẾT

2.1 Sơ lược về Web service :

2.1.1 Khái niệm về Web Service :

2.1.2  Đặc điểm của Web Service :

2.1.3 Kiến trúc của Web Service :

2.1.4 Các thành phần của Web Service :

2.1.5     An toàn cho dịch vụ Web:

2.1.6 Xây dựng một dịch vụ Web:

2.1.7  Tích hợp dịch vụ Web theo chuẩn :

2.2     Sơ lược về hệ điều hành Android :

2.2.1 Giới thiệu chung về hiệu hành android

2.2.2 Kiến trúc hệ điều hành android

2.2.3 Môi trường lập trình trên hệ điều hành Android

2.3.4 Các thành phần quan tâm khi lập trình trên HĐH Android :

2.3.5 Làm việc với Maps, Geocoding, Location Based Services :

2.3.6 Dùng MapView

2.4 Giới thiệu về JSON : có nghĩa là JavaScript Object Notation .

2.5  Giới thiệu về GSON:

Chương 3 : GOOGLE PLACES API

3.1 Giới thiệu về Google Places API :

3.2 Chứng thực :

3.3 Place Searches :

3.3.1 Yêu cầu để tìm kiếm :

3.4 Kết quả trả về sau khi tìm kiếm :

3.5  Chi tiết về địa điểm tìm kiếm :

3.6  Báo cáo 1 địa điểm :

Chương 4 : PHÂN TÍCH THIẾT KẾ ỨNG DỤNG

4.1  Thiết kế cơ sở dữ liệu :

4.1.1:    Bảng atm

4.1.2 : Bảng district

4.1.3 : Bảng city

4.1.4 : Bảng bank

4.1.5 : Bảng bookstoretype

4.1.6 : Bảng bookstore

4.2  các mô hình phân rã chức năng :

4.2.1 Mô hình Use-case của chương trình :

4.2.2   Các chức năng của chương trình thông qua các mô hình :

Chương 5 : TRIỂN KHAI VÀ  CÀI ĐẶT

5.1 Triển khai ứng dụng:

5.1.1  Giao tiếp giữa client Android và Server :

5.2 Cài đặt ứng dụng :

5.2.1 Cài đặt phía server :

5.2.2  Cài Đặt Phía Client :

Chương 6 : TỔNG KẾT

6.1 Kết Luận :

6.2 Hướng phát triển :

DANH MỤC TÀI LIỆU THAM KHẢO

Chương 1 : MỞ ĐẦU

 1.1 Giới thiệu :

Trong xu thế phát triển của công nghệ hiện nay, và cùng theo đó là sự phát triển, ra đời của các thiết bị smartphone tân tiến. Việc tốc độ xử lý nhanh, bộ nhớ SDCard lớn trên các máy điện thoai smartphone cho phép thực hiện các nhiệm vụ trong công việc hay giải trí dần dần thay thế cho máy tính. Các ứng dụng trên môi trường mạng dần thay thế các ứng dụng chạy trên máy đơn, cục bộ. Với sự lớn mạnh và phát triển vượt bậc trong những năm gần đây,HĐH Android đã cho thấy được thế mạnh của mình trong các thiết bị smartphone.  Các ứng dụng, phần mềm phát triển trên Android OS ngày càng nhiều, và mục đícsh của các ứng dụng ngày càng đáp ứng được yêu cầu của người dùng.

1.2  Lý do chọn đề tài :

Hiện nay, việc tìm kiếm các thông tin, các chỉ dẫn bằng các thiết bị tìm kiếm,và thân thiện với người dùng như điện thoại, máy tính bảng, laptop đã trở nên rất phổ biển. Chỉ cần thiết bị có kết nối internet và thiết bị hỗ trợ các công nghệ tiên tiến như 3G là người sử dụng có thể biết vị trí hiện tại của mình và tìm kiếm các thông tin mong muốn. Việc google đang ngày càng phát triển mạnh và quan tâm đến lĩnh vực này nên đã cho ra đời hàng ngàn services nhằm giải quyết vấn đề này và giúp lập trình viên thuận tiện khi phát triển ứng dụng của mình.

Vì vậy nhóm chúng em đã quyết định lấy Android OS làm nền tảng cho đề tài của nhóm. Thể hiện rõ các services mà google cung cấp và hiện thực mô hình thông qua ứng dụng tìm địa điểm trên android sử dụng công nghệ web service của nền tảng .Net

1.3 Mục đích của đề tài:

Đề tài xây dựng mô hình ứng dụng mạng trên Android OS thông qua Web Service. Đề tài nhằm giải quyết việc tìm các địa điểm  mà người dùng đang cần như tìm địa điểm, quán cà phê, trạm xăng, cây atm, các ngân hàng…gần nhất mang lại thuận lợi cho người dùng. Thông qua môi trường mạng, sử dụng webservice giúp cho ứng dụng  kết nối đến csdl của google api và cơ sở dữ liệu của server. Các thiết bị chạy hệ điều hành android sẽ kết nối đến csdl thông qua webservice và hiển thị thông tin cần tìm kiếm cho người sử dụng cần.

1.4  Phạm vi nghiên cứu :

Để đáp ứng được yêu cầu của ứng dụng, đối tượng nghiên cứu cần phải quan tâm là cách thức hoạt động của nền tảng của hệ điều hành android, phát triển ứng dụng cơ bản trên android, cách thức làm việc của webservice của nền tảng .NET, đối tượng JSON, GSON library được hỗ trợ khi phát triển ứng dụng android giao tiếp với môi trường networking. Thư viện hỗ trợ Ksoap2 khi Hệ  điều hành Android giao tiếp với web service .NET

1.5  Bố cục của đề tài :

Đề tài gồm có bố cục như sau :

            Chương 1 : Mở đầu.

            Chương 2 : Cơ sở lý thuyết.

            Chương 3 : Giới thiệu về Google Places API.  

            Chương 4 : Phân tích và thiết kế

            Chương 5 : Triển khai và cài đặt

            Chương 6 : Tổng kết                                                    
                                                                                                                                                                                                                                                         

Chương 2: CƠ SỞ LÝ THUYẾT

2.1 Sơ lược về Web service :

     2.1.1 Khái niệm về Web Service :

Theo định nghĩa của W3C (World Wide Web Consortium), Web Service là một hệ thống phần mềm được thiết kế để hỗ trợ khả năng tương tác giữa các ứng dụng trên các máy tính khác nhau thông qua mạng Internet, giao diện chung và sự gắn kết của nó được mô tả bằng XML. Dịch vụ Web là tài nguyên phần mềm có thể xác định bằng địạ chỉ URL, thực hiệ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 dịch vụ Web được tạo nên bằng cách lấy các chức năng và đóng gói chúng sao cho 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ừ dịch vụ Web khá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.

Sơ đồ tương tác giữa User và Web Service:
Hình 2. 1 Mô hình tương tác giữa client và web service


   2.1.2  Đặc điểm của Web Service :

       2.1.2.1  Đặc điểm chung :        

§  Web Service cho phép client và server tương tác được với nhau ngay cả trong những môi trường khác nhau.

§  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 theo các chuẩn đã được công nhận.

§  Là sự kết hợp của việc phát triển theo hướng từng thành phần với nhữ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ân thông qua mạng Internet.

§  Một ứng dụng được triển khai đều hoạt động theo mô hình client-server.

§  Web service có ứng dụng thực tế rộng rãi trong các lĩnh vực dịch vụ chọn lọc và phân loại tin tức, ứng dụng cho các dịch vụ du lịch, bán hang qua mạng, tỉ giá, chứng khoán, các dịch vụ giao dịch trực truyến như đặt vé máy bay, tàu xe.

   2.1.2.2: Ưu điểm và nhược điểm của Web Service :

§  Ưu điểm :

-         Cung cấp khả năng hoạt động rộng lớn với các ứng dụng phần mềm khác nhau chạy trên các nền tảng khác nhau.

-         Sử dụng các giao thức và các chuẩn mở. Giao thức và định dạng dữ liệu theo dạng text, thuận lợi cho người phát triển ứng dụng.

-         Nâng cao khả năng tái sử dụng.

-         Thúc đẩy đầu tư các hệ thống phần mềm đa tồn tại bằng cách cho phép các tiến trình/ chức năng nghiệp vụ đóng gói trong giao diện web service.

-         Tạo mối tương tác lẫn nhau và mềm dẻo giữa các thành phần trong hệ thống, dễ dàng cho việc phát triển các hệ thống phân tán.

-         Thúc đẩy hệ thống tích hợp, giảm sự phức tạp của hệ thống.

§  Nhược điểm :

-         Có quá nhiều chuẩn cho dịch vụ web khiến người dùng khó nắm bắt.

-         Cần quan tâm hơn nhiều về vấn đề bảo mật.

-         Các giao thức được thay đổi và nâng cấp, đòi hỏi ứng dụng của client  phải được nâng cấp, thay đổi.

2.1.3 Kiến trúc của Web Service :

Dịch vụ Web gồm có 3 chuẩn chính: SOAP (Simple Object Access Protocol), WSDL (Web Service Description Language) và UDDI (Universal Description, Discovery, and Integration). UDDI được sử dụng để đăng ký và khám phá dịch vụ Web đã được miêu tả cụ thể trong WSDL. Giao tác UDDI sử dụng SOAP để nói chuyện với UDDI server, sau đó các ứng dụng SOAP yêu cầu một dịch vụ Web. Các thông điệp SOAP được gửi đi chính xác bởi HTTP và TCP/IP.
 Hình 2. 2 Sơ đồ kiến trúc của web service



Có 4 thành phần chính :

§  Dịch vụ vận chuyển (Service Transport): có nhiệm vụ truyền thông điệp giữa các ứng dụng mạng, bao gồm những giao thức như HTTP, SMTP, FTP, JSM và gần đây nhất là giao thức thay đổi khổi mở rộng (Blocks Extensible Exchange Protocol- BEEP).

§  Thông điệp XML: có nhiệm vụ giải mã các thông điệp theo định dạng XML để có thể hiểu được ở mức ứng dụng tương tác với người dùng. Hiện tại, những giao thức thực hiện nhiệm vụ này là XML-RPC, SOAP và REST.

§  Mô tả dịch vụ: được sử dụng để miêu tả các giao diện chung cho một dịch vụ Web cụ thể. WSDL thường được sử dụng cho mục đích này, nó là một ngôn ngữ mô tả giao tiếp và thực thi dựa trên XML. Dịch vụ Web sẽ sử dụng ngôn ngữ này để truyền tham số và các loại dữ liệu cho các thao tác và chức năng mà dịch vụ Web cung cấp.

§  Khám phá dịch vụ: tập trung dịch vụ vào trong một nơi được đăng ký, từ đó giúp một dịch vụ Web có thể dễ dàng khám phá ra những dịch vụ nào đã có trên mạng, tốt hơn trong việc tìm kiếm những dịch vụ khác để tương tác. Một dịch vụ Web cũng phải tiến hành đăng ký để các dịch vụ khác có thể truy cập và giao tiếp. Hiện tại, UDDI API thường được sử dụng để thực hiện công việc này.


Hình 2. 3 Mô hình chi tiết các thành phần của web service

Trong đó, tầng giao thức tương tác dịch vụ (Service Communication Protocol) với công nghệ chuẩn là SOAP. SOAP là giao thức nằm giữa tầng vận chuyển và tầng mô tả thông tin về dịch vụ, cho phé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. Ngoài ra, để các dịch vụ có tính an toàn, toàn vẹn và bảo mật thông tin, trong kiến trúc dịch vụ Web, chúng ta có thêm các tầng Policy, Security, Transaction, Management.

2.1.4 Các thành phần của Web Service :

2.1.4.1 Ngôn ngữ 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ẻ giống như ngôn ngữ HTML nhưng HTML định nghĩa thành phần được hiển thị như thế nào thì XML lại định nghĩa những thành phần đó chứa cái gì. Với XML, các thẻ có thể được lập trình viên tự tạo ra trên mỗi trang 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 đó để giao tiếp. XML là công cụ chính để giải quyết vấn đề này và là kiến trúc nền tảng cho việc xây dựng một dịch vụ Web, tất cả dữ liệu sẽ được chuyển sang định dạng thẻ XML. Khi đó, các thông tin mã hóa sẽ hoàn toàn phù 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.

2.1.4.2 WSDL - Web Service Description Language :

WSDL định nghĩa cách mô tả dịch vụ Web theo cú pháp tổng quát của XML, bao gồm các thông tin:

§  Tên dịch vụ

§  Giao thức và kiểu mã hóa sẽ được sử dụng khi gọi các hàm của dịch vụ Web

§  Loại thông tin: thao tác, tham số, những kiểu dữ liệu (có thể là giao diện của dịch vụ Web cộng với tên cho giao diện này).

Một WSDL hợp lệ gồm hai phần: phần giao diện (mô tả giao diện và phương thức kết nối) và phần thi hành mô tả thông tin truy xuất CSDL. Cả hai phần này sẽ được lưu trong 2 tập tin XML tương ứng là tập tin giao diện dịch vụ và tập tin thi hành dịch vụ. Giao diện của một dịch vụ Web được miêu tả trong phần này đưa ra cách thức làm thế nào để giao tiếp qua dịch vụ Web. Tên, giao thức liên kết và định dạng thông điệp yêu cầu để tương tác với dịch vụ Web được đưa vào thư mục của WSDL.

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. Sau đó, client có thể sử dụng SOAP để lấy ra chức năng chính xác có trong WSDL.

2.1.4.3 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ụ, ghi nhận thông tin về cách sử dụng và biết được đối tượng nào cung cấp dị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.

Ø  Cấu trúc UDDI :

§  Trang trắng - White pages: chứa thông tin liên hệ và các định dạng chính yếu của dịch vụ Web, chẳng hạn tên giao dịch, địa chỉ, thông tin nhận dạng… Những thông tin này cho phép các đối tượng khác xác định được dịch vụ.

§  Trang vàng - Yellow pages: chứa thông tin mô tả dịch vụ Web theo những loại khác nhau. Những thông tin này cho phép các đối tượng thấy được dịch vụ Web theo từng loại với nó.

§  Trang xanh - Green pages: chứa thông tin kỹ thuật mô tả các hành vi và các chức năng của dịch vụ Web.

§  Loại dịch vụ - tModel:  chứa các thông tin về loại dịch vụ được sử dụng.

2.1.4.4 SOAP - Simple Object Access Protocol:

SOAP là một giao thức giao tiếp có cấu trúc như XML. Nó được xem 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ức thay đổi các thông điệp dựa trên XML qua mạng máy tính, thông thườ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ức server 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ốt với cơ sở hạ tầng Internet.

Cấu trúc một thông điệp theo dạng SOAP

Thông điệp theo định dạng SOAP là một văn bản XML bình thường bao 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, khai bá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ể mang nhữ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.

- Phần tử khai báo nội dung chính trong thông điệp - body, chứa các thô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 ra trong qúa trình xử lý thông điệp.

            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 qua mạng. Kiểu này được khai thác bởi nhiều dịch vụ Web.

- Document: được biết đến như kiểu hướng thông điệp, nó cung cấp giao 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ất công sức hơn.

Cấu trúc dữ liệu: Cung cấp những định dạng và khái niệm cơ bản giố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ển trong Java, khi đó mã hóa SOAP là làm thế nào chuyển đổi từ cấu trúc dữ liệu Java sang SOAP XML và ngược lại, bởi vì định dạng cho Web Service chính là XML. Bất kỳ một môi trường thực thi SOAP nào cũng phả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ột dạng mã hóa thì sẽ có một ánh xạ tồn tại trong bộ đăng ký của môi trường thực thi SOAP đó.


2.1.5   An toàn cho dịch vụ Web:

Việc đảm bảo an toàn cho dịch vụ Web là một vấn đề quan trọng, đặc biệt đối với những dịch vụ liên quan đến trao đổi tiền tệ, thông tin từ thị trường chứng khoán hay dịch vụ bán hàng qua mạng (liên quan đến trả tiền bằng tài khoản và có yêu cầu thông tin cá nhân của người dùng).

Trước khi có WS-Security (bảo mật cho dịch vụ Web) thì ý nghĩa thông thường của an toàn dịch vụ Web là bảo mật kênh truyền dữ liệu. Hiện nay, nó được thực hiện cho những SOAP/HTTP dựa trên cơ chế truyền thông điệp bằng cách sử dụng giao thức HTTPS. Không chỉ là an toàn ở mức truyền thông điệp, HTTPS còn cung cấp sự an toàn tới toàn bộ gói dữ liệu HTTP.

     2.1.5.1 Khái niệm về WS-Security:

Là một chuẩn an toàn bao trùm cho SOAP, nó được dùng khi muốn xây dựng những dịch vụ Web toàn vẹn và tin cậy. Toàn vẹn có nghĩa là khi có một giao dịch hay khi truyền thông tin, hệ thống và thông tin sẽ không bị chặn, giao dịch sẽ không bị mất cũng như không thể có người lấy cắp được dữ liệu trên đường truyền. WS-security được thiết kế mang tính mở nhằm hướng tới những mô hình an toàn khác bao gồm PKI, Kerberos và SSL. Nó cũng đưa ra nhiều hỗ trợ cho các cơ chế an toàn khác, nhiều khuôn dạng chữ ký và công nghệ mã hóa, đảm bảo sự an toàn, toàn vẹn thông điệp và tính tin cậy của thông điệp. Tuy nhiên, WS–security cũng chưa thể đảm bảo được tất cả yêu cầu về bảo mật và an toàn thông tin, nó chỉ là một trong những lớp của giải pháp an toàn cho dịch vụ Web.

     2.1.5.2 Tính toàn vẹn :

Tính toàn vẹn tạo ra một chữ ký số hóa XML dựa trên nội dung của thông điệp. Nếu dữ liệu bị thay đổi bất hợp pháp, nó sẽ không còn thích hợp với chữ ký số hóa XML đó. Chữ ký này được tạo ra dựa trên khóa mà người gửi thông điệp tạo ra, do đó người nhận chỉ nhận thông điệp khi có chữ ký sử dụng và nội dung phù hợp. Ngược lại sẽ có một thông báo lỗi. Việc chứng thực được thực hiện giữa client và server là cách chứng thực rất cơ bản (sử dụng định danh người dùng và mật khẩu).

WS-security chỉ là một trong những lớp an toàn và bảo mật cho dịch vụ Web, vì vậy cần một mô hình an toàn chung lớn hơn để có thể bao quát được các khía cạnh khác. Các thành phần được thêm có thể là WS-Secure Conversation Describes,WS-Authentication Describes,WS-Policy Describes hay WS-Trust Describes. Chúng sẽ thực hiện việc đảm bảo an toàn hơn cho hệ thống khi trao đổi dữ liệu, mở và đóng các phiên làm việc cũng như quản lý dữ liệu cần chứng thực và chính sách chứng thực.
2.1.6 Xây dựng một dịch vụ Web:

Có 4 giai đoạn chính để xây dựng một dịch vụ Web là xây dựng, triển khai, tiến hành và quản lý, trong đó:

Ø  Giai đoạn xây dựng:  bao gồm phát triển và chạy thử ứng dụng dịch vụ Web, xây dựng các chức năng và định nghĩa dịch vụ. Có hai cách khác nhau để tiến hành trong giai đoạn này, đó là Red-path- solod và Blue-path-dashed. Với Red- path-solod, chúng ta sẽ xây dựng một dịch vụ Web mới từ trạng thái ban đầu hoặc với một dịch vụ đã có sẵn. Từ đó, xây dựng định nghĩa service (WSDL) với các đối tượng, hàm chức năng mà chúng ta mong muốn. Nếu theo cách Blue-path-dashed, dịch vụ Web sẽ được xây dựng từ đầu hoặc từ một định nghĩa dịch vụ WSDL. Sử dụng WSDL này, xây dựng hoặc sửa đổi lại mã để thực hiện các yêu cầu mong muốn trong dịch vụ Web.

Ø  Giai đoạn triển khai: công bố định nghĩa dịch vụ, xây dựng WSDL và triển khai mã thực thi của dịch vụ Web. Triển khai dịch vụ Web tới một ứng dụng phía server, sau đó sẽ công bố dịch vụ Web trên mạng Internet để các client có thể nhìn thấy. Sử dụng UDDI registry để công bố lên mạng.

Ø  Giai đoạn tiến hành: tìm kiếm và gọi thực thi dịch vụ Web bởi những người dùng muốn sử dụng dịch vụ.

Ø  Quản lý: Quản lý và quản trị dịch vụ, duy trì sự ổn định của dịch vụ, cập nhật thông tin mới, sửa lỗi khi nó xảy ra.

Để xây dựng một dịch vụ Web, chúng ta cần hiểu được những việc phải làm và nên bắt đầu từ đâu. Có 3 cách tiếp cận chủ yếu để xây dựng nên một dịch vụ Web, có thể từ một ứng dụng đã có (bottom-up); từ một định nghĩa dịch vụ, WSDL để phát sinh một ứng dụng mới (top-down) hoặc có thể từ một nhóm các dịch vụ Web hiện có, kết hợp lại với nhau để tạo nên các chức năng mới hoặc mở rộng thêm chức năng. Những hướng tiếp cận này dựa trên những gì mà chúng ta đã có, tùy thuộc vào yêu cầu của hệ thống, trong đó tối đa việc sử dụng lại các chức năng, các thành phần, môđun đã được xây dựng.

Qui trình xây dựng một dịch vụ Web bao gồm các bước sau:

Bước 1: Định nghĩa và xây dựng các chức năng, các dịch vụ mà dịch vụ sẽ cung cấp (sử dụng ngôn ngữ Java chẳng hạn).

Bước 2: Tạo WSDL cho dịch vụ

Bước 3: Xây dựng SOAP server

Bước 4: Đăng ký WSDL với UDDI registry để cho phép các client có thể tìm thấy và truy xuất.

Bước 5: Client nhận file WSDL và từ đó xây dựng SOAP client để có thể kết nối với SOAP server

Bước 6: Xây dựng ứng dụng phía client (chẳng hạn sử dụng Java) và sau đó gọi thực hiện dịch vụ thông qua việc kết nối tới SOAP server.

2.1.7  Tích hợp dịch vụ Web theo chuẩn :

Để xây dựng và bảo đảm sự thành công của web service và lợi ích mà web service mang lại.  Cùng với việc triển khai và tích hợp , cần phải giám sát để đảm bảo các hoạt động truy cập được tin cậy và an toàn.

Ø  Giám sát (monitoring): Cần hỗ trợ ở cả mức công cụ và cơ sở hạ tầng để giám sát các dịch vụ Web chạy như thế nào qua toàn bộ mạng, từ một chi nhánh con của một công ty trên mạng tới các chi nhánh khác trong công ty hay giao tiếp với doanh nghiệp khác. Kết hợp thông báo theo sự kiện với các lỗi trong luồng nghiệp vụ cho những người dùng không có kinh nghiệm giám sát dịch vụ Web và các dịch vụ kế thừa khác.

Ø  Xác định đường đi dữ liệu (Data routing): Việc thiết lập đường đi của dữ liệu giữa những thành phần của dịch vụ Web hướng tới tối đa hóa khả năng sử dụng lại. Nếu coi một thành phần (component) là một đối tượng thì mỗi thể hiện (instance) của nó sẽ không quan tâm đến các thể hiện khác của cùng thành phần đó. Những thể hiện của cùng một thành phần có thể dễ dàng được sử dụng lại trong các ứng dụng phân tán khác bởi vì chúng hoàn toàn độc lập và không phụ thuộc lẫn nhau.

Ø  Triển khai (Deployment): Triển khai các dịch vụ Web có khả năng nâng cấp, điều khiển và cấu hình các thành phần từ xa thông qua mạng phân tán.

Ø  Quản lý (Management): Có thể xây dựng theo kiến trúc P2P (Peer-to-Peer). Các hoạt động chính như thực thi các thành phần, định tuyến dữ liệu, xử lý luồng công việc và chuyển đổi dữ liệu được thực hiện tại các điểm cuối của mạng. Server sẽ tập trung giải quyết các hoạt động khác như quản lý, điều khiển sự kiện, chứng thực bảo mật và quản trị.

Ø  Cấu hình và quản lý phiên bản (Configuration and version management): Sử dụng các công cụ linh hoạt để quản lý các phiên bản khác nhau của dịch vụ Web, cho phép các phiên bản được nâng cấp và điều khiển từ một công cụ quản lý tập trung. Kết hợp giữa ứng dụng và mạng giúp các kỹ sư triển khai có thể điều khiển các thành phần chạy trên nền tảng hệ thống phần cứng cụ thể bên trong mạng.

Ø  Bảo mật (Security): các chuẩn mở như HTTP, XML, SOAP, WSDL và chuẩn bảo mật JSM được sử dụng rộng rãi khiến chúng trở thành lý tưởng để xây dựng các ứng dụng web. Đầu tiên, dịch vụ Web sử dụng những công nghệ này giống như firewall, SSL và các chứng nhận số. Dịch vụ Web thế hệ sau này sẽ kết hợp với những công nghệ có khả năng bảo mật cao hơn, giống như mã hóa XML và chứng nhận số XML.

2.2     Sơ lược về hệ điều hành Android :

      2.2.1 Giới thiệu chung về hiệu hành android

Android là một hệ điều hành di động dựa trên nền tảng linux phiên bản 2.6 dành cho cácdòng điện thoại SmartPhone. Đầu tiên được ra đời bởi công ty liên hợp Android, sau đó được Google mua lại và phát triển từ năm 2005 và trở thành một hệ điều hành di động mã nguồn mở, miễn phí, mạnh mẽ và được ưa chuộng cao trên thế giới.

Hệ điều hành android một hệ điều hành rất mạnh mạnh, có bảo mật cao, hỗ trợ được nhiều công nghệ tiên tiến như 3G, GPS, EDGE, Wifi.. tương thích với nhiều phần cứng, hỗ trợ nhiều loại bộ nhập dữ liệu như keyboard, touch và trackball. Android là hệ điều hành di động nên có khả năng kết nối cao với các mạng không dây. Hỗ trợ công nghệ OpenGL nên có khả năng chơi các phương tiện media, hoạt hình cũng như trình diễn các khả năng đồ họa khác cực tốt, là tiền đề để phát triển các ứng dụng có giao diện phức tạp chẳng hạn như là các trò chơi.

Android liên tục được phát triển, mỗi bản cập nhật từ google là mỗi lần android được tối ưu hóa để hoạt động tốt hơn, nhanh và ổn định hơn, hỗ trợ thêm công nghệ mới. Chẳng hạn như theo một đánh giá thì android phiên bản 2.2 hoạt động nhanh hơn bản 2.1 tới 450%. Hiện nay, phiên bản mới nhất 2.3 phát hành ngày 6/12/2010 và đang tiếp tục được cập nhật.

Năm 2008, hệ điều hành android đã chính thức mở toàn bộ mã nguồn, điều đó cho phép các hãng điện thoại có thể đem mã nguồn về tùy chỉnh, thiết kế lại sao cho phù hợp với mỗi mẫu mã điện thoại của họ và điều quan trọng nữa là hệ điều hành mở này hoàn toàn miễn phí, không phải trả tiền nên giúp họ tiết kiệm khá lớn chi phí phát triển hệ điều hành. Những điều đó là cực kỳ tốt không chỉ đối với các hãng sản xuất điện thoại nhỏ mà ngay cả với những hãng lớn như Samsung, HTC....

Với Google, vì android hoàn toàn miễn phí, Google không thu tiền từ những hãng sản xuất điện thoại, tuy không trực tiếp hưởng lợi từ android nhưng bù lại, những dịch vụ của hãng như Google Search, Google Maps,... nhờ có android mà có thể dễ dàng xâm nhập nhanh vào thị trường di động vì mỗi chiếc điện thoại được sản xuất ra đều được tích hợp hàng loạt dịch vụ của Google.

Từ đó hãng có thể kiếm bội, chủ yếu là từ các nguồn quảng cáo trên các dịch vụ đó. Với các nhà phát triển ứng dụng (developers), việc hệ điều hành android được sử dụng phổ biến đồng nghĩa với việc họ có thể thoải mái phát triển ứng dụng trên nền android với sự tin tưởng là ứng dụng đó sẻ có thể chạy được ngay trên nhiều dòng điện thoại của các hãng khác nhau. Họ ít phải quan tâm là đang phát triển cho điện thoại nào, phiên bản bao nhiêu vì nền tảng android là chung cho nhiều dòng máy, máy ảo Java đã chịu trách nhiệm thực thi những ứng dụng phù hợp với mỗi dòng điện thoại mà nó đang chạy. Tất cả các chương trình ứng dụng được viết bằng ngôn ngữ Java kết hợp với XML nên có khả năng khả chuyển cao.

      2.2.2 Kiến trúc hệ điều hành android

Hệ điều hành android có 4 tầng từ dưới lên trên là tầng hạt nhân Linux (Phiên bản 2.6), tầng Tầng Libraries & Android runtime , Tầng Application Framework và trên cùng là tầng Application.

 Hình 2. 4 Kiến trúc hệ điều hành Android

2.2.2.1 Tầng hạt nhân Linux (Linux Kernel layer)

Hệ điều hành android được phát trển dựa trên hạt nhân linux, cụ thể là hạt nhân linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng này. Tất cả mọi hoạt động của điện thoại muốn thi hành được thì đều được thực hiện ở mức cấp thấp ở lớp này bao gồm quản lý bộ nhớ (memory management), giao tiếp với phần cứng (driver model), thực hiện bảo mật (security), quản lý tiến trình (process).

Tầng này có các thành phần chủ yếu :

Display Driver : Điều khiển việc hiển thị lên màn hình cũng như thu nhận những điều khiển của người dùng lên màn hình (di chuyển, cảm ứng...).

                     Camera Driver : Điều kiển hoạt động của camera, nhận luồng dữ liệu từ camera trả về.

Bluetooth Driver : Điều khiển thiết bị phát và thu sóng Bluetooth.

                     USB driver : Quản lý hoạt động của các cổng giao tiếp USB.

Keypad driver : Điều khiển bàn phím.

   Wifi Driver : Chịu trách nhiệm về việc thu phát sóng wifi.

                     Audio Driver : điều khiển các bộ thu phát âm thanh, giải mã các tính hiệu dạng audio thành tín hiệu số và ngược lại.

Binder IPC Driver : Chịu trách nhiệm về việc kết nối và liên lạc với mạng vô tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo những chức năng truyền thông được thực hiện.

M-System Driver : Quản lý việc đọc ghi... lên các thiết bị nhớ như thẻ SD, flash.

Power Madagement : Giám sát việc tiêu thụ điện năng.

2.2.2.2 Tầng Library và android runtime :

Phần này có 2 thành phần là phần Library và Android Runtime :

Phần Libraries. Phần này có nhiều thư viện được viết bằng C/C++ để các phần mềm có thể sử dụng, các thư viện đó được tập hợp thành một số nhóm như :

- Thư viện hệ thống (System C library) : thư viện dựa trên chuẩn C, được sử dụng chỉ bởi hệ điều hành.

- Thư viện Media (Media Libraries) : Có nhiều codec để hỗ trợ việc phát và ghi các loại định dạng âm thanh, hình ảnh, video thông dụng.

- Thư viện web (LibWebCore) : Đây là thành phần để xem nội dung trên web, được sử dụng để xây dựng phần mềm duyệt web(Android Browser) cũng như để các ứng dụng khác có thể nhúng vào. Nó cực kỳ mạnh, hỗ trợ được nhiều công nghệ mạnh mẽ như HTML5, JavaScript, CSS, DOM, AJAX..

- Thư viện SQLite : Hệ cơ sở dữ liệu để các ứng dụng có thể sử dụng.

     Phần Android runtime : Phần này chứa các thư viện mà một chương trình viết bằng ngôn ngữ Java có thể hoạt động. Phần này có 2 bộ phận tương tự như mô hình chạy Java trên máy tính thường. Thứ nhất là các thư viện lõi (Core Library) , chứa các lớp như JAVA IO,Collections, File Access. Thứ hai là một máy ảo java (Dalvik Virtual Machine) .Mặc dù cũng được viết từ ngôn ngữ Java nhưng một ứng dụng Java của hệ điều hành android không được chạy bằng JRE của Sun (nay là Oracle) (JVM) mà là chạy bằng máy ảo Dalvik do Google phát triển.
2.2.2.3 Tầng Application Framework :

Tầng này xây dựng bộ công cụ - các phần tử ở mức cao để các lập trình viên có thể nhanh chóng xây dựng ứng dụng. Nó được viết bằng Java, có khả năng sử dụng chung để tiết kiệm tài nguyên.

Giới thiệu một số thành phần của phần này :

§  Activity Manager : Quản lý các chu kỳ sống của một ứng dụng cũng như cung cấp công cụ điều khiển các Activity.

§  Telephony Manager : Cung cấp công cụ để thực hiện việc liên lạc như gọi điện thoại

§  XMPP Service : Cung cấp công cụ để liên lạc trong thời gian thực

§  Location Manager : Cho phép xác định vị trí của điện thoại thoại dựa vào hệ thống định vị toàn cầu GPS và Google Maps.

§  Window Manager : Quản lý việc xây dựng và hiển thị các giao diện người dùng cũng như tổ chức quản lý các giao diện giữa các ứng dụng.

§  Notication Manager : Quản lý việc hiển thị các thông báo (như báo có tin nhắn, có e-mail mới..)

§  Resource Manager : Quản lý tài nguyên tĩnh của các ứng dụng bao gồm các file hình ảnh, âm thanh, layout, string. (Những thành phần không được viết bởi ngôn ngữ lập trình).

2.2.2.4 Tầng Application :

Đây là lớp ứng dụng giao tiếp với người dùng, bao gồm các ứng dụng như :

Các ứng dụng cơ bản, được cài đặt đi liền với hệ điều hành là gọi điện(phone), quản lý danh bạ(Contacts), duyệt web (Browser), nhắn tin (SMS), lịch làm việc (Calendar), đọc e-mail (Email-Client), bản đồ (Map), quay phim chụp ảnh (camera)...

Các ứng dụng được cài thêm như các phần mềm chứng khoán (Stock), các trò chơi (Game), từ điển...

Các chương trình có các đặc điểm là :

Viết bằng Java, phần mở rộng là apk

Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine được dựng lên để phục vụ cho nó. Nó có thể là một Active Program : Chương trình có giao diện với người sử dụng hoặc là một background : chương trình chạy nền hay là dịch vụ.

Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng một thời điểm, có thể có nhiều chương trình cùng chạy một lúc, tuy nhiên, với mỗi ứng dụng thì có duy nhất một thực thể (instance) được phép chạy mà thôi. Điều đó có tác dụng hạn chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn.

Các ứng dụng được gán số ID của người sử dụng nhằn phân định quyền hạn khi sử dụng tài nguyên, cấu hình phần cứng và hệ thống.

Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành di động khác, android cho phép một ứng dụng của bên thứ ba được phép chạy nền. Các ứng dụng đó chỉ có một hạn chế nhỏ đó là nó không được phép sử dung quá 5~10% công suất CPU, điều đó nhằm để tránh độc quyền trong việc sử dụng CPU.

Ứng dụng  không có điểm vào cố định, không có phương thức main để bắt đầu.

2.2.3 Môi trường lập trình trên hệ điều hành Android

   2.2.3.1 Giới thiệu :

Trong phần  này sẽ giới thiệu các công cụ lập trình cho Android (Android Development Tools). Chúng ta sẽ dần làm quen với Eclipse và Android Development Tool plug-in, thông qua Android SDK và công cụ của nó, chạy một ứng dụng Android trên Emulator(tạm dịch là trình giả lập giao diện của Android trên PC). Với những kĩ năng đó trong tay, chúng ta sẽ tìm hiểu các gói Java packages được cung cấp trong SDK giúp nâng cao khả năng lập trình trên Android.


 Hình 2. 5 Android SDK

2.2.3.2 ANDROID SDK:

Android SDK, viết tắt của Android Software Development Kit, có thể gọi là “công cụ phát triển phần mềm” mà cụ thể ở đây là phát triển ứng dụng cho Android OS. Đến đây thì chắc các chúng ta cũng đã hiểu đơn giản Google Adroid SDK là bộ công cụ được chính Google xây dựng và phát hành miễn phí đến giới Developer để họ dễ dàng xây dựng và phát triển các ứng dụng chạy được trên Android OS.

Android SDK có các đặc tính sau:

Được phát triển và cung cấp miễn phí

§  Truy cập đến phần cứng Wi-Fi.

§  GSM, EDGE và tính năng mạng 3G cho phép việc chuyển dữ liệu, gọi điện hay gửi tin SMS trong mạng di động.

§  Gói API toàn diện cho các dịch vụ nền tảng ví dụ như GPS.

§   Truy cập toàn bộ phần cứng điều khiển đa phương tiện như chơi nhạc, ghi âm hay sử dụng microphone và camera.

§   Chia sẻ dữ liệu trong kho dữ liệu.

§   Tích hợp trình duyệt dựa trên bộ WebKit (mã nguồn mở).

§   P2P hổ trợ sử dung Google Talk.

§   Hỗ trợ tốt đồ họa 3D nhờ sử dụng OpenGL ES.

Android SDK cần phải được cài đặt để xây dựng các ứng dụng Android. Android SDK bao gồm tài liệu tích hợp HTML_base lõi chính của Javadoc để thể hiện các gói và lớp trong Java.

2.2.3.3 Máy ảo Dalvik :

Một trong những thành phần quan trọng của Android là máy ảo Dalvik. Thay vì sử dụng máy ảo Java như trước kia Android sử dùng máy ảo của riêng nó được thiết kế để bảo đảm rằng đa ứng dụng có thể chạy mượt mà trên một thiết bị di động.

Máy ảo Dalvik sử dụng lõi Linux để xử lý các chức năng ở mức thấp bao gồm bảo mật, các tiến trình, các luồng và quản lý vùng nhớ. Nó cũng có thể viết bằng ứng dụng C/C++ để chạy trực tiếp lên lõi Linux bên dưới. Giữa phần cứng và các dịch vụ hệ thống được quản lý bởi máy ảo Dalvik, nó là một thành phần ở giữa. Bằng cách sử dụng máy ảo này để chạy ứng dụng, các nhà phát triển hoàn toàn không phải bận tâm gì về các phần cứng bên dưới. Khi máy ảo này chạy nó sẽ tạo ra tập tin có đuôi là .dex, tập tin này được SDK tạo ra bởi sự chuyển đổi từ các lớp biên dịch ngôn ngữ Java .

2.2.3.4 Các gói Java cần thiết :

§  java.lang —gói chứa các lớp lõi của Java

§  java.io —xuất nhập.

§  java.net —kết nối mạng.

§  java.util _ chứa các lớp tiện ích. Bao gồm: Log thường được dùng đề viết LogCat.

§  java.text —tiện ích sử lý văn bản.

§  java.math —các lớp toán học.

§  javax.net —các lớp mạng.

§  javax.security —Security-related classes.

§  javax.xml —các lớp liên quan đến DOM-based XML.

§  org.apache.* — các lớp liên quan đến HTTP-related.

§  org.xml —các lớp liên quan đến SAX-based XML .

Các gói dùng cho lập trình Android:

§  Android.app—Android application model access

§  Android.content—truy xuất dữ liệu trong Android

§  Android.net—bao gồm Uri class dùng cho việc truy xuất các nội dung khác

§  Android.graphics—đồ họa

§  Android.opengl—các lớp OpenGL

§  Android.os—truy cập ở mức độ hệ thông đến môi trường Android

§  Android.telephony—khả năng truy cập Telephony

§  Android.text—Text layout

§  Android.util—tập các tiện thao tác trên văn bản,bao gồm XML

§  Android.view—thành phần UI (giao diện người dùng)

§  Android.webkit—Browser functionality

§  Android.widget—thành phần UI mức độ cao hơn

Trong đó các gói gần như là lõi của mọi ứng dụng trên Android đó là Android.app, Android.view và Android.content.

2.2.3.5  Thành phần chính của Eclipse khi tạo ứng dụng trên Android :

§  Môi trường phát triển Rich Java bao gồm trình biên dịch, class autocompletion, và tích hợp Javadoc

§  Bẫy lỗi code

§  Quản lý và chạy Android Emulator profile

§  The Dalvik Debug Monitoring Service (DDMS)

§  Khung nhìn các tiến trình (Thread and heap views)

§  Quản lý Hệ thống tập tin giao diện (Emulator filesystem management)

§  Điều khiển dữ liệu và hội thoại (Data and voice network control)

§  Điều khiển giao diện (Emulator control)

§  Ghi lỗi hệ thống và ứng dụng (System and application logging)

2.2.3.6 Thành phần của một project Android :

§  Activity (Android.app.Activity): đây là lớp khởi tạo giao diện ứng dụng nội bộ trên Android tương tư như MIDlet trong J2ME.

§  Service (Android.app.Service): cung cấp các dịch vụ liên quan đến client/service. Một Service sẽ chạy ngầm bên dưới, sau đó các client (Activity) sẽ kết nối và truy xuất các hàm trên dịch thông qua Interface class.

§  Broadcast receiver (Android.content.BroadcastReceiver): đây là một ứng dụng chạy ngầm dùng để đọc và cập nhật thông tin trên UI, ví dụ như cập nhật sự thay đỗi giờ, pin...

§  Content Provider: cung cấp chức năng truy vấn dữ liệu giữa các ứng dụng của Android.

§  Intent: nền tảng để truyền tải các thông báo. Intent được sử dụng để gửi các thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc mà chúng ta mong muốn.

2.2.3.7 Chu kì sống của ứ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 xây dựng, khởi chạy 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 dùng.

§  Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống.

2.3.4 Các thành phần quan tâm khi lập trình trên HĐH Android :

  2.3.4.1 : Giới thiệu Intent :

Intent là cầu nối giữa các Activity (ứng dụng Android thường bao gồm nhiều Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc khác nhau). Intent chính là người đưa thư, giúp chúng ta triệu gọi cũng như truyền các dữ liệu cần thiết để thực hiện một Activity từ một Activity khác 

 Hình 2. 6 Mô hình hoạt động của Intent Object


Các thành phần của Intent :

Thực ra Intent là một cấu trúc dữ liệu được mô tả trong Android.content.Intent.


Hình 2. 7 Các thành phần của Intent


Các Action định nghĩa sẵn:

 Hình 2. 8 Các Action đã định nghĩa


Tự định nghĩa action:

Về nguyên tắc chúng ta có thể đặt tên action của một intent là bất cứ thứ gì theo chuẩn đặt tên thông thường, hay thậm chí dùng luôn hằng action đã định nghĩa sẵn như ACTION_VIEW (hay “Android.intent.action.VIEW”). Cái tên VIEW thực chất chỉ là một tên gợi tả, chúng ta có thể dùng nó với mục đích thực hiện một activity để … gửi mail! Tuy nhiên điều đó rõ ràng là rất “ngớ ngẩn”. Thay vào đó ta hãy dùng ACTION_SEND hay ACTION_SENDTO.

Việc đặt tên action cho intent đúng tên gợi tả còn có một ý nghĩa khác đó là app của chúng ta có thể được triệu gọi từ một app khác. Ví dụ chúng ta viết một app có activity đáp ứng intent ACTION_SEND và để chia sẻ một bức ảnh lên trang web của chúng ta (giống như ta làm với Facebook, Flickr etc.) Khi đó có thể app của chúng ta sẽ là một lựa chọn chia sẻ ảnh của người dùng điện thoại.

Sử dụng Intents khởi động cho Activities:

Phổ biến nhất trong Intents là việc liên kết dữ liệu giữa các thành phần ứng dụng, Intents được dùng để bắt đầu, dừng lại và chuyển tiếp giữa các Activities trong ứng dụng.

Để mở một ứng dụng khác trong một ứng dụng có sẵn thì chúng ta gọi startActivity như sau: startActivity(myIntent);

Để theo dõi thông tin phản hồi từ phương thức mở ta sử dụng phương thức : startActivityForResult(Intent)

 Hình 2. 9 Các phương thức startActivity của 1 Intent


Intent không tường minh thực thi Activity:

Trong trường hợp này intent không chỉ định một lớp cụ thể mà thay vào đó dùng các dữ liệu khác (action, data, type, etc.) và để hệ thống tự quyết định xem lớp nào (app nào) sẽ thích hợp để đáp ứng intent đó.

Thông tin action và category của activity trong một app đáp ứng intent đó phải được khai báo trong Manifest của app (AndroidManifest.xml) dưới dạng Intent-filter (tất nhiên nếu chúng ta muốn gọi một built-in action thì ta không cần quan tâm đến vấn đề này).

Ví dụ: chúng ta muốn cho phép người dùng thực hiện cuộc gọi từ một ứng dụng, hơn là thực hiện quay số mới, chúng ta có thể sử dụng một ý định ngầm yêu cầu hành động ("quay số") được thực hiện trên một điện thoại như trong đoạn mã dưới đây:

if (somethingWeird && itDontLookGood)

{

Intent intent = newIntent(Intent.ACTION_DIAL,Uri.parse(“tel:555-2368”));

startActivity(intent);

}                                                                                                                                            


Intent tường minh thực thi Activity :

Như đã trình bày ở phần trên, intent có thể dùng thuộc tính phụ component để chỉ định đích danh tên lớp sẽ thực thi Activity. Để thực hiện điều này, lớp Intent cung cấp các hàm đó là setComponent(ComponentName) và setClass(Context, Class) và setClassName(Context, String) setClassName(String, String).

Chỉ được dùng để gọi các Activities trong cùng một app

Intent intent = new Intent(); intent.setClassName("ten_package", "ten_lop_ben_trong_package");

startActivity(intent);



2.3.4.2 Giới thiệu Adapter :

Adapter là cầu nối để liên kết dữ liệu với giao diện người dùng.

Một số Adapter cơ bản :

ArrayAdapter: là một lớp chung để gắn các Adapter Views vào một mảng đối tượng, theo mặc định thì ArrayAdapter liên kết cá giá trị toString của từng đối tượng ra TextView trong layout, chúng ta có thể thay thế TextView bằng các điều khiển khác phức tạp hơn bằng cách sử dụng kỹ thuật Overriding phương thức getView()

SimpleCursorAdapter : dùng để liên kết các View với con trỏ để trả về câu truy vấn cho Content Provider, nó được định nghĩa trong file XML layout và liên kết các giá trị ràng buộc bên trong mỗi cột kết quả với View trong layout.

Sử dụng Adapter hiển thị dữ liệu:

Để áp dụng một Adapter đến một class AdapterView ta chỉ cần gọi phương thức setAdapter của View đưa vào trong tập Adapter được minh họa trong đoạn code sau:

ArrayList<String> myStringArray = new ArrayList<String>();

ArrayAdapter<String> myAdapterInstance;

int layoutID = Android.R.layout.simple_list_item_1;

myAdapterInstance = new ArrayAdapter<String> (this, layotID,myStringArray);

myListView.setAdapter(myAdapterInstance);

SimpleCursorAdapter cho phép chúng ta load dữ liệu từ Cursor đến List View. SimpleCursorAdapter được tạo ra bằng cách truyền vào các tham số bối cảnh(context) hiện hành, một layout, một Cursor và hai giá trị: tên các cột và một mảng các giá trị chứa dữ liệu cột để hiển thị:

String uriString = “content://contacts/people/”;

Cursor myCursor = managedQuery(Uri.parse(uriString), null, null, null, null);

String[] fromColumns = new String[] {People.NUMBER, People.NAME};

int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView};

SimpleCursorAdapter myAdapter;

myAdapter = new SimpleCursorAdapter(this,R.layout.simplecursorlayout,

myCursor, fromColumns,toLayoutDs);

myListView.setAdapter(myAdapter);

2.3.4.3 Lưu trữ dữ liệu trong Android :

Các kỹ thuật duy trì dữ liệu trong Android nhanh chóng, gọn nhẹ, hiệu quả và mạnh mẽ:

§  Shared Preferences: Khi muốn lưu trữ UI state ,user preferences hay application setting, chúng ta muốn có một cơ chế gọn nhẹ để lưu trữ một tập hợp các giá trị được biết đến, Shared Preferences cho phép chúng ta lưu trữ nhóm của key/value của dữ liệu gốc.

§  Files: Android cho phép tạo và tải các tập tin trên thiết bị di động.

§  SQLite Databases: quản lý cấu trúc dữ liệu là cách tốt nhất . Android cung cấp thư viện quan hệ cơ sở dữ liệu SQLite, mỗi ứng dụng có thể tạo ra một cơ sở dữ liệu của mình để nó kiểm soát hoàn toàn trên đó.

§  Content Providers: Thay vì theo cơ chế lưu trữ riêng ,Content Providers cung cấp nội dung cho phép đưa ra một giao diện để sử dụng và chia sẻ dữ liệu cá nhân. Chúng ta có thể truy cập Content Providers để sử dụng hệ thống được phép.

2.3.5 Làm việc với Maps, Geocoding, Location Based Services :

2.3.5.1 : Sử dụng dịch vụ định vị :

Location Based Services (LBS) là một thuật ngữ chung dùng để mô tả sự khác nhau về kỹ thuật, và dùng để tìm vị trí thiết bị hiện hành. Hai yếu tố chính của LBS là:

§  LocationMangager: quản lý kết nối với dịch vụ định vị trong Android LocationProvider: là một lớp trừu tượng cơ bản của các công nghệ tìm kiếm vị trí khác nhau để xác định vị trí thiết bị.

Sử dụng Location Manager ta có thể :

§  Xác định vị trí.

§  Theo dõi sự chuyển động.

§  Đặt trạng thái báo động cho việc phát hiện một sự chuyển động vào và ra khỏi một khu vực xác định.

2.3.5.2 Kiểm tra vị trí trên Emulator :

Dùng Location Controls có sẵn từ DDMS trong Eclipse như hình dưới đây để thay đổi trực tiếp vị trí trong thử nghiệm GPS_PROVIDER.
 Hình 2. 10 Lấy GPS Location


Trong hình trên có các tab Manual, KML và GPX

Sử dung tab Manual chúng ta có thể xác định vĩ độ/ kinh độ.

Sử dụng tab KML và GPX cho phép chúng ta tải các tập tin KML (Keyhole Markup Language) và GPX (GPS Exchange Format) tương ứng.

Lưu ý vị trí GPS sẽ trả về từ getLastKnownLocation sẽ không thay đổi trừ khi có ít nhất một ứng dụng yêu cầu cập nhật vị trí.

Chọn một Location Provider:

Tùy thuộc vào thiết bị mà có những kỹ thuật riêng, Android có thể dùng để xác định vị trí hiện tại, mỗi kỹ thuật, mỗi Location Provider sẽ cung cấp những khả năng khác nhau như xác định độ cao, tốc độ, sự chính xác hoặc các thông tin liên quan.

Để có được đối tượng LocationProvider ta gọi getProvider và truyền vào tên Provider. Ví dụ dưới đây thì Provider là GPS_PROVIDER

String providerName = LocationManager.GPS_PROVIDER;

LocationProvider gpsProvider;

gpsProvider = locationManager.getProvider(providerName);


Tìm một Providers có sẵn

Lớp LocationManager bao gồm các chuỗi hằng số và trả về tên của nhà cung cấp cho hai Location Provider phổ biến nhất.

LocationManager.GPS_PROVIDER

LocationManager.NETWORK_PROVIDER

Để có danh sách tất cả tên của nhà cung cấp trên thiết bị ta gọi getProvider, sử dụng Boolean để biết nếu chúng ta muốn tất cả, hoặc chỉ lấy một Provider đầu tiên.

boolean enabledOnly = true;

List<String> providers = locationManager.getProviders(enabledOnly);


Tìm kiếm một Provider theo tiêu chí :

Sử dụng lớp Criteria để yêu cầu nhà cung cấp xử lý chính xác những số liệu có sẵn như: vĩ độ và kinh độ, tốc độ, độ cao, chi phí và yêu về cầu năng lương điện.

Criteria criteria = new Criteria();

criteria.setAccuracy(Criteria.ACCURACY_COARSE);

criteria.setPowerRequirement(Criteria.POWER_LOW);

criteria.setAltitudeRequired(false);

criteria.setBearingRequired(false);

criteria.setSpeedRequired(false);

criteria.setCostAllowed(true);

Chúng ta có thể dùng getBestProvider là sự kết hợp tốt nhất trả để về cho Location Provider hoặc dùng getProvider, sử dụng getBestProvider nhà cung cấp sẽ trả lại các tiêu chí tốt nhất, sử dụng Boolean cho phép hạn chế những kết quả từ nhà cung cấp đang được hoạt động.

String bestProvider = locationManager.getBestProvider(criteria, true);

List<String> matchingProviders = locationManager.getProviders(criteria,false);


Tìm một địa chỉ (Finding Your Location):

Mục đích của dịch vụ định vị là tìm ra vị trí vật lý của thiết bị.

Để truy cập vào Location Manager thực hiện các yêu cầu LOCATION_SERVICES ta sử dụng phương thức getSystemService như sau:

String serviceString = Context.LOCATION_SERVICE;

LocationManager locationManager;

locationManager = (LocationManager)getSystemService(serviceString);

Trước khi sử dụng Location Manager thì cần thêm một hoăc nhiều thẻ uses-permission trong file mainfest để truy cập vào các phần cứng của LBS trong đó bao gồm cả fine và coarse như sau:

<uses-permission Android:name=”Android.permission.ACCESS_FINE_LOCATION”/>

<uses-permission Android:name=”Android.permission.ACCESS_COARSE_LOCATION”/>


Chúng ta có thể tìm thấy vị trí bằng cách xác định một Location Provider sử dụng phương thức getKnowLocation và đưa vào tên của Location Provider.

Ví dụ:

String provider = LocationManager.GPS_PROVIDER;

Location location = locationManager.getLastKnownLocation(provider);


Theo dõi sử di chuyển (Tracking Movement):

Sử dụng phương thức requestLocationUpdate để cập nhật bất kỳ một vị trí, khi vị trí hiện tại thay đổi chúng ta sử dụng một LocationListener. LocationListener thực hiện và đăng ký để nhận thông tin. LocationListener rất linh hoạt và nhiều tính năng cho phép chọn nhiều loại sự kiện về vị trí dựa trên đặc tính khác nhau.

Phương thức requestLocationUpdate chấp nhận một Location Provider hoặc Criteria để xác định nhà cung cấp được sử dụng.

Đoạn code sau sẽ thể hiện một yêu cầu cập nhật thường xuyên dựa trên mức tối thiểu về thời gian và khoảng cách.

String provider = LocationManager.GPS_PROVIDER;

int t = 5000; // milliseconds

int distance = 5; // meters

LocationListener myLocationListener = new LocationListener() {

public void onLocationChanged(Location location) {

// Update application based on new location.

}

public void onProviderDisabled(String provider){

// Update application if provider disabled.

}

public void onProviderEnabled(String provider){

// Update application if provider enabled.

}

public void onStatusChanged(String provider, int status,Bundle extras){

// Update application if provider hardware status changed.

}

};

locationManager.requestLocationUpdates(provider, t, distance,

myLocationListener); 

2.3.5.3 Sử dụng Goecoder:

Geocoding cho phép chuyển giữa các địa chỉ và các mô tả khác vào kinh độ / vĩ độ của bản đồ tọa độ. Điều này cung cấp cho chúng ta một khung cảnh giúp dễ nhận biết các vị trí và tọa độ được sử dụng trong các dịch vụ dựa trên vị trí và hoạt động dựa trên bản đồ. Để thực hiện việc này lớp Geocoder thực hiện một cuộc gọi mạng (tự động) cho một dịch vụ web.

Lớp Geocoder cung cấp hai chức năng truy cập mã địa lý:

Forward Geocoding: tìm vĩ độ và kinh độ của đia chỉ.

Reverse Geocoding: chuyển địa chỉ ra vĩ độ, kinh độ.

Cách tạo một Geocoder:

Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());

Cả hai chức năng mã hoá địa lý trả về một danh sách các đối tượng Address. Mỗi danh sách có thể chứa nhiều kết quả.

2.3.5.4 Reverse Geocoding

Trả về địa chỉ khi được cung cấp kinh độ, vĩ độ.

Để thực hiện việc tra cứu chuyển đổi chúng ta đưa vào một vĩ độ và kinh độ đến Geocoder và phương thức getFromLocation sẽ. Reverse Geocoding sẽ trả về một danh sách địa chỉ phù hợp, nếu Geocoder không giải quyết được địa chỉ này với các quy định thì nó sẽ trả về null.

Location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

double latitude = location.getLatitude();

double longitude = location.getLongitude();

Geocoder gc = new Geocoder(this, Locale.getDefault());

List<Address> addresses = null;

try {

addresses = gc.getFromLocation(latitude, longitude, 10);

}

catch (IOException e)

{} 

2.3.5.5 Forward Geocoding

Để tra cứu Forward Geocoding, gọi getFromLocationName trên trường Geocoder. Đưa vị trí tạo độ mà chúng ta muốn và số lượng tối đa của các kết quả trả lại, chúng ta sẽ nhận được các địa chỉ thích hợp, như thể hiện trong đoạn code dưới đây:

List <Address>result = geocoder.getFromLocationName(aStreetAddress, maxResults);

Locale cung cấp bối cảnh địa lý để giải thích các yêu cầu tìm kiếm của chúng ta như tên của một vị trí có thể tồn tại trong nhiều khu vực. Nếu có thể thì ta xem xét lựa chọn một Locale ở khu vực để tránh sự nhập nhằng tên, như thể hiện trong đoạn code sau:

Geocoder fwdGeocoder = new Geocoder(this, Locale.US);

String streetAddress = “160 Riverside Drive, New York, New York”; List<Address> locations = null;

try {

locations = fwdGeocoder.getFromLocationName(streetAddress, 10);

}

catch (IOException e){}

//để có nhiều địa chỉ, sử dụng getFromLocationName List<Address> locations = null;

try {

locations = fwdGeocoder.getFromLocationName(streetAddress, 10,n, e, s, w);

} catch (IOException e) {}

2.3.6 Dùng MapView

MapView là một control thu nhỏ của nhiều Google Maps API trong hình thức View cho các ứng dụng Android. MapView hiển thị giao diện của bản đồ, nó có được sử dụng qua mạng như bản đồ là sự di chuyển và thu nhỏ, giống như phiên bản web của Google Maps.

Nhiều khái niệm tiêu chuẩn Google Map API cũng có mặt trong Android thông qua các MapView, ví dụ MapView hỗ trợ chế độ vệ tinh, chế độ xem đường phố, và chế độ giao thông ta khai báo như sau:

mapView.setSatellite(true);

mapView.setStreetView(true);

mapView.setTraffic(true);

Chúng ta cũng có thể truy cập vào các Map View để tìm ra kinh độ hiện hành và độ phóng đại, cũng như các điểm trung tâm và hiện đang nhìn thấy và khoảng vĩ độ (ở dạng thập phân).

GeoPoint center = mapView.getMapCenter();

int latSpan = mapView.getLatitudeSpan();

int longSpan = mapView.getLongitudeSpan();

Chúng ta cũng có thể hiển thị bản đồ điều khiển zoom một cách tùy ý.

View zoomControls = mapView.getZoomControls();

mapView.addView(zoomControls, lp);

mapView.displayZoomControls(true);

MapView là một ViewGroup hãy khai báo nó trong XML.

<com.google.Android.maps.MapView

Android:id="@+id/map_view"

Android:layout_width="fill_parent"

Android:layout_height="fill_parent"

Android:enabled="true"

Android:clickable="true"

Android:apiKey="05lSygx-ttd-J5GXfsIB-dlpNtggca4I4DMyVqQ" />

Chú ý: Android:apiKey ở đây chúng ta phải đăng ký qua Google, nó hoàn toàn miễn phí.

Dùng MapActivity :

MapActivity là một lớp cơ bản. Lớp MapActivity xử lý vòng đời ứng dụng và quản lý nền tảng cần thiết cho việc hiển thị bản đồ, chúng ta chỉ có thể sử dụng một MapView trong MapActivity.

Để sử dụng bản đồ trong ứng dụng chúng ta cần phải tạo một Activity mới kế thừa từ MapActivity và cần thêm vào trong file XML, trong thẻ <Aplication>:

<uses-library Android:name=”com.google.Android.maps”/>

MapView điều khiển chỉ có thể được sử dụng trong một Activity mở rộng MapActivity. Overriding phương thức onCreate đặt ra các màn hình bao gồm một MapView, và ghi đè lên isRouteDisplayed để trả về true nếu Activity sẽ được hiển thị thông tin định tuyến.

Đoạn code sau sẽ trình bày cách khởi tạo mới lớp bản đồ cơ sở MyMapActivity :

import com.google.Android.maps.MapActivity;

import com.google.Android.maps.MapController;

import com.google.Android.maps.MapView;

import Android.os.Bundle;

public class MyMapActivity extends MapActivity {

private MapView mapView;

private MapController mapController;

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.map_layout);

mapView = (MapView)findViewById(R.id.map_view);

}

@Override

protected boolean isRouteDisplayed() {

// IMPORTANT: This method must return true if your Activity

// is displaying driving directions. Otherwise return false.

return false;

}

}


Sử dụng Overlay :

Overlay là một cách để thêm các chú thích và xử lý nhấn vào MapView.

Để thêm một lớp mới Overlay chúng ta tạo một lớp mới kế thừa từ lớp Overlay, ghi đè các phương thức vẽ để vẽ các chú thích mà chúng ta muốn thêm và ghi đè lên onTap để phản lại cho người dùng khi click chuột như đoạn code sau:

import Android.graphics.Canvas;

import com.google.Android.maps.MapView;

import com.google.Android.maps.Overlay;

public class MyOverlay extends Overlay {

@Override

public void draw(Canvas canvas, MapView mapView, boolean shadow) {

if (shadow == false) {

[ ... vẽ trên lớp trên cùng của layout ... ]

}

else {

[ ... vẽ tên lớp dưới, bóng mờ ... ]

}

}

@Override

public boolean onTap(GeoPoint point, MapView mapView) {

//trả về true nếu tích vào một điểm màn hình do Overlay quản lý

return false;

}

}


Dùng MapController

Dùng MapContrller để quay và phóng to một MapView, dùng getController như đoạn code sau:

MapController mapController = myMapView.getController();

Bản đồ các địa điểm trong các lớp bản đồ Android được đại diện bởi đối tượng GeoPoint, trong đó vĩ độ và kinh độ đo bằng microdegrees.

Trước khi chúng ta có thể sử dụng các giá trị vĩ độ và kinh độ lưu trữ trong các đối tượng Location được sử dụng bởi các location-based services, chúng ta cần phải chuyển đổi chúng sang microdegrees và lưu trữ chúng như GeoPoints, như trong đoạn mã sau đây:

Double lat = 37.422006*1E6;

Double lng = -122.084095*1E6;

GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());

Khi muốn biết điểm và phóng to hình trong MapView ta sử dụng phương thức setCenter và setZoom có sẵn trong MapCotroller của MapView như đoạn code dưới đây:

mapController.setCenter(point);

mapController.setZoom(1);

Phương thức setCenter sẽ nhảy tới một vị trí mới ta sử dụng như sau: mapController.animateTo(point)


Lấy debug.keystore  :

Vào Windows > Prefs > Android > Build để lấy đường dẫn như bên dưới :

Hình 2. 11 Lấy Keystore

Lấy key:

Vào cmd gõ:

keytool -list -alias Androiddebugkey -keystore <đường dẫn file keystore> -storepass Android -keypass Android



Vào link http://code.google.com/Android/maps-api-signup.html dán MD5 fingerprint code vào và click Generate API key , site sẽ tự sinh cho chúng ta 1 key.

Trên đây là những phần chính, khi chúng ta làm việc với Android, liên quan đến đồ án này. Các thành phần trên Android rất nhiều, nhóm chỉ trích gọn những thành phần liên quan đến đồ án của nhóm.

2.4 Giới thiệu về JSON : có nghĩa là JavaScript Object Notation .

JSON sử dụng cú pháp JavaScript để mô tả đối tượng dữ liệu, nhưng JSON là ngôn ngữ và nền tảng độc lập. Trình phân tích cú pháp(parsers) JSON và các thư viện JSON tồn tại cho nhiều ngôn ngữ lập trình khác nhau.

§  JSON là cú pháp để lưu trữ và trao đổi thông tin văn bản. Cũng giống như XML.

§  JSON là nhỏ hơn so với XML, và nhanh hơn và dễ dàng hơn để phân tích (parse)

§  JSON là viết tắt của JavaScript Object Notation

§  JSON là định dạng trao đổi dữ liệu văn bản dung lượng nhẹ

§  JSON là ngôn ngữ độc lập *

§  JSON được "tự mô tả" và dễ hiểu

Giống nhau và khác nhau so với XML :

Ø  Giống nhau :

§  JSON là văn bản trơn (không có định dạng(màu sắc, cỡ chữ,…))

§  JSON là "tự mô tả" (người dùng có thể hiểu được)

§  JSON là phân cấp (có cấu trúc cây)

§  JSON có thể được phân tích cú pháp (parse) bởi JavaScript

§  Dữ liệu JSON có thể được truyền đi bằng AJAX

Ø  Khác nhau :

§  Không có thẻ kết thúc

§  Ngắn hơn

§  Nhanh hơn để đọc và ghi

§  Có thể được phân tích cú pháp bằng hàm dựng sẵn trong JavaScript là eval ()

§  Sử dụng mảng (Array)

§  Không dùng các từ reserve

Trong các ứng dụng AJAX, JSON là nhanh hơn và dễ dùng hơn so với XML:

Ø  Sử dụng XML

§  Lấy một tài liệu XML

§  Sử dụng XML DOM để lặp qua tài liệu

§  Trích xuất các giá trị và lưu trữ trong các biến

Ø  Sử dụng JSON

§  Lấy một chuỗi JSON

§  Dùng hàm eval () chuyển chuỗi JSON thành đối tượng JavaScript

Cú pháp JSON : Cú pháp JSON là một tập hợp con của cú pháp JavaScript

Các quy luật cú pháp JSON : Cú pháp JSON là một tập hợp con của cú pháp đối tượng JavaScript.

§  Dữ liệu là các cặp tên/giá trị (name/values)

§  Dữ liệu được phân cách bằng dấu phẩy

§  Đối tượng nằm trong cặp ngoặc nhọn ‘{}’

§  Dấu ngoặc vuông giữ mảng ‘[]’

Cặp Tên/Giá trị của JSON :

Một cặp Tên/Giá trị chứa tên 1 trường (trong dấu nháy đôi “”), theo sau là dấu phẩy, cuối cùng là giá trị:

"firstName" : "John"

Các giá trị của JSON

§  1 số (nguyên (integer) hay số thực (floating point))

§  1 chuỗi (nằm trong dấu nháy đôi “”)

§  1 số luận lý (true or false)

§  1 mảng (nằm trong dấu ngoặc vuông [])

§  1 đối tượng (nằm trong dấu ngoặc nhọn {})

§  Kiểu null

Các đối tượng JSON : Các đối tượng được đặt trong dấu ngoặc nhọn {}

Đối tượng có thể chứa nhiều cặp Tên/Giá trị (Name/Values):

{ "firstName":"John" , "lastName":"Doe" }

Mảng của JSON : Mảng JSON nằm trong dấu ngoặc vuông [].

 Mảng có thể chứa nhiều đối tượng:

{

"employees": [

                        { "firstName":"John" , "lastName":"Doe" },

                        { "firstName":"Anna" , "lastName":"Smith" },

                        { "firstName":"Peter" , "lastName":"Jones" }

            ]

}

JSON sử dụng cú pháp JavaScript

Bởi vì JSON sử dụng cú pháp JavaScript, nên không cần 1 chương trình trung gian làm việc giữ JSON và JavaScript.

Với JavaScript bạn có thể tạo 1 mảng các đối tượng và gán dữ liệu như sau:

var employees = [

            { "firstName":"John" , "lastName":"Doe" },

            { "firstName":"Anna" , "lastName":"Smith" },

            { "firstName":"Peter" , "lastName": "Jones" }

];

Truy cập mạng : lấy giá trị đầu tiên

employees[0].lastName;

Kết quả:

Doe

Dữ liệu mới được gán như sau:

employees[0].lastName = "Jonatan";

Trích xuất thông tin từ JSON : Trong Android hỗ trợ 2 kỹ thuật trích xuất thông tin và thấy thông tin về từ webservice lưu theo kiểu JSON.

-         Cách 1 : Sử dụng đối tượng JSONObject  :

Thiết lập 1 kiểu key/value. Key phải là duy nhất và không được null. Value của JSONObject, JSONArray phải là 1 trong các kiểu cơ bản sau : String, Booleans, Integers, Longs, Doubles, NULL.

-         Cách 2 : Sử dụng đối tượng GSON.

Được cung cấp và sử dụng khi Android Application làm việc với file JSON.

2.5  Giới thiệu về GSON:

GSON là 1 thư viện được viết bằng ngôn ngữ Java được sử dụng để chuyển đổi  đối tượng Java vào trong file JSON và chuyển đổi chuối JSON thành đối tượng Java. JSON là mã nguồn mở được cung cấp tại địa chỉ : http://code.google.com/p/google-gson

 Mục đính của GSON :

Cung cấp dễ dàng sử dụng các phương thức như  toString() và các phương thức chuyển đổi giữa đối trượng trong Java và JSON và ngược lại.

Tạo đối tượng trong GSON : Có thể sử dụng câu lệnh sau :

Gson  gson = new Gson();

Và dùng đối tượng gson vừa tạo ra gọi các phương thức của nó.

Ví dụ đơn giản  như sau :

(Serialization)

Gson gson = new Gson();

gson.toJson(1);            ==> prints 1

gson.toJson("abcd");       ==> prints "abcd"

gson.toJson(new Long(10)); ==> prints 10

int[] values = { 1 };

gson.toJson(values);       ==> prints [1]

(Deserialization)

int one = gson.fromJson("1", int.class);

Integer one = gson.fromJson("1", Integer.class);

Long one = gson.fromJson("1", Long.class);

Boolean false = gson.fromJson("false", Boolean.class);

String str = gson.fromJson("\"abc\"", String.class);

String anotherStr = gson.fromJson("[\"abc\"]", String.class);

Lấy giá trị của lớp.

class BagOfPrimitives {

                    private int value1 = 1;

                   private String value2 = "abc";

                   private transient int value3 = 3;

                  BagOfPrimitives() {

                      // no-args constructor

              }}

(Serialization)

BagOfPrimitives obj = new BagOfPrimitives();

Gson gson = new Gson();

String json = gson.toJson(obj);

==> json is {"value1":1,"value2":"abc"}


Chương 3 : GOOGLE PLACES API

3.1 Giới thiệu về Google Places API :

Google Places API là dịch vụ web cung cấp cho người dùng trả về thông tin các địa điểm được tìm kiếm. Định nghĩa bên trong API này là cơ sở, vị trí địa lý, các địa điểm nổi bật bằng cách sử dụng các yêu cầu thông qua HTTP. Các địa điểm này được xác định bằng cách thông qua tọa động vĩ độ/kinh độ(latitude/longitude).

4 chức năng chính của Google Places API :

§  Place Searches : trả về danh sách các địa điểm gần với vị trí của người dùng đang tìm kiếm.

§  Place Details request : trả về chi tiết các thông tin về 1 địa điểm đang tìm kiếm.

§  Place Check-ins cho phép các báo cáo rằng người dùng đã tìm kiếm về địa điểm này. Mục đích nhằm đánh giá phổ biến những nơi hay được tìm kiếm.

§  Place Reports cho phéo thêm mới 1 địa điểm đến Place service. Và xóa 1 địa điểm mà bạn đã thêm vào.

3.2 Chứng thực :

Được sử dụng với mục đích chứng thực cho Google biết rằng ứng dụng đang sử dụng Place service. Sau khi chứng thực, google sẽ cung cấp 1 key sẽ được sử dụng trong chương trình.

Cách đăng kí lấy API Key :

§  Vào đường link sau :  https://code.google.com/apis/console  và đăng nhập bằng gmail.

§  Google sẽ tạo ra cho bạn 1 API Project trong lần đăng nhập đầu tiên.

§  Sau đó bạn click vào Status để bật Place Service lên.

§  Cuối cùng click vào API access tab bạn sẽ nhận được key do Google cung cấp.

        
Hình 3. 1 API key đã đăng ký với Google

Các hạn chế và những yêu cầu :

Google hạn chế người dùng về mức độ truy vấn như sau :

Các ứng dụng sử dụng API key chỉ được truy vấn tối đa 1000 request trên 24 giờ.

Với những ứng dụng mà người phát triển đã để lại danh tính thì được phép truy vấn tối đa 100 000 request trên 24 giờ bằng cách xác định thông qua 1 thẻ tin dụng. Tuy tin người phát triển không phải trả phí cho việc này.

Nếu muốn hiển thị dữ liệu của Places API trên bản đồ thì bản đồ đó phải do Google cung cấp sẵn và tính chính xác khi tìm kiếm trong 1 khu vực nhỏ không cao.

3.3 Place Searches :

Place API cung cấp 2 kiểu tìm kiếm :

§  Place Searches : trả về danh sách các địa điểm gần với vị trí của người dùng.

§ Place Details : trả về thông tin chi tiết hơn về 1 địa điểm đang tìm kiếm.
3.3.1 Yêu cầu để tìm kiếm :

Để tìm kiếm 1 địa điểm nào đó , Place Search yêu cầu HTTP URL theo mẫu sau :

https://maps.googleapis.com/maps/api/place/search/output?parameters

Với :  - output : là kiểu trả về của truy vấn. có thể là file json hoặc xml theo yêu cầu của người phát triển.

-         Parameters : Các tham số được cung cấp bởi google giúp cho thông tin tìm kiếm được chính xác hơn

-         Các Parameters được cung cấp :

§  key : bắt buộc có. Đây là API Key đã đăng ký ở trên.

§  location : bắt buộc có. Định nghĩa bằng 1 cắp latitude/longitude.

§  radius: bắt buộc có. Bán kính tìm kiếm.

§  sensor : bắt buộc có. Đòi hỏi yêu cầu địa điểm từ 1 thiết bị GPS.

§  keyword : (tùy chọn) Từ khóa xuất hiện trong kết quả tìm kiếm.

§  language(tùy chọn) Lựa chọn ngôn ngữ hỗ trợ tìm kiếm.

§  name (tùy chọn) Tên xuất hiện trong kết quả tìm kiếm.

§  types : kiểu tìm kiếm được hỗ trợ bởi Google Place API.

3.4 Kết quả trả về sau khi tìm kiếm :

Kết quả tìm kiếm trả về phụ thuộc vào output mà nhà phát triển cung cấp trong câu lệnh tìm kiếm. Có thể là file Xml hoặc Json. Kết quả tìm kiếm trả về các địa điểm mà Google API tìm kiếm được, người phát triển sẽ tùy chọn hiển thị thông tin lên ứng dụng.

Kết quả tìm kiếm chứa 3 phần tử sau :

v “status” :  trạng thái tìm kiếm. Nó có thể là các loại sau đây.

§  OK : không có lỗi xảy ra trong quá trình tìm kiếm. Tìm kiếm thành công.

§  ZERO_RESULT : Tìm kiếm thành công nhưng không có kết quả nào được tìm thấy.

§  OVER_QUERY_LIMIT : quá số lượng truy vấn.

§  REQUEST_DENIED : thiết tham số bắt buộc phải truyền vào.

§  INVALID_REQUEST :tham số truyền vào bị lỗi.  

v “results” : là 1 danh sách các kết quả trả về. Danh sách trả vê gồm có

§  Icon : chứ url  đến hình ảnh hiển thị địa điểm tìm kiếm.

§  Id : mỗi địa điểm chứa 1 id duy nhất.

§  Geometry : chứa cặp thông số lat/long về vị trí tìm kiếm.

§  Name : tên địa điểm.

§  Reference : dùng để tìm kiếm chi tiết về địa điểm này.

§  Types[]: các kiểu tìm kiếm được thêm vào trong kết quả.

§  Vicinity :  Tên đường của khu vực đó.

v Html_attributions : chứa tập hợp các thuộc tính về bảng kết quả này được hiển thị cho người dùng.

3.5  Chi tiết về địa điểm tìm kiếm :

Sử dụng thuộc tính reference của 1 địa điểm đã được tìm kiếm được để tìm kiếm thông tin chi tiết về địa điểm đó. Place Details trả về các thông tin chi tiết về địa điểm đó hơn như địa chỉ, số điện thoại, mức độ tìm kiếm về địa điểm đó.

Kết quả trả về sau khi tìm kiếm là 1 file Json hoặc Xml.

3.6  Báo cáo 1 địa điểm :

Người dùng có thể thêm 1 địa điểm mới hoặc xóa 1 địa điểm đã tồn tại.

Thêm địa điểm : Một địa điểm mới được thêm thông qua HTTP Post theo ví dụ dưới đây :

POST https://maps.googleapis.com/maps/api/place/add/json?sensor=true_or_false&key=AddYourOwnKeyHere HTTP/1.1

Host: maps.googleapis.com

{              

  "location": {

    "lat": -33.8669710,

    "lng": 151.1958750

  },

  "accuracy": 50,

  "name": "Google Shoes!",

  "types": ["shoe_store"],

  "language": "en-AU"

}

Xóa địa điểm : xóa 1 địa điểm mà chúng ta đã thêm vào. Một địa điểm được xóa thông qua HTTP Post theo ví dụ dưới đây :

POST https://maps.googleapis.com/maps/api/place/delete/json?sensor=true_or_false&key=AddYourOwnKeyHere HTTP/1.1

Host: maps.googleapis.com

{

  "reference": "place_reference"

}

Việc Place API cung cấp cho phép chúng ta lấy được những thông tin cần thiết và hiển thị lên Google Maps nhằm giúp cho người dùng có thể biết được địa điểm nào đó mà người dùng cần tìm kiếm. Tuy nhiên việc tìm kiếm này chỉ mang tính tương đối. Nó có thể không được chính xác với vị trí địa lý mà chưa được Google Maps hỗ trợ. Vì vậy việc tìm kiếm còn hạn chế trong 1 địa điểm xác định ở 1 khu vực địa lý nhỏ .

Vì lý do này, nhóm quyết định xây dựng ứng dụng tìm kiếm địa điểm máy ATM của từng loại ngân hàng và nhà sách. Với CSDL được lấy về thông qua web service mà nhóm đã viết trên nền tảng .NET. Nhóm chỉ thể hiện rõ cách thức lấy thông tin từ server và hiển thị thông tin lên client. Không chú trọng lắm về thiết kế phía server. Vì vậy phần phân tích và thiết kế CSDL được hiện thực ở chương sau.

Chương 4 : PHÂN TÍCH THIẾT KẾ ỨNG DỤNG

4.1  Thiết kế cơ sở dữ liệu :

Diagram tổng thể của mô hình :


Hình 4. 1 Sơ đồ tổng quan cơ sở dữ liệu của chương trình


CSDL của chương trình gồm có 5 bảng :

            Bảng atm : chứa các thông tin về máy atm.

            Bảng district : chứa các thông tin về các quận trong thành phố.

            Bảng city : chứa các thông tin về thành phố.

            Bảng bank : chứa các thông tin về loại ngân hàng.

            Bảng bookstoretype : chứa các thông tin về danh mục nhà sách.

            Bảng bookstore : chứa thông tin về nhà sách.

4.1.1:  Bảng atm 

Mô tả : chứa các thông tin về cây atm của loại ngân hàng.

Các thuộc tính :  atmId, atmName, atmDescription, atmLat, atmLong, bankId, districtId.


4.1.2 : Bảng district

Mô tả : chứa các thông tin về quận/huyện trong tỉnh/thành phố.

Các thuộc tính : districtId, districtName, districtDescription, cityId



4.1.3 : Bảng city

Mô tả : chứa các thông  tin về thành phố.

Các thuộc tính : cityId, cityName, cityDescription.


4.1.4 : Bảng bank

Mô tả : Chứa các thông tin về ngân hang.

Các thuộc tính : bankId, bankName, bankDiscription.



4.1.5 : Bảng bookstoretype

Mô tả : Chứa thông tin danh mục nhà sách.

Các thuộc tính : bsTypeId, bsTypeName, bsTypeDescript


4.1.6 : Bảng bookstore

Mô tả : Chứa thông tin về nhà sách.

Các thuộc tính : bsId, bsName, bsDescription, bsLat, bsLong, districtId, bsTypeId.


4.2  các mô hình phân rã chức năng :

     4.2.1 Mô hình Use-case của chương trình :

Actor : Người quản lý dữ liệu

Use-case : Quản lý ATM, Quản lý nhà sách.


 Hình 4. 2 Sơ đồ use case của ứng dụng.

       4.2.2   Các chức năng của chương trình thông qua các mô hình :

            4.2.2.1 : Biểu đồ thêm môt máy  ATM  :

Hình 4. 3 Sơ đồ tuần tự chức năng thêm một máy ATM

            4.2.2.2  Biểu đồ sửa dữ liệu của một máy ATM :

 Hình 4. 4 Sơ đồ tuần tự chức năng sửa dữ liệu một máy ATM

           4.2.2.3 : Biểu đồ xóa một máy ATM :

Hình 4. 5 Sơ đồ tuần tự chức năng xóa một máy ATM
 

            4.2.2.4  Biểu đồ tìm kiếm máy ATM theo quận/huyện và loại ngân hàng :

Hình 4. 6 Sơ đồ tuần tự chức năng tìm kiếm máy ATM


Do thời gian có hạn và đề tài chỉ chú trọng về phía client nên nhóm chỉ làm những biểu đồ cần thiết để thể hiện các chức năng của ứng dụng bên phía server. Nhóm chỉ nêu rõ các chức năng chính của chương trình thông qua biểu đồ use case và thể hiện các chức năng chính như Thêm, xóa, sửa, tìm kiếm các máy ATM.


Chương 5 : TRIỂN KHAI VÀ  CÀI ĐẶT

5.1 Triển khai ứng dụng:

Mô hình kết nối đến cơ sở dữ liệu từ client android thông qua web service như sau :



Hình 5. 1 Mô hình client server


Giải thích :

-         Các client ở đây có thể là các thiết bị chạy android, iOS hay 1 hệ điều này nào đó

-         Server ở đây đóng vai trò của web service.

-         Khi các client có yêu cầu truy xuất đến cơ sở dữ liệu. Client sẽ gửi các yêu cầu đến server. Server chịu trách nhiệm tìm kiếm cơ sở dữ liệu theo yêu cầu do client đã gửi lên. Server trả về kết quả trên dạng List hay Object. Client sẽ sử dụng các bộ thư viện hỗ trợ, phân tích và xử lý hiển thị thông tin cần thiết lên màn hình thiết bị.

5.1.1  Giao tiếp giữa client Android và Server :

Ứng dụng sử dụng thư viện mở ksoap2 hỗ trợ hệ điều hành Android để kết nối web service client và Server. Đây là 1 thư việc soap hiệu quả cho nên tảng android với nhiều tính năng cải tiến và phát triển thêm ở các phiên bản sau.

      5.1.1.1 : Ksoap2 là gì ?

Ksoap là một thư viện mở cho các SOAP web service client trong  môi trường Java như Applet hay ứng dụng J2ME.Ksoap2 được thiết kế lại hoàn toàn dựa trên những bài học từ phiên bản đầu tiên ksoap1.x.Ksoap2-Android là một nhánh trong thư viện ksoap2 được thêm vào để hỗ trợ cho nền tảng Android.

     5.1.1.2 Sử dụng Ksoap2 để lấy dữ liệu từ Server :

Để thực hiện các chức năng chính của ứng dụng, chương trình sẽ kết nối đến server và yêu cầu trả về các dữ liệu khác nhau. Nhưng kỹ thuật để gửi, nhận dữ liệu từ server là tương tự nhau và theo 1 quy định chung.

§  Khởi tạo 1 đối tượng SoapObject để gửi  yêu cầu đến server với các tham số truyền vào là NAMESPACE và METHOD_NAME

§  Truyền vào giá trị của tham số bằng cách dùng phương thức addProperty có sẵn của đối tượng soapObject.

§  Sử dụng Soap Envelope dùng để trao đổi giữa các client và webservice server.

§  Xử lý kết quả trả về bằng kỹ thuật trong ngôn ngữ java và hiển thị các thông tin cần thiết.

Ví dụ : Lấy tên các quận/huyện khi biết mã thành phố của quận huyện đó.

Bước 1 : Khởi tạo các hằng số như sau :
 Hình 5. 2 Khởi tạo các hằng số


Bước 2 :  Khởi tạo SoapObject và các tham số truyền vào :


Hình 5. 3 Khởi tạo đối tượng soapObject

Bước 3 : Gửi dữ liệu lên Server.


Hình 5. 4 Gửi giá trị lên server

Bước 4 : Nhận giá trị trả về từ server.



Hình 5. 5 Nhận giá trị trả về từ Server

5.2 Cài đặt ứng dụng :

Do ứng dụng muốn nêu rõ mục tiêu mô hình mạng thông qua android và web service nên nhóm chỉ chú trọng bên phía client, tức là hiển thị thông tin lên client là các thiết bị Android. Nên phía Server, nhóm chỉ phát triển và triển khai cài đặt các chức năng chính.

5.2.1 Cài đặt phía server :

Server được viết bằng ngôn ngữ ASP.NET nhằm mục đích quản trị CSDL như  thêm, xóa, sửa,tìm kiếm các máy ATM. Ứng dụng chỉ chú trọng đến chức năng, chưa chú trọng đến thiết kế giao diện người dùng do thời gian có hạn và mục đích của đề tài.

Các chức năng của trang web như :

-         Tìm các máy ATM theo quận/huyện và loại ngân hàng.

-         Thêm 1 máy ATM vào CSDL.

-         Quản trị ATM.

-         Sửa thông tin 1 máy ATM.

-         Xóa 1 máy ATM khỏi hệ thống.

-         Tìm kiếm nhà sách.

-         Xem thông tin nhà sách.

-          Quản trị nhà sách.

Giao diện chính của trang quản trị :

Hình 5. 6 Trang quản trị chính

Trang tìm kiếm ATM : Cho phép người quản trị tìm kiếm các máy ATM theo quận/huyện và loại ngân hàng ATM.
 
Hình 5. 7 Trang tìm kiếm máy ATM.

Trang quản trị ATM : Cho phép người quản trị thêm, xóa, sửa thông tin của máy ATM.

Hình 5. 8 Trang quản trị ATM.

Trang thêm 1 máy ATM vào hệ thống : Cho phép người quản trị thêm thông tin 1 máy ATM vào hệ thống.

Hình 5. 9 Trang thêm 1 máy ATM vào hệ thống.

Trang tìm kiếm nhà sách : Cho phép người quản trị tìm kiếm thông tin nhà sách của hệ thống.

Hình 5. 10 Trang tìm kiếm thông tin nhà sách.

Trang quản trị nhà sách : Cho phép người quản trị thêm xóa sửa thông tin nhà sách hiện có trong hệ thống.

Hình 5. 11 Trang quản trị nhà sách.

Trang thêm thông tin của nhà sách : Cho phép người quản trị thêm thông tin của 1 nhà sách.

Hình 5. 12 Thêm thông tin nhà sách.

Trên đây là các chức năng chính của trang web quản trị mà nhóm thực hiện. Trang web thể hiện hầu như các chức năng cơ bản, cho phép quản trị các thông tin về ATM và nhà sách. Tuy giao diện chưa được hoàn chỉnh và đẹp nhưng đã phản ánh đúng chức năng mà nhóm muốn cung cấp. Thao tác đúng với server và cơ sở dữ liệu.

5.2.2  Cài Đặt Phía Client :

Ứng dụng cho phép người sử dụng tìm kiếm các trạm atm và hiển thị vị trí của trạm atm đó lên maps. Cho phép chỉ đường đi từ vị trí hiện tại của người dúng đến địa điểm đó bằng đường đi ngắn nhất.
Ứng dụng có thể lấy dữ liệu từ Google Place API và dữ liệu từ Cơ sở dữ liệu do người quản lý tạo ra để hiển thị thông tin lên màn hình.

Các chức năng của chương trình :

Giao diện chính của chương trình :


Hình 5. 13 Giao diện chính của ứng dụng


Từ giao diện chính của chương trình, nhấn phím Menu trên thiết bị. Ứng dụng sẽ hiển thị ra màn hình sau :
Hình 5. 14 Các Menu Item của ứng dụng


Menu gồm các Item sau :

My Location : Khi nhấp vào menu này,ứng dụng sẽ hiển thị vị trí hiện tại của thiết bị thông qua GPS Location mà thiết bị đó hỗ trợ (nếu có).

Find Machine ATM : ứng dụng sẽ chuyển sang activity kế tiếp là màn hình danh sách các ATM.

Find Gas Stations : ứng dụng sẽ chuyển sang activity kế tiếp là màn hình danh sách các trạm xăng.

Find Gas Stations : ứng dụng sẽ chuyển sang activity kế tiếp là màn hình danh sách các trạm xăng.

Find Banking  : ứng dụng sẽ chuyển sang activity kế tiếp là màn hình danh sách các ngân hàng.

Find Gas Bookstore : ứng dụng sẽ chuyển sang activity kế tiếp là màn hình danh sách các nhà sách.

More : Khi nhấp vào menu More thì ứng dụng sẽ chuyển qua danh sách các Menu khác như Find ATMs Bank, Author, Exit.

Nhóm chúng em chỉ chú trọng vào việc tìm kiếm các trạm ATM trong ứng dụng này.


5.2.2.1 MenuItem “Find Machine ATM” : Khi nhấp vào menu này, ứng dụng sẽ chuyển qua màn hình sau :



Hình 5. 15 Màn hình danh sách các cây ATM của Google Places API

Giải thích : Đây là danh sách các cây ATM mà chương trình lấy được từ CSDL của Google Place API service. Danh sách cây ATM này lấy được phụ thuộc vào bộ latitude và longitude và bán kính mà chúng ta truyền vào.

5.2.2.2 MenuItem “Find ATMs Bank” : Khi nhấp vào menu này nhìn ứng dụng sẽ hiển thị ra trang tìm kiếm danh sách ATM từ CSDL của ứng dụng.

Hình 5. 16 Màn hình tìm kiếm ATM

Giải thích : từ trang tìm kiếm này, chúng ta có thể tìm kiếm danh sách các cây ATM theo Ngân hàng, Tỉnh thành phố và Theo quận trong thành phố đó.

Khi click vào button Tìm Kiếm thì chương trình sẽ hiển thị ra danh sách các ATM thõa mãn điều kiện mà người dùng tìm kiếm.

Màn hình kết quả tìm kiếm có 2 trường hợp :

-     Nếu ko có trạm ATM nào thõa mãn tìm màn hình sẽ hiển thị :

Hình 5. 17  Màn hình khi không thõa mãn điều kiện tìm kiếm.

-    Nếu có trạm ATM nào thõa mãn tìm màn hình sẽ hiển thị :

Hình 5. 18 Màn hình danh sách các cây ATM thõa mãn điều kiện

Khi người dùng click vào 1 item trong danh sách trạm atm tìm kiếm được thì ứng dụng sẽ hiển thị vị trí của trạm atm đó lên mapview.

Ví dụ:
-          khi ta click vào item “02 Nguyễn Hữu Cầu” : ứng dụng sẽ chuyển qua màn hình sau :

 
Hình 5. 19 Màn hình hiển thị vị trí cây ATM lên google maps
-         Khi chúng ta click vào Mark All ATM Menu : thì ứng dụng sẽ hiện thị tất cả các ATM ra mapview.

    Màn hình hiển thị sẽ như sau :

 
Hình 5. 20 Màn hình hiển thị tất cả các cây ATM lên google maps

5.2.2.3 Vẽ đường đi từ vị trí hiện tại của người dùng đến trạm ATM:

Từ màn hình mapview, người dùng click lên mapview, ứng dụng sẽ hiển thị ra Alert Dialog. Từ dialog này, người dùng chọn “Đến địa điểm này” item, ứng dụng sẽ vẽ đường đi từ vị trí hiện tại đến trạm ATM này.
Hình 5. 21 Màn hình Controller cho phép vẽ đường đi.


Khi người dùng nhấp vào menu “Đến điểm này” :

 
Hình 5. 22 Màn hình hiển thị kết quả vẽ đường đi từ vị trí hiện tại

Trên đây là các chức năng chính của ứng dụng  phía client là các thiết bị chạy hệ điều hành android phiên bản 2.2 có độ phân giải 320 x 480. Khi chạy trên các thiết bị có độ phân giải cao hơn hoặc thấp hơn có thể màn hình sẽ hiển thị khác nhau, tùy theo phần cứng thiết bị. Tuy nhiên vẫn đáp ứng được chức năng của chương trình.


Chương 6 : TỔNG KẾT

6.1 Kết Luận :

Việc xây dựng ứng dụng trên nền tảng  hệ điều hành Android thật sự hứng thú nhưng cũng có không ít khó khăn nhất định trong  quá trình tìm hiểu và xây dựng ứng dụng. Qua đó, trau dồi thêm kinh nghiệm trong lập trình trên ngôn ngữ Java và làm việc với web service trên môi trường mạng.

Đề tài mang lại những kiến thức bổ ích, mới mẻ và hứng thú. Do đề tài chỉ tập trung làm bên phía client nên phần client gần như hoàn chỉnh. Về phía server, nhóm chỉ phát triển những chức năng chính. Cho phép người quản lý quản trị các nội dung, thao tác với cơ sở dữ liệu. Trong lúc làm đề tài, nhóm gặp phải 1 số khó khăn về chi phí nên chỉ phát triển trên host cục bộ. Tuy nhiên ứng dụng có thể hoàn toàn ứng dụng thực tế trên môi trường mạng WAN, đáp ứng được mục tiêu mà ứng dụng yêu cầu.

6.2 Hướng phát triển :

Ứng dụng mang tính thực tế cao, có thể phát triển tốt hơn để hướng tới sự thuận tiện cho người dùng. Mục tiêu tiếp theo là xây dựng lại hệ thống server hoạt động tốt theo giao diện đã thiết kế. Thiết kế giao diện client dễ nhìn, thân thiện với người dùng hơn, tối ưu hóa mã nguồn. Đưa ứng dụng hoạt động trong thực tế. Hoàn thiện các chức năng còn chưa hoàn thiện.

=======================================================

DANH MỤC HÌNH ẢNH

Hình 2. 1 Mô hình tương tác giữa client và web service. 1
Hình 2. 2 Sơ đồ kiến trúc của web service. 3
Hình 2. 3 Mô hình chi tiết các thành phần của web service. 5
Hình 2. 4 Kiến trúc hệ điều hành Android. 15
Hình 2. 5 Android SDK.. 20
Hình 2. 6 Mô hình hoạt động của Intent Object 25
Hình 2. 7 Các thành phần của Intent 25
Hình 2. 8 Các Action đã định nghĩa. 26
Hình 2. 9 Các phương thức startActivity của 1 Intent 27
Hình 2. 10 Lấy GPS Location. 31
Hình 2. 11 Lấy Keystore. 40
Hình 3. 1 API key đã đăng ký với Google. 34
Hình 4. 1 Sơ đồ tổng quan cơ sở dữ liệu của chương trình. 53
Hình 4. 2 Sơ đồ use case của ứng dụng. 57
Hình 4. 3 Sơ đồ tuần tự chức năng thêm một máy ATM... 58
Hình 4. 4 Sơ đồ tuần tự chức năng sửa dữ liệu một máy ATM... 59
Hình 4. 5 Sơ đồ tuần tự chức năng xóa một máy ATM... 60
Hình 4. 6 Sơ đồ tuần tự chức năng tìm kiếm máy ATM... 60
Hình 5. 1 Mô hình client server. 61
Hình 5. 2 Khởi tạo các hằng số. 63
Hình 5. 3 Khởi tạo đối tượng soapObject 63
Hình 5. 4 Gửi giá trị lên server. 63
Hình 5. 5 Nhận giá trị trả về từ Server. 64
Hình 5. 6 Trang quản trị chính. 65
Hình 5. 7 Trang tìm kiếm máy ATM. 66
Hình 5. 8 Trang quản trị ATM. 66
Hình 5. 9 Trang thêm 1 máy ATM vào hệ thống. 67
Hình 5. 10 Trang tìm kiếm thông tin nhà sách. 68
Hình 5. 11 Trang quản trị nhà sách. 68
Hình 5. 12 Thêm thông tin nhà sách. 69
Hình 5. 13 Giao diện chính của ứng dụng. 70
Hình 5. 14 Các Menu Item của ứng dụng. 71
Hình 5. 15 Màn hình danh sách các cây ATM của Google Places API 72
Hình 5. 16 Màn hình tìm kiếm ATM... 73
Hình 5. 17  Màn hình khi không thõa mãn điều kiện tìm kiếm. 74
Hình 5. 18 Màn hình danh sách các cây ATM thõa mãn điều kiện. 75
Hình 5. 19 Màn hình hiển thị vị trí cây ATM lên google maps. 76
Hình 5. 20 Màn hình hiển thị tất cả các cây ATM lên google maps. 77
Hình 5. 21 Màn hình Controller cho phép vẽ đường đi. 78
Hình 5. 22 Màn hình hiển thị kết quả vẽ đường đi từ vị trí hiện tại 79

=======================================================

DANH MỤC TÀI LIỆU THAM KHẢO



[1].      Android Developer – Trang web hỗ trợ dành cho lập trình viên của Android.

            http://developer.android.com/index.html


[2].      StackOverFlow – Trang web thảo luận, gỡ rối các vấn đề gặp phải.

            http://stackoverflow.com/questions/tagged/android


[3].      Reto Meier, Professional Android 2 Application Development,

Wiley Publishing, 2010, pp. 38-48. http://mobipro.vn/thu-vien/thu-vien-android/ebook-text-book-professional-android-2-application-development.html

                      

[4].      Gson – Thư viện giúp phân tích file json.

            http://code.google.com/p/google-gson/

[5].      Ksoap2 – Thư viện hỗ trợ thao tác với web service .Net trong Android.

            http://code.google.com/p/ksoap2-android/


                           ====***====

====================================================================
Cảm ơn sự quan tâm và ủng hộ của mọi người trên web https://www.antonda.xyz/
Antonda tôi sẽ cập nhật những tin tức liên quan đến vấn đề này sớm nhất .
====================================================================

Nguồn : https://www.antonda.xyz/

Tất cả các bài viết đều được viết từ trải nghiệm thực tế, vì vậy để đảm bảo kinh phí cho website hoạt động hiệu quả, rất hy vọng mọi người hãy click vào các link quảng cáo để chúng tôi có một phần kinh phí, giúp chúng tôi có những “động lực” để cung cấp những thông tin mới nhất và bổ ích nhất tới các bạn. Xin cảm ơn !

Link quảng cáo : | Click