Ứng dụng công nghệ định vị trên nền tảng Android cho mạng địa xã hội

MỤC LỤC

PHẦN MỞ ĐẦU

Giới thiệu kiến trúc hệ điều hành Android và 3 công nghệ định vị phổ biến hiện nay từ đó đưa ra ý tưởng hiện thực hóa các nhiệm vụ đồ án. Kết luận: Đánh giá về kết quả thực hiện đồ án, phân tích những thuận lợi, khó khăn khi thực hiện đồ án, định hướng phát triển đồ án trong tương lai.

BÀI TOÁN MẠNG ĐỊA XÃ HỘI

Mạng xã hội là gì?

    Mọi người có thể tự do trao đổi ý kiến, bình luận về các hoạt động của người khác, chia sẻ hình ảnh, video, thông tin cá nhân … Có thể nói, mạng xã hội đã tạo nên một cuộc cách mạng trong cách thức giao tiếp của những người thường xuyên sử dụng Internet. Không dừng lại ở đó, cũng vẫn với mô hình cập nhật thông tin trên, các mạng xã hội đưa ra nhiều tính năng mới như viết nhật ký (blog), viết ghi chú (note), cập nhật các hình ảnh, video cá nhân, sửa các thông tin profile, v.v… và cũng giống như các hoạt động khác, các hoạt động này đều được cập nhật thành feed.

    Mạng địa xã hội (geo – social network)

    Đồng thời, mỗi người sử dụng sẽ có một bảng thông tin gọi là wall (tường), thực chất đây là nơi sẽ lưu các trạng thái của người dùng (status), các hoạt động gần đây của họ như bình luận về status của người khác. Feed thực chất là hành động cập nhật các hành động của người dùng cho bạn bè của người đó, qua đó, người sử dụng có thể biết được hôm qua, hay cách đây vài tiếng đồng hồ bạn bè ta đã làm gì, đã bình luận hoặc phát biểu những gì.

    Mạng địa xã hội Foloyu

      Client ở đây có thể là điện thoại Android, Iphone hoặc web browser, thực hiện kết nối tới server foloyu thông qua internet, server này sẽ nhận request, thực hiện xác thực người dùng và xác định loại dịch vụ mà client muốn gọi tới từ đó nó sẽ thực hiện các lời gọi webservice tới 3 server còn lại là Profile engine, feed engine và location engine để đáp ứng các yêu cầu tương ứng của người dùng. Ngoài ra, hệ thống thực hiện đăng nhập và xác thực người dùng bằng giao thức Kerberos, giao thức này cho phép người dùng đăng nhập một lần vào hệ thống và sử dụng các dịch vụ từ phía các server còn lại mà không cần phải đăng nhập lần thứ hai.

      Hình 1-1: Mô hình hệ thống Foloyu
      Hình 1-1: Mô hình hệ thống Foloyu

      ỨNG DỤNG ANDROID CHO MẠNG ĐỊA XÃ HỘI FOLOYU

      Phân tích yêu cầu

        Hệ thống chú trọng vào thông tin địa điểm và bình luận thông tin địa điểm đồng thời kết nối mọi người với nhau thông qua địa điểm, chính vì vậy đối với một người dùng điện thoại Android thì hệ thống cần đảm bảo 3 chức năng cơ bản trên. Các chức năng này đều khó thực hiện trên phía client Android vì nó đòi hỏi nhiều thao tác phức tạp và hiếm khi người sử dụng dùng nó khi đang đăng nhập vào hệ thống từ điện thoại Android. • Tự động xác định vị trí người dùng: ứng dụng Android client sẽ tự lấy các thông tin từ môi trường (tín hiệu wifi, tín hiệu di động, tín hiệu GPS) rồi gửi những thông tin này lên foloyu server, server sẽ xác định vị trí người dùng dựa trên database của mình, nếu không thể xác định được, ứng dụng client sẽ gửi request lên Google server thông qua lời gọi hàm đã được build sẵn trong hệ điều hành Android.

        Khi đó, ứng dụng client sẽ gửi thông tin lên server để phía server thực hiện tạo phản hồi cho bạn bè của người dùng (tùy theo chính sách riêng tư của người sử dụng). • Định vị bằng Google server: nếu Foloyu server không thực hiện được việc định vị, ứng dụng sẽ gửi yêu cầu định vị lên Google server thông qua lời gọi hàm được build sẵn trong nhân hệ điều hành Android. • Xem thông tin chi tiết về một địa điểm cụ thể: xem vị trí của địa điểm trên bản đồ, xem mô tả cụ thể về địa điểm, xem các bình luận về địa điểm, xem địa chỉ của địa điểm, thứ hạng của địa điểm.

        Hình 3-8: Use case tổng quát
        Hình 3-8: Use case tổng quát

        Thiết kế chương trình

          Các thành phần này thực hiện việc trích rút các thông tin cần thiết cho từng thành phần theo giao diện dữ liệu đã được quy ước từ trước với phía server, rồi đóng gói các dữ liệu này thành các object java bean để từ đó các thành phần khác trong ứng dụng có thể sử dụng được. Các ứng dụng khác nhau có thể gọi tới Activity của ứng dụng khác, ta có thể hình dung tầng ứng dụng của Android như là một đại dương, trong đó các activity giống như những hòn đảo nhỏ, mỗi một ứng dụng giống như một quần đảo, quy tụ các activity với nhau. Khi thread này hoạt động, thread chính vẫn hiển thị giao diện UI của ứng dụng, cụ thể nó sẽ hiển thị một dialog thông báo là đang kết nối tới internet, khi nào toàn bộ thao tác kết nối rồi nhận dữ liệu, xử lý dữ liệu trong thread kia thành công thì một message được gửi về thread chính thông qua object handler, hàm handleMessage của object handler sẽ được gọi, và.

          Các bước thực hiện như sau, đầu tiên, ta tạo một object handler (ở phần (1)), như vậy handler này sẽ thuộc về thread chính, là thread quản lý hiển thị giao diện, đến (2) khi người dùng điền đầy đủ thông tin vào các form đăng ký và bấm nút đăng ký thì ta tạo một thread t, và đưa toàn bộ công việc kết nối tới server vào thread này (phần (3)), toàn bộ công việc này được thực hiện trong hàm tryRegister() và hàm này được đặt trong hàm run() của thread t. Thành phần này sẽ đón các file XML từ trên mạng về, rồi phân tích theo giao diện dữ liệu được quy ước sẵn, các thông tin sau khi được phân tích sẽ được đóng gói vào các object thuộc gói Java bean, để cho các Activity khi cần, sẽ lấy dữ liệu ra và hiển thị lên trên giao diện GUI. Trong sơ đồ trên, có 3 mẫu tài liệu XML cần parse, kế thừa từ lớp Abstract DefaultHandler và parse ba mẫu thông tin khác nhau thông qua việc cài đặt các phương thức trừu tượng của lớp này là startDocument(), endDocument(), startElement(String n, String l, String q, Attributes a), endElement(String n, String l, String q).

          Hình 3-18: Sơ đồ lớp thành phần Parse XML
          Hình 3-18: Sơ đồ lớp thành phần Parse XML

          GIẢI PHÁP THỰC TIỄN CHO ĐỊNH VỊ TRONG MẠNG ĐỊA XÃ HỘI FOLOYU

          • Mô hình định vị bằng sóng wifi cho Foloyu
            • Chương trình lấy mẫu WifiScanner

              Pha online, người dùng sẽ gửi các thông số bao gồm địa chỉ MAC và độ mạnh sóng (RSSI) lên server Foloyu, server sẽ sử dụng thuật toán matching giữa dữ liệu gửi lên và dữ liệu trong database để đưa ra giải đáp người dùng đang ở địa điểm nào trong số các địa điểm lưu trong database, nếu không được, phía client sẽ sử dụng dịch vụ định vị được cung cấp bởi server của google. Người dùng mở ứng dụng foloyu, một thread chạy ngầm dò sóng wifi, khi bắt được sóng mới nó sẽ tự động nhóm các sóng theo địa chỉ MAC, rồi thực hiện tính toán độ mạnh trung bình của sóng với từng nhóm địa chỉ MAC, sau đó sắp xếp các nhóm này theo độ giảm của độ mạnh sóng (RSSI), sau đó xây dựng một String theo định dạng XML. Chương trình lấy mẫu phải đảm bảo các yêu cầu sau: phải quét được hết các sóng wifi mà thiết bị thu được, phải tính được vị trí hiện thời của thiết bị lấy mẫu, và phải có giao diện cho phép người thu thập mẫu điền thông tin về địa điểm, sau đó toàn bộ các thông tin này được gửi lên server rồi lưu lại vào cơ sở dữ liệu.

              Nhiệm vụ server là kết nối tới cơ sở dữ liệu, tiến hành kiểm tra lại thông tin về địa điểm này, xem nó đã có trong cơ sở dữ liệu chưa, rồi sau đó quyết định có lưu vào cơ sở dữ liệu không, và trả lại kết quả cho nhân viên thu thập dữ liệu biết xem họ đã lưu thành công hay chưa. Giao thức trao đổi giữa client Android và server cũng như ứng dụng Foloyu, em viết 1 trang servlet thực hiện nhận dữ liệu, kiểm tra xem dữ liệu đã đúng hay chưa rồi thực hiện kết nối đến cơ sở dữ liệu và lưu vào cơ sở dữ liệu thông tin đã thu được.Sau đó gửi lại phía client file XML thông báo lưu thành công hay không. Để thực hiện việc thao tác lấy thông tin bất cứ sóng wifi nào mà thiết bị bắt được, ta phải gọi tới một System Service thông qua lời gọi hàm getSystemService() .Sau khi gọi tới wifi service, ta thu được một object WifiManager và từ đó có thể thao tác để lấy về thông tin sóng wifi.

              Khi nào người sử dụng chọn chức năng định vị, ứng dụng sẽ gửi thông tin sóng wifi đã được sắp xếp theo chiều giảm của độ mạnh sóng wifi rồi gửi lên server Foloyu, Foloyu gọi webservice tới module định vị ở Location Engine, nếu định vị thành công sẽ trả về client file XML với định dạng dữ liệu đã được trình bày ở trên. Mục tiêu của module định vị không phải là định vị chính xác từng mét, mà mục tiêu của module định vị là nếu người sử dụng ở trong các địa điểm có lưu trong cơ sở dữ liệu của Foloyu, thì phải định vị được, để qua đó còn cài đặt các dịch vụ kết bạn, chia sẻ thông tin trên mạng Foloyu.

              Hình 4-35: Mô hình định vị bằng wifi signal
              Hình 4-35: Mô hình định vị bằng wifi signal