Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 103 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
103
Dung lượng
3,86 MB
Nội dung
TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƢỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN LUẬN VĂN TỐT NGHIỆP TÌM HIỂU ANDROID VÀ PHÁT TRIỂN ỨNG DỤNG TÌM ĐƢỜNG ĐI Giảng viên hƣớng dẫn : TS NGUYỄN THANH BÌNH Sinh viên thực hiện: TRƢƠNG QUỐC CƢỜNG - Lớp: 08TH1D BÙI HỒI ANH - Lớp: 08 TH2D Khố: 12 TP Hồ Chí Minh, tháng 07 năm 2012 TỔNG LIÊN ĐỒN LAO ĐỘNG VIỆT NAM TRƢỜNG ĐẠI HỌC TƠN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN LUẬN VĂN TỐT NGHIỆP TÌM HIỂU ANDROID VÀ PHÁT TRIỂN ỨNG DỤNG TÌM ĐƢỜNG ĐI Giảng viên hƣớng dẫn : TS NGUYỄN THANH BÌNH Sinh viên thực hiện: TRƢƠNG QUỐC CƢỜNG - Lớp: 08TH1D BÙI HỒI ANH - Lớp: 08 TH2D Khố: 12 TP Hồ Chí Minh, tháng 07 năm 2012 LỜI CẢM ƠN Trƣớc tiên, Chúng em xin gửi lời cảm ơn sâu sắc tới Thầy Nguyễn Thanh Bình Thầy tận tình dẫn cho em từ bƣớc đến hoàn thành đề tài luận văn Thầy giúp em giải vấn đề lúc khó khăn Chúng em học đƣợc Thầy khơng hiểu biết mà cách làm việc lẽ sống Chúng em xin gửi lời cảm ơn tới tất Thầy Cô giảng viên khoa Công nghệ thông tin, trƣờng Đại học Tôn Đức Thắng nhiệt tình giảng dạy cho chúng em tri thức công nghệ trang bị hành trang cho chúng em vào đời Cảm ơn nhóm bạn thực luận văn hƣớng dẫn thầy Nguyễn Thanh Bình gắn bó, động viên hỗ trợ hoàn thiện đề tài Cuối cùng, chúng xin gửi lời cảm ơn đến bố, mẹ gia đình Bố mẹ chỗ dựa tinh thần vững cho chúng Thành phố Hồ Chí Minh, ngày tháng năm 2012 Nhóm sinh viên thực đề tài Trƣơng Quốc Cƣờng Bùi Hoài Anh NHẬN XÉT CỦA GIẢNG VIÊN HƢỚNG DẪN NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN MỤC LỤC CHƢƠNG 1: TỔNG QUAN ĐỀ TÀI 1.1 Giới thiệu đề tài: 1.2 Nội dung đề tài: 1.3 Giới hạn đề tài: 1.4 Phƣơng pháp nghiên cứu: 1.5 Cấu trúc luận văn: CHƢƠNG 2: NỀN TẢNG CÔNG NGHỆ 2.1 Android: 2.1.1 Giới thiệu: 2.1.2 Ƣu điểm khuyết điểm: 2.1.3 Kiến trúc tảng Android: 2.1.4 Hệ điều hành: 2.1.5 Thƣ viện giao diện lập trình ứng dụng: 2.1.6 Khung ứng dụng Android: 2.1.7 Khung ứng dụng Android: 10 2.1.8 Activity: 10 2.1.9 Service: 13 2.1.10 Broadcast receivers: 14 2.2 SQLite: 14 2.2.1 Tạo sở liệu: 15 2.2.2 Mở sở liệu: 16 2.2.3 Thêm giá trị sở liệu: 16 2.2.4 Truy vấn: 16 2.2.5 Đóng sở liệu: 16 2.3 Google Maps API Google Web Service: 16 2.3.1 Google APIs Add-On: 16 2.3.2 Maps external library: 17 2.3.3 Google Places API: 19 2.3.4 Place Searches: 19 2.3.5 Place Details Requests: 21 2.3.6 The Google Places Autocomplete API: 22 2.3.7 The Google Directions API: 22 2.3.8 Geocoding API: 23 CHƢƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ 24 3.1 Xác định yêu cầu hệ thống: 24 3.1.1 Tổng quan: 24 3.1.2 Chức định vị: 25 3.1.3 Chức Tìm kiếm địa điểm: 25 3.1.4 Chức Quản l địa điểm: 25 3.1.5 Chức Tìm đƣờng đi: 26 3.1.6 Chức Xem vị tr địa điểm: 26 3.2 Phân t ch hệ thống: 27 3.2.1 Sơ đồ Use-case: 27 3.2.2 Sơ đồ trạng thái: 38 3.2.3 Sơ đồ tuần tự: 44 3.3 Thiết kế hệ thống: 50 3.3.1 Thiết kế sở liệu: 50 3.3.2 Sơ đồ định hƣớng: 52 3.3.3 Thiết kế giao diện: 55 CHƢƠNG 4: HIỆN THỰC HỆ THỐNG 61 4.1 Tạo thiết bị ảo: 61 4.2 Tạo project Google API: 62 4.3 Thao tác đồ: 63 4.3.1 Lấy Maps API key: 63 4.3.2 Hiển thị đồ: 64 4.3.3 Vẽ marker đồ: 66 4.3.4 Một số phƣơng thức thao tác đồ: 68 4.4 Hiện thực chức năng: 69 4.4.1 Chức định vị đồ: 69 4.4.2 Lớp GoogleUtil phƣơng thức callGoogleWebService(): 70 4.4.3 Phƣơng thức lấy liệu từ Geocoding API: 70 4.4.4 Chức tìm kiếm địa điểm: 72 4.4.5 Chức quản l địa điểm: 76 4.4.6 Chức tìm đƣờng đi: 79 4.4.7 Chức xem vị tr địa điểm: 80 4.5 Kết thực: 81 4.5.1 Chế độ đồ: 81 4.5.2 Chức định vị: 82 4.5.3 Chức tìm kiếm địa điểm: 83 4.5.4 Chức tìm đƣờng đi: 85 4.5.5 Chức quản l địa điểm: 86 4.5.6 Chức xem vị tr địa điểm: 88 CHƢƠNG 5: TỔNG KẾT VÀ HƢỚNG PHÁT TRIỂN TƢƠNG LAI 89 5.1 Kết đạt đƣợc: 89 5.2 Ƣu điểm khuyết điểm: 89 5.2.1 Ƣu điểm: 89 5.2.2 Nhƣợc điểm: 90 5.3 Hƣớng phát triển tƣơng lai: 90 DANH MỤC VIẾT TẮT ADT: Android Development Tools API: Application Programming Interface AVD: Android Virtual Device GPS: Global Positioning System IDE: Integrated Development Environment DANH MỤC BẢNG BIỂU Bảng 3.1: Đặc tả use case định vị thiết bị 28 Bảng 3.2: Đặc tả use-case tìm kiếm địa điểm 29 Bảng 3.3: Đặc tả use-case thêm địa điểm 31 Bảng 3.4: Đặc tả use-case thêm địa điểm 33 Bảng 3.5: Đặc tả use-case tìm đƣờng 36 Bảng 3.6: Đặc tả use-case xem vị tr địa điểm 37 Bảng 3.7: Thuộc t nh table place 50 Bảng 3.8: Thành phần giao diện hình ch nh 56 Bảng 3.9: Thành phần giao diện tìm kiếm địa điểm 56 Bảng 3.10: Thành phần giao diện quản l địa điểm 57 Bảng 3.11: Thành phần giao diện thêm địa điểm 58 Bảng 3.12: Thành phần giao diện sửa địa điểm 59 Bảng 3.13: Thành phần giao diện tìm đƣờng 60 Bảng 4.1: Thuộc t nh lớp đối tƣợng Place 73 Trong lớp DBAdapter tạo lớp kế thừa từ lớp SQLiteOpenHelper, nhiệm vụ lớp ghi đè hai phƣơng thức onCreate() onUpgrade() Khi khởi tạo, hệ thống kiểm tra có sở sử liệu tồn hay khơng, khơng tạo sở liệu Phƣơng thức onUpgrade() có nhiệm vụ cập nhật version cho sở liệu: static final String DATABASE_CREATE = "Create table places (_id integer primary key autoincrement, name text, formatted_address text, type text, lat text, lon text);"; private static class DatabaseHelper extends SQLiteOpenHelper{ DatabaseHelper(Context context){ super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { try{ db.execSQL(DATABASE_CREATE); }catch(SQLException e){ e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrade database from version " + oldVersion + "to version " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS places"); onCreate(db); } } b Mở đóng sở liệu: DatabaseHelper DBHelper; SQLiteDatabase db; public DBAdapter(Context context){ this.context = context; DBHelper = new DatabaseHelper(context); } //open database public DBAdapter open() throws SQLException{ db = DBHelper.getWritableDatabase(); return this; } //close database public void close(){ DBHelper.close();} 77 c Truy vấn sở liệu: Phƣơng lấy tất thông tin địa điểm sở liệu: public Cursor getAll(){ return db.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_NAME, KEY_TYPE, KEY_ADDRESS, KEY_LAT, KEY_LON}, null, null, null, null, null); } Phƣơng thức lấy thông tin địa điểm từ ID: public Cursor getPlaceById(String id) throws SQLException{ Cursor cursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ID, KEY_NAME, KEY_TYPE, KEY_ADDRESS, KEY_LAT, KEY_LON}, KEY_ID + "=" + id, null, null, null, null, null); if(cursor != null){ cursor.moveToFirst(); } return cursor; } Phƣơng thức lấy thông tin địa điểm từ loại địa điểm: public Cursor getPlaceByType(String type) throws SQLException{ Cursor cursor = null; try{ cursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ID, KEY_NAME, KEY_TYPE, KEY_ADDRESS, KEY_LAT, KEY_LON}, KEY_TYPE + "='" + type + "'", null, null, null, null, null); if(cursor != null){ cursor.moveToFirst(); } }catch(Exception e){ e.printStackTrace(); } return cursor; } Phƣơng thức thêm địa điểm vào sở liệu: public long insertPlace(Place p){ ContentValues values = new ContentValues(); values.put(KEY_NAME, p.get_name()); values.put(KEY_ADDRESS, p.get_address()); values.put(KEY_TYPE, p.get_type()); values.put(KEY_LAT, p.get_lat()); values.put(KEY_LON, p.get_lon()); return db.insert(DATABASE_TABLE, null, values); } Phƣơng thức cập nhật lại thông tin địa điểm: 78 public boolean updatePlace(String id, Place p){ ContentValues values = new ContentValues(); values.put(KEY_NAME, p.get_name()); values.put(KEY_TYPE, p.get_type()); values.put(KEY_ADDRESS, p.get_address()); values.put(KEY_LAT, p.get_lat()); values.put(KEY_LON, p.get_lon()); return db.update(DATABASE_TABLE, values, KEY_ID + "=" + id, null)>0; } Phƣơng thức xóa địa điểm: public boolean deletePlace(String id){ return db.delete(DATABASE_TABLE, KEY_ID + "=" + id, null)>0; } 4.4.6 Chức tìm đƣờng đi: Phƣơng thức tạo chuỗi truy vấn: private static String buildDirectionURL(String latStart, String longStart, String latEnd, String longEnd, String travelMode) { StringBuilder directionURL = new StringBuilder(); // Build search query directionURL.append("http://maps.googleapis.com/maps/api/directions/j son?"); directionURL.append("origin=").append(latStart).append(",").append(lo ngStart); directionURL.append("&destination=").append(latEnd).append(",").appen d(longEnd); directionURL.append("&mode=").append(travelMode); directionURL.append("&units=metric"); directionURL.append("&language=vi"); directionURL.append("&sensor=false"); return directionURL.toString(); } Phƣơng thức bao quát, gọi phƣơng thức tạo chuỗi, gọi phƣơng thức truy vấn trả sanh sách tuyến đƣờng đƣợc: public static List getDirectionInfo(String latStart, StringlongStart, String latEnd, String longEnd, String travelMode) { // Build google query to get direction String query = buildDirectionURL(latStart, longStart, latEnd, longEnd, travelMode); // Query to Google service String rawJson = callGoogleWebService(query); // return Directions return json2DirectionRoute(rawJson); } 79 Phƣơng thức json2DirectionRoute() có nhiệm vụ phân t ch liệu thành danh sách tuyến đƣờng Mỗi tuyến đƣờng đƣợc cấu tạo nhiều điểm đồ Những điểm đƣợc lƣu trữ đoạn mã k tự dài Phƣơng thức json2DirectionRoute() phải gọi phƣơng thức decodePoly() giải mã đoạn chuỗi để có giá trị trả danh sách điểm cấu tạo thành tuyến đƣờng Trong lớp LittleMapActivity, xây dựng phƣơng thức vẽ đƣờng đi: public void drawDirection(List pointList) { // Clear all overlay List overlayList = mapView.getOverlays(); overlayList.clear(); if (pointList != null && !pointList.isEmpty()) { // **Start point GeoPoint startGP = GoogleUtil.parseArray2GeoPoint( pointList.get(0)); MapController mapController = mapView.getController(); mapController.setCenter(startGP); // Draw start point overlayList.add(new PlaceOverlay(this, startGP, "", "")); // Navigate the path GeoPoint geoPoint1; GeoPoint geoPoint2 = startGP; int size = pointList.size() - 1; for (int i = 1; i