www.tinhgiac.com TÌM HIỂU TỔNG QUAN VỀ PADA ANDROID tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn...
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM KHOA CÔNG NGHỆ THÔNG TIN THỰC TẬP TỐT NGHIỆP TÌM HIỂU TỔNG QUAN VỀ PADA, ANDROID ỨNG DỤNG VÀO BÀI TOÁN ỨNG DỤNG WEBSERVICES TRÊN ANDROID, BADA Giảng viên hướng dẫn: Thạc sĩ PHẠM ĐỨC THÀNH Sinh viên thực : NGUYỄN THIỆN KHIÊM Ngành: Công Nghệ Phần Mềm Khóa: 2008 – 2011 Tp Hồ Chí Minh, tháng năm 2011 3.08.01.0297 MỞ ĐẦU Công ty chuyên nghiên cứu phân tích thị trường research2guidance dự đoán thị trường ứng dụng dành cho điện thoại di động có mức tăng trưởng kỷ lục vòng năm tới Cụ thể, tới năm 2013, mức lợi nhuận thị trường ứng dụng vào khoảng 15,65 tỉ USD, tăng 807% so với 1,95 tỉ USD năm 2009 Research2guidance dự đoán thị trường ứng dụng cho điện thoại di động có tốc độ tăng trưởng nhanh vòng vài năm tới Lợi nhuận tăng gấp lần sau năm, từ 1,95 tỉ USD năm 2009 lên 15,65 tỉ USD năm 2013 Ngồi việc dự đốn mức tăng trưởng lợi nhuận research2guidance dự đốn số người dùng smartphone năm tới, yếu tố giúp thị trường ứng dụng cho di động tăng trưởng Theo đó, số người dùng smartphone tăng từ 100 triệu người năm 2009 lên tỉ người năm 2013 Điện thoại thông minh phát triển mạnh Việt Nam đánh giá thiên đường nhà phát triển ứng dụng di động Các ứng dụng tìm kiếm tích hợp hệ điều hành chưa có, tìm kiếm địa tuyển sinh, tìm điểm kẹt xe chưa tích hợp LỜI CẢM ƠN Kính Thưa thầy cô khoa Công nghệ thông tin thầy Phạm Đức Thành giáo viên hướng dẫn bạn học khóa Vậy thấm năm kể từ ngày chúng em gia nhập đại gia đình Cao Đẳng Cơng Nghệ Thơng Tin.Giờ đây, chúng em đứng trước bước tiến khác lớn ngưỡng cửa đời Mặc dù vậy, chúng em ý thức rằng, thành công mà chúng em đạt ngày hôm nỗ lực chúng em mà giúp đỡ lớn từ nhiều phía xung quanh Đầu tiên, chúng em xin gửi lời cám ơn chân thành đến tồn thầy Khoa Cơng Nghệ Thơng Tin.Trong nhiều năm qua, thầy cô trỏ vững vàng xác nghiệp đào tạo Khơng ngại gian nan, vất vả, thầy cô không ngừng cải tiến giáo trình, cách giảng dạy nhằm đem lại hiệu cao công việc đào tạo hệ trẻ tài năng, giúp chúng em biết thích ứng với thay đổi nhanh chóng giới công nghệ thông tin xã hội đương thời Chúng em xin cám ơn thầy Phạm Đức Thành nhận trọng trách vất vả giáo viên hướng dẫn cho chúng em suốt thời gian qua Thầy khơng thầy mà người cha đồng hành, chỗ dựa vững mặt kiến thức suốt thời gian làm khoá luận tốt nghiệp Thành chúng em đạt qua đề án nhờ phần không nhỏ công sức thầy Chúc thầy nhiều sức khỏe thành công đường cao mà thầy lựa chọn Chúng xin gửi lời cám ơn chia sẻ niềm vui bạn học khóa 2008 Các bạn người lữ khách đồng hành chuyến tàu năm học vừa qua Các bạn niềm vui, nguồn động lực mạnh mẽ thúc đẩy vào buổi sáng thức dậy, vào lúc gặp tập khó khăn hay vào kỳ thi vất vả Hi vọng sau này, cho dù vòng lặp vơ tận đời có đưa người đường hay nơi chốn xa xơi nữa, ln ràng buộc tồn vẹn, mãi liên kết với tình bạn chân thành Cuối quan trọng nhất, chúng xin dành tất tri ân biết ơn cho gia đình yêu quý, nơi sinh người, tài nhiệt huyết chúng em Xin cám ơn người đóng góp thầm lặng cho thành chúng em ngày hôm Xin cảm ơn điểm tựa vững cho chuyến phiêu lưu dài mà em đối diện phía trước Một lần nữa, chúng em xin cám ơn tất người, chúc người dồi sức khỏe.Chúc cho khóa học kết thúc tốt đẹp Chúng em tin tưởng vào tương lai sáng lạng Công nghệ thông tin Việt Nam Chúc cho Công nghệ thơng tin Việt Nam mau chóng sánh ngang cường quốc năm châu giới TP.HCM, ngày tháng năm 2010 Sinh viên Nguyễn Thiện Khiêm NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN MỤC LỤC Trang DANH MỤC CÁC HÌNH, BẢNG BIỂU VÀ SƠ ĐỒ Trang Chương 1: TÌM HIỂU HỆ ĐIỀU HÀNH BADA 1.1 Khái Quát Hệ Điều Hành Bada Pada hệ điều hành điện thoại di động Samsung phát triển Thông qua 10 điều Pada, bạn hình dung phần HĐH Samsung sản xuất điện thoại sử dụng hầu hết HĐH di động, từ Window Mobile, Linux Mobile, Symbian Android Tuy vậy, hãng chưa phát triển tảng di động riêng dành cho Chính tham vọng ''bùng nổ'' thị trường smartphone thúc đẩy đời Pada, HĐH toanh gắn ''mác'' Samsung Hãng điện tử Hàn Quốc kín tiếng thông tin xung quan Pada Nhưng với đời S8500 Wave, thông tin dần mở - Nền tảng thông minh cho người Việc Samsung giới thiệu Pada gây bối rối cho nhiều người, thông điệp nhà sản xuất lại đơn giản, họ muốn tất người sử dụng điện thoại thơng minh khơng bó hẹp số người dùng cao cấp Điều thể rõ buổi lễ giới thiệu Pada, Samsung thẳng vào phần nhỏ thị trường điện thoại nói muốn chiếm nhiều thị trường Đó thị trường điện thoại thơng minh, nhỏ lại có lợi nhuận Pada Samsung làm dấy lại tranh cãi từ xưa đến thị trường di động, định nghĩa điện thoại thơng minh Samsung cho Pada điện thoại thơng minh , điện thoại có kho ứng dụng riêng, có phần cứng đủ mạnh hỗ trợ đa điểm xếp vào loại - Cạnh tranh Một câu hỏi đặt ra: Pada gì? Nó HĐH giao diện người dùng thơng thường? Ơng Justin Hong, trường nhóm phát triển tảng Pada cho biết HĐH xây dựng tảng Linux giống Android Google Trang 10 4.4 Tiến trình cài đặt 4.4.1 Tạo máy ảo Android: 4.4.1.1 Download Android SDK: Android SDK thực chất tập hợp công cụ thư viện để phát triển ứng dụng tảng hệ điều hành Android B1: Vào trang http://developer.android.com/sdk/index.html để tải Android SDK Starter Tùy thuộc vào hệ điều hành mà chọn Mac, Linux hay Window Ở ta chọn tải cho Window Hình Download Android SDK B2: Giải nén file zip vừa tải Chạy SDK Setup.exe Hình Chạy SDK Setup.exe Trang 86 B3: Đánh dấu Packages muốn tải: Documents phần Javadoc mơ tả hoạt động phương thức lớp (phần chắn thiếu rồi), Sample đoạn code mẫu, SDK Platform ứng với phiên hệ điều hành (2.2 - API level 8, 2.1 - API level 7, ), Google API để phát triển phần mềm liên quan đến dịch vụ Google (như Google Map bạn muốn lập trình liên quan đến GPS) -> Install -> Selected Install -> Cửa sổ Install Hình Cài đặt Android SDK 4.4.1.2 Tích hợp Android SDK vào Eclipse: B1: Tải Eclipse: Eclipse for Java Developers, Eclipse for Java and Report Developers B2: Khởi chạy Eclipse, vào Help -> Install new softwares Chọn Add, gõ vào ô Name tên bạn muốn Location gõ vào địa để tải ADT: Trang 87 https://dl-ssl.google.com/android/eclipse/ http://dl-ssl.google.com/android/eclipse/ Hình 4 Tích hợp Android SDL vào Eclipse B3: Next, next, Accept, next, Finish (như Install chương trình bình thường) B4: Eclipse -> Windows -> Preferences -> Android Nhấn nút Browse chỉnh đường dẫn tới thư mục Android SDK bạn tải lúc trước -> Apply -> OK Trang 88 Hình Tích hợp Android SDK (tt) 4.4.1.3 Android Virtual Device (Emulator): AVD máy ảo cho developer phát triển ứng dụng Để tạo AVD vào Windows -> Android SDK and AVD Manager -> Virtual Devices chọn New.-> Cửa sổ Create new AVD ra, điền thông tin cho AVD vào: Trang 89 Hình Tạo máy ảo Name: Tùy ý (nhưng sử dụng ký tự "a-z", "A-Z", ".-_", nghĩa khoảng trắng ko đc) Target: Chọn phiên hệ điều hành bạn muốn (thường tạo Android 1.6 Android 2.2 để test) SD Card: gõ vào Size SD card ảo cho AVD, chỉnh tới file có sẵn Nhiều AVD dùng chung Sdcard (chỉ cần tạo lần đầu, lần sau chỉnh đường dẫn tới file đó) Trang 90 Skin: để Default (HVGA) chọn kích cỡ hình bạn muốn Chỉ cần quan tâm tới option: HVGA (phân giải 320-480 G1, G2, i5700 ), QVGA (240-320 HTC Wildfire ), WVGA854 (480-854 Milestone, NexusOne ) -> Create AVD Sau tạo máy ảo: Hình Giao diện máy ảo Trang 91 4.4.2 Thiết kế phần mềm: 4.4.2.1 Khởi tạo project: B1: Vào thẻ File -> New -> Android Project Nếu bạn lập trình Android lần đầu có lẽ dòng Android Project khơng ra, xuống phía cuối chọn Other vào Android -> Android Project B2: Điền thông tin project: Min SDK Version: (con số tương ứng với phiên android) => Kích nút Finish Vậy ta tạo xong project với lớp Activity: Location10 4.4.2.2 Thiết kế class MainActivity - Cần kế thừa phương thức MapActivity sau : public class MainActivity extends MapActivity Trang 92 - Tạo điều khiển giao diện phương thức OnCreate() sau : super.onCreate(savedInstanceState); setContentView(R.layout.layout_main_11); MapView mv = (MapView)findViewById(R.id.mvmain); mv.setTraffic(true); mv.setBuiltInZoomControls(true); Button btnStreet = (Button) findViewById(R.id.btnSTreet); Button btnPoint = (Button) findViewById(R.id.btnPoint); Button btnTracking = (Button) findViewById(R.id.btnTracking); Button btnPosition=(Button)findViewById(R.id.btnPosition); - Set kiện phương thức sau : btnTracking.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub startActivity(new Intent(MainActivity.this, LocationV10.class)); } }); btnPoint.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub startActivity(new Intent(MainActivity.this, SearchOnePoint.class)); } }); btnStreet.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, SearchTwoPoint.class)); } }); Button search2011= (Button)findViewById(R.id.btnSearch2011); Trang 93 search2011.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent i = new Intent(MainActivity.this,Android1.class); startActivity(i); } }); - Thiết kế class SearchOnePoint phải kế thừa từ lớp MapActivity: o Khởi tạo hiển thị mặc định cho map: int lat = (int)(10.314919*1000000); int lng = (int)(107.050781*1000000); GeoPoint pt = new GeoPoint(lat,lng); mapView.getController().setZoom(10); mapView.getController().setCenter(pt); mapView.getController().animateTo(pt); o Phân tích địa chuổi thành địa đồ AddresstoGeoPoint addresstoPoint = new AddresstoGeoPoint(); JSONObject json=addresstoPoint.getLocationInfo(locationName); p =addresstoPoint getGeoPoint(json); o Thêm đánh dấu vào vị trí vào đồ MapOverlay mapOverlay = new MapOverlay(); List listOfOverlays = mapView.getOverlays(); listOfOverlays.clear(); listOfOverlays.add(mapOverlay); o Lớp MapOverlay vẽ đối tượng Overlay vào đồ super.draw(canvas, mapView, shadow); Point screnPts = new Point(); mapView.getProjection().toPixels(p, screnPts); Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.bubble); canvas.drawBitmap(bmp, screnPts.x, screnPts.y-34,null); Trang 94 return true; - Phân tích lớp SearchTwoPoint extend lớp MapActivity o Vẽ đường dựa ma trận điểm sau : GeoPoint startGP = new GeoPoint( (int) (Double.parseDouble(lngLat[1]) * 1E6), (int) (Double parseDouble(lngLat[0]) * 1E6)); geoPoint = startGP; myMapView.getOverlays().add(new DirectionPathOverlay(startGP, startGP)); // NAVIGATE THE PATH GeoPoint gp1; GeoPoint gp2 = startGP; for (int i = 1; i < pairs.length; i++) { lngLat = pairs[i].split(","); gp1 = gp2; // watch out! For GeoPoint, first:latitude, second:longitude gp2 = new GeoPoint((int) (Double.parseDouble(lngLat[1]) * 1E6), (int) (Double.parseDouble(lngLat[0]) * 1E6)); myMapView.getOverlays().add(new DirectionPathOverlay(gp1, gp2)); Log.d("xxx", "pair:" + pairs[i]); // END POINT myMapView.getOverlays().add(new DirectionPathOverlay(gp2, gp2)); calculator= CalculationByDistance(startGP,gp2); myMapView.getController().animateTo(startGP); - Thiết kế lớp GPSdemo o Lấy thông tin dịch vụ GPS sau : locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Trang 95 locationListener = new GPSLocationListener(); locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locationListener); o Chuyển đổi từ Position sang vị trí thật public String ConvertPointToLocation(GeoPoint point) { String address = ""; Geocoder geoCoder = new Geocoder( getBaseContext(), Locale.getDefault()); try { List addresses = geoCoder.getFromLocation( point.getLatitudeE6() / 1E6, point.getLongitudeE6() / 1E6, 1); if (addresses.size() > 0) { for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++) address += addresses.get(0).getAddressLine(index) + " "; } } catch (IOException e) { e.printStackTrace(); } return address; } - Thiết kế Lớp AddresstoGeoPoint sau : o Lấy liệu mảng chuổi JSON trả String[] getDirectionData(String srcPlace, String destPlace) { //AddresstoGeoPoint searchmap = new AddresstoGeoPoint(); JSONObject json1 =getLocationInfo(srcPlace); JSONObject json2=getLocationInfo(destPlace); GeoPoint geo1 =getGeoPoint(json1); GeoPoint geo2 =getGeoPoint(json2); Trang 96 String urlString = "http://maps.google.com/maps?f=d&hl=en&saddr=" + geo1.getLatitudeE6()/1E6+","+geo1.getLongitudeE6()/1E6 + "&daddr=" + geo2.getLatitudeE6()/1E6+","+geo2.getLongitudeE6()/1E6+ "&ie=UTF8&0&om=0&output=kml"; // tv.setText(urlString); Log.d("URL", urlString); Document doc = null; HttpURLConnection urlConnection = null; URL url = null; String pathConent = ""; try { url = new URL(urlString.toString()); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.connect(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(urlConnection.getInputStream()); } catch (Exception e) { } NodeList nl = doc.getElementsByTagName("LineString"); for (int s = 0; s < nl.getLength(); s++) { Node rootNode = nl.item(s); NodeList configItems = rootNode.getChildNodes(); for (int x = 0; x < configItems.getLength(); x++) { Node lineStringNode = configItems.item(x); NodeList path = lineStringNode.getChildNodes(); pathConent = path.item(0).getNodeValue(); } } String[] tempContent = pathConent.split(" "); // str= tempContent; return tempContent; // */ return null; } o Phân tích chuổi địa thành đối tượng JSON Trang 97 public JSONObject getLocationInfo(String address) { String compare = address.replace(" ","+"); String a ="http://maps.google.com/maps/api/geocode/json? address="+compare+",hochiminh,vn&sensor=false"; HttpGet httpGet = new HttpGet(a); HttpClient client = new DefaultHttpClient(); HttpResponse response; StringBuilder stringBuilder = new StringBuilder(); try { response = client.execute(httpGet); HttpEntity entity = response.getEntity(); InputStream stream = entity.getContent(); int b; while ((b = stream.read()) != -1) { stringBuilder.append((char) b); } } catch (ClientProtocolException e) { } catch (IOException e) { } s JSONObject jsonObject = new JSONObject(); try { jsonObject = new JSONObject(stringBuilder.toString()); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return jsonObject; } Trang 98 Chương 5: TỔNG KẾT 5.1 Về Mặt Lý Thuyết - Tìm hiểu đặc điểm điểm mạnh ứng dụng chạy điện thoại - android, bada Ứng dụng webservice vào điện thoại di động Tìm hiểu lập trình Bada, Android 5.2 Về Mặt Ứng Dụng - Hồn tất số yêu cầu sau : o Tìm kiếm vị trí dựa webservice sẳn có, truy xuất cập nhật thông tin dựa websevice o Sử dụng kết hợp tảng vào ứng dụng 5.3 Hướng Phát Triển - Đi sâu vào tìm hiểu webservice Ứng dụng có khả chạy đa tảng thiết bị di động Trang 99 TÀI LIỆU THAM KHẢO Tiếng Anh : Ben Morris and Manfred Bortenschlager,Jon Lansdell, Cheng Luo, Michelle Somerville “Introduction to bada” 2010 Sayed Y Hashimi and Satya Komatineni “Pro android” – 2009 Website http://www.zonums.com/gmaps/digipoint.php http://www.badaforums.net/forums/bada-development/ http://developer.decarta.com/docs/read/bada_api http://www.badadev.com/bada-sample-project-simple-greeting/ http://www.androidpeople.com/android-xml-parsing-tutorial-using-saxparser http://www.androidpeople.com/android-custom-dialog-example Trang 100 ... BIỂU VÀ SƠ ĐỒ Trang Chương 1: TÌM HIỂU HỆ ĐIỀU HÀNH BADA 1.1 Khái Quát Hệ Điều Hành Bada Pada hệ điều hành điện thoại di động Samsung phát triển Thông qua 10 điều Pada, bạn hình dung phần HĐH... trường nhóm phát triển tảng Pada cho biết HĐH xây dựng tảng Linux giống Android Google Trang 10 Vậy Pada hệ điều hành có tính cạnh tranh với sản phẩm khác không? Nhất Android, Symbian, LiMo, Window... điện trở hỗ trợ cảm ứng đa điểm Pada sử dụng hình điện dung điện trở chắn Samsung sớm phổ biến cơng nghệ - Cấu hình Khơng hiểu Samsung đặt cấu hình tối thiểu cho Pada làm hãng sản xuất Hệ điều