You are on page 1of 21

TRNG AI HOC BACH KHOA HA NI VIN CNG NGH THNG TIN VA TRUYN THNG

BAO CAO BAI TP LN


LP TRNH ANDROID
TI 1:

Ch dn ngi dng theo v tr

Gio vin hng dn: Sinh vin thc hin:

Nguyn Hng Quang

Nguyn Khnh Hng Bi Vn Hi Trn Vn Ton Ngc Tn

20081279 20080842 20082715 20082312

TTM-K53 HT1-K53 TTM-K53 TTM-K53

Ha Ni 11/2012

MC LC I. 1. 2. C s l thuyt .................................................................................................. 3 Gii thiu chung ............................................................................................. 3 Cc tham s truy cp Google Maps ................................................................ 3

II. M t cc chc nng chnh ca chng trnh................................................ 4 1. 2. 3. III. 1. 2. 3. 4. 5. Ni dung cng vic ......................................................................................... 4 Cc chc nng ................................................................................................ 5 Cu trc chng trnh ..................................................................................... 6 Ci t chng trnh .................................................................................... 6 Hin th MapView .......................................................................................... 6 Hin th ngi dng trn bn s ................................................................ 7 Cnh bo ngi dng trc mt a im xc nh ....................................... 7 Dn ng ngi dng ................................................................................... 8 Hin th thng tin thi tit ............................................................................ 13

IV. Minh ha kt qu ............................................................................................ 17 V. KT LUN ..................................................................................................... 20

TI LIU THAM KHO...................................................................................... 21

I. C s l thuyt 1. Gii thiu chung Trong th gii web ngy nay, cc gii php bn l mt thnh phn khng th thiu. Chng ta s dng chng thy v tr ca mi vt, tm v tr ca mt a ch, ly v thng tin dn ng, v lm nhiu th khc. Hu ht thng tin c mt v tr, v nu vt no c mt v tr th n c th hin th trn mt bn . C mt s cng ty cung cp cc gii php v bn nh Yahoo! Maps v Bing Maps, nhng ph bin nht vn l Google maps. Thc t theo trang programmableweb.com, google maps l API ph bin nht trn internet. Theo thng k ca trang ny thng 5/2010, 43% l s dng Google Maps API.

s dng c cc dch v v API ca google maps bn cn phi ng k vi dch v Google Maps v ng vi cc iu khon dch v p dng trc khi bn ly d liu t Google Maps. 2. Cc tham s truy cp Google Maps 2.1. Geocoding

Geocoding l qu trnh chuyn i a ch ging nh Bach Khoa Ha Noi ) thnh ta a l (nh latitude "21.004409", longitude "105.845896"), m chng ta c th s dng dnh du hay nh v

Geocoding Request

http://maps.googleapis.com/maps/api/geocode/output?parameters

Trong output c th l cc gi tr sau: json file ch dn output trong JavaScript Object Notation (JSON) xml: file xml Cc thng s yu cu o address: a ch mun thnh geocode hoc latlng: gi tr latitude/longitude hoc components: thnh phn lc m chng ta mun c geocode o sensor: c hoc khng yu cu m ha v tr a l t mt thit b vi cm bin v tr. Gi tr true hoc false o ... Geocode responses Xml tr v thng tin a ch nhp

http://maps.googleapis.com/maps/api/geocode/xml?address=Bach+Khoa+Ha+Noi &sensor=false

Trong : address = a im cn bit thng tin II. M t cc chc nng chnh ca chng trnh 1. Ni dung cng vic Ch dn ngi dng theo v tr Pht trin mt ng dng chy trn thit b u cui di ng thc hin cc chc nng sau: o Hin th v tr ngi dng trn bn s (chng hn Google Map) c m ra trn mn hnh thit b di ng o Cnh bo ngi dng khi h ng gn (phm vi bn knh 200m) mt a im xc nh trc; o Dn ng ngi dng vi cc bn tin ch dn bng vn bn;
4

o Dn ng ngi dng bng cc li nhc m thanh; o Hin th thng tin thi tit ti a im mun n 2. Cc chc nng Hin th Google Maps Hin th v tr ngi dng trn Google Maps M t: Khi thit b nhn c tn hiu GPS, chng trnh s t ng hin th v tr ca thit b trn bn . Cnh bo ngi dng khi h ng gn (phm vi bn knh 200m) mt a im xc nh M t: Ban u ngi dng click vo mt v tr bt k trn bn (v tr ch cn n). Sau nhn vo menu a im lu li v tr ch. Khi thit b nm trong bn knh v tr ch 200m, chng trnh s hin th thng tin nhc nh ngi dng. Dn ng ngi dng vi cc bn tin ch dn bng vn bn M t: Ngi dng click vo menu Tm ng, nhp a ch ngun v a ch ch. Sau click button OK, chng trnh s hin th ng i gia 2 v tr v vn bn ch dn ngi dng. Dn ng ngi dng bng cc li nhc m thanh. M t: Ban u ngi dng click vo mt v tr bt k trn bn (v tr ch cn n). Sau nhn vo menu a im lu li v tr ch. Sau khi click vo menu Voice Routing thit b s hin th li nhc bng vn bn v bng m thanh cho ngi dng. Hin th thng tin thi tit ti a im mun n M t: Khi ngi dng click vo mt v tr bt k trn bn , sau nhn menu Thi tit chng trnh s hin th thng tin thi tit ti ni mun n. Thng tin gm hnh nh, a im, thi gian hin ti, nhit v thi tit c th. Ngoi ra cn c thm chc nng xem thng tin thi tit c th khi ngi dng truy cp vo a ch cung cp thng qua button More.

3. Cu trc chng trnh Chng trnh chy trn h iu hnh Android phin bn Android Google API 4.1.2 Class MapsActivity: Class chnh vi cc chc nng thc hin cc nhim v: to cc chc nng cho chng trnh, cp nht v tr, to c s d liu nu cha tn ti, .. Class InfoRouting: ly thng tin nh tuyn t file xml: danh danh v tr, v ch dn Class WeatherForecast: ly thng tin thi tit t file xml Class WeatherHelper: to, truy vn c s d liu v thi tit. Ci t chng trnh 1. Hin th MapView hin th c Google Maps trong ng dng trc ht cn phi ng k 1 key min ph t Google Maps API , ri s dng mapview hin th . To file xml c cha MapView
<com.google.android.maps.MapView android:id="@+id/mvMain" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="02qRkLmrjmMkRpapZNpr0E_FzOesmyBtaBhdu8A" android:enabled="true" android:clickable="true" />

III.

To Activity Activity mun hin th c Google Maps cn phi extends MapActivity v override phng thc isRouteDisplayed().

2. Hin th ngi dng trn bn s hin th v tr ngi s dng trn bn , class Activity chnh phi implements interface LocationListener v ci t mt s phng thc khc : onLocationChanged(Location l) : Phng thc ny c gi mi khi v tr ca ngi s dng thay i (ta m GPS nhn c thay i). phng thc ny s xc nh kinh , v ca v tr hin ti v v li hnh nh (OverlayItem) onProviderDisabled(String provider) onProviderEnabled(String provider) onStatusChanged(String provider, int status, Bundle extras) xc nh kinh , v hin ti s dng :
public void onLocationChanged(Location location) { pointGPS = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6)); }

hin th v tr ta thm hnh nh v tr trn Google Maps chng ta s thm item vo overlay ca Maps. Trc to mt lp mi MyOverlay k tha Overlay Trong phng thc draw ta thm dng lnh sau:
Point screenPts = new Point(); mapView.getProjection().toPixels(pointGPS, screenPts); //---add the marker--Bitmap bmpOri = BitmapFactory.decodeResource( getResources(), R.drawable.notify_icon); canvas.drawBitmap(bmpOri, screenPts.x-16, screenPts.y-32, null);

3. Cnh bo ngi dng trc mt a im xc nh cnh bo cho ngi dng th trc tin phi cp nht v tr ngi dng
public void onLocationChanged(Location location) { int lat = (int) (location.getLatitude() * 1E6); int lng = (int) (location.getLongitude() * 1E6); GeoPoint point = new GeoPoint(lat, lng); createMarker(); mapController.animateTo(point); mapController.setCenter(point); 7

Ly a ch im cn n v tnh khong cch vi v tr hin ti v tnh. Khong cch 2 im cho ti khi cch v tr cn ti 200m th a ra thng bo
if(pointGoal != null) { float[] distance = new float[2]; double startLat = pointGPS.getLatitudeE6() / 1.0E6; double startLon = pointGPS.getLongitudeE6()/ 1.0E6; double endLat = pointGoal.getLatitudeE6() / 1.0E6; double endLon = pointGoal.getLongitudeE6() / 1.0E6; Location.distanceBetween(startLat, startLon, endLat, endLon, distance); if(distance[0] <= 200.0) { Toast.makeText(MapsActivity.this, "Bn cch ch " + (int)distance[0] + " mt.", Toast.LENGTH_LONG).show(); } }

thc hin vic cnh bo ngi dng, trc tn cn la chn 1 v tr s n, v tr c lu vo bin pointGoal 4. Dn ng ngi dng

T v tr ca im ngun c kinh , v l x1,y1 , cn xc nh ch dn ti im ch c kinh , v l x2, y2 . xc nh ta phn tch file xml ti v t url :
http://maps.googleapis.com/maps/api/directions/xml?origin=x1,y1&de stination=x2,y2&sensor=false&units=metric"

Trong : origin = a ch ngun. . S dng tham s ny khi yu cu dn ng li xe. Khi pht trin trn nn tng di ng, s dng MyLocatiion (ta GPS) ta thit lp saddr trng i vi Android, i vi iPhone, thit lp saddr l Current%20Location. destination = a ch ch. S dng khi yu cu thng tin dn ng. language = ngn ng hin th trong file xml
8

Cu trc ca file nh sau :


<DirectionsResponse> <status></status> <route> <summary></summary> <leg> <step> <travel_mode></travel_mode> <start_location></start_location> <end_location></end_location> <polyline><points></points></polyline> <duration><value></value><text></text></duration> <html_instructions></html_instructions> <distance><value></value><text></text></distance> </step> <step></step> <duration></duration> <distance></distance> <start_location></start_location> <end_location></endlocation> <start_address></start_address> <end_address></endress> .. </route> </DirectionsResponse>

File xml trn cha cc thng tin dn ng t 2 im cho trc . Trong cc node <step> cha cc ch dn c th v a im tip theo cn ti. Node <duration> cha thi gian cn i , tnh theo vn tc trung bnh ca cc phng tin. Node <distance> cha khong cch tnh theo ng b cn phi di chuyn Node <start_location> v <end_location> cha kinh , v ca a im bt u v a im kt thc . Node <start_address> v <end_address> l a ch ca 2 a im . Trong chng trnh c 2 loi ch dn cho ngi dng : a. Ch ng bng cc ch dn vn bn : Mc tiu Ly ta im bt u v ch n ca ngi dng. Sau v mt LinePath gia 2 im.Hng dn chi tit cch i bng vn bn cho ngi dng.

V ng Xy dng lp InfoRouting c file xml ly c cc thng tin v cc Node ca l trnh.


class InfoRouting{ //cha cc node ca l trnh private ArrayList<String> listInstructions = new ArrayList<String>(); private void getDirections(){ nl3 = doc.getElementsByTagName("html_instructions"); for (int i = 0; i < nl3.getLength(); i++) { Node node3 = nl3.item(i); String strInstru = Html.fromHtml(node3.getTextContent()).toString(); listInstructions.add(strInstru); } } }

Sau khi c cc Node l trnh gi lp MyOverlays v.


public class MyOverlay extends Overlay { @Override public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) { super.draw(canvas, mv, shadow); . . . . . . . . . . . . . . . . . . . . . . }

10

public void drawPath(MapView mv, Canvas canvas) { . . . } . . . . . . . . . . }

hin th ch dn l trnh cho ngi dng Xy dng lp showInstructionsDialog():lp ny c cc thng tin ti cc Node trong lp Inforouting hin th ln mn hnh.
public void showInstructionsDialog() { final View view = getLayoutInflater().inflate(R.layout.instructions, null); TextView textView = (TextView)view.findViewById(R.id.viewInstru); ---------------}

b. Ch ng bng li nhc m thanh Gi tr cn ly nm trong node <html_instructions>. Gi tr ny c nh dng


html ch r hng i ti a im k tip . V d :
i v hng <b>Ty</b> ln <b>T Quang Bu</b> v pha <b>Ni b Bch Khoa</b>

ly c d liu ny trc ht khi to kt ni Http n url pha trn v ly d liu v InputStream :


HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(url); response = httpClient.execute(httpPost, localContext); InputStream in = response.getEntity().getContent();

Sau dng DocumentBuilder phn tch :


DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(in);

Ly v ni dung node <html_instructions> u tin .


NodeList nl; nl = doc.getElementsByTagName("html_instructions"); Node node = nl.item(0); nextDirection = node.getTextContent();

11

Loi b cc tag html trong chui ly c :


nextDirection = Html.fromHtml(nextDirection).toString();

Chui k t va ly s c s dng pht ra m thanh ch dn ng . Pht m k t ch dn S dng package : android.speech.tts.TextToSpeech. s dng gi ny trc ht class phi implements giao din OnInitListener v ci t phng thc onInit(int status)
Khai bo bin :
private TextToSpeech tts; v khi to trong hm onCreate tts = new TextToSpeech(this, this);

Phng thc onInit kim tra trng thi TextToSpeech v thit lp ngn ng (US) , nu c li th ghi vo file log.
public void onInit(int status) { if(status == TextToSpeech.SUCCESS) { int result = tts.setLanguage(Locale.US); if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e("TTS","This Languge is not supported"); } } }

Khi ngi dng chn pht ch dn bng m thanh (t menu) chui k t ch dn s c ly v v pht thnh ting :
nextMove = getNextDirection(src_lat, src_long, dest_lat, dest_long); tts.speak(nextMove, TextToSpeech.QUEUE_FLUSH, null);

m bo i tng TextToSpeech c tt phng thc onDestroy() :


protected void onDestroy() { if(tts != null) { tts.stop(); tts.shutdown();

12

} super.onDestroy(); }

5. Hin th thng tin thi tit S dng thng tin thi tit do wunderground.com cung cp. T v tr a im cn bit thng tin thi tit c kinh , v x, y. xc nh ta phn tch file xml ti v t URL:

http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query= x,y

Trong : query = x, y: kinh , v a ch cn bit thng tin thi tit Cu trc chnh ca file nh sau:
<current_observation> <display_location> <full> </full> </display_location> .... <local_time> </local_time> <weather> </weather> <temp_c></temp_c> .... <forecast_url> </forecast_url> .... </current_observation>

Cu trc trn m t cc thng tin cn thit hin th Trong node <full> </full> cha thng tin v thnh ph c v tr cho <local_time> cha thng tin v thi gian hin ti <weather> cha thng tin thi tit cn hin th <temp_c> nhit theo C <forecast_url> ng dn cha thng tin thi tit chi tit

13

Class WeatherForecast nhn thng s khi to l c s d liu v thi tit v v tr kinh v a im cn hin th. ly c d liu trc tin ta phi kt ni vi url cho:
HttpGet getMethod = new HttpGet(url); ResponseHandler<String> responseHandle = new BasicResponseHandler(); String responseBody = client.execute(getMethod, responseHandle); buildForecast(responseBody);

Phng thc buildForcast(String raw) nhn u vo l String responseBody s c thng tin thi tit t file xml ti v.
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(raw)));

Thng tin v thnh ph c lu tr trong thuc tnh city


Element disLocation = (Element) doc.getElementsByTagName("display_location").item(0); Element city = (Element) disLocation.getElementsByTagName("full").item(0); this.setCity(city.getFirstChild().getNodeValue());

Thng tin v thi gian c lu tr trong thuc tnh time


Element localTime = (Element) doc.getElementsByTagName("local_time").item(0); String strTime = localTime.getFirstChild().getNodeValue(); strTime = strTime.substring(0, strTime.indexOf(",")); this.setTime(strTime);

Thng tin v thi tit c lu tr trong thuc tnh weather


Element weather = (Element) doc.getElementsByTagName("weather").item(0); String strWeather = weather.getFirstChild().getNodeValue(); Cursor c = helper.getType(strWeather); if(c.getCount() > 0) { c.moveToFirst(); this.setWeather("Thi tit: " + helper.getTypeVN(c)); this.setIconUrl(helper.getIcon(c));
14

} else { this.setWeather("Thi tit: " + strWeather); this.setIconUrl("unknown"); }

y thng tin thi tit l ting anh nn s c hin th ting vit thng qua tham chiu t c s d liu c sn. Icon thi tit cng c truy vn t CSDL thng qua bin thi tit.

Thng tin v nhit

Element temperature = (Element) doc.getElementsByTagName("temp_c").item(0); this.setTemperature("Nhit : " + temperature.getFirstChild().getNodeValue() + " C");

15

Class WeatherHelper c chc nng to c s d liu v cc phng thc truy vn ti CSDL To bng types cha cc thng tin: xu thi tit bng ting anh, ting vit v icon tng ng
db.execSQL("CREATE TABLE if not exists types" + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, english TEXT, vietnam TEXT, icon TEXT);");

Truy vn chui ting vit, icon tng ng vi chui ting anh

public Cursor getType(String strEnglish) { return ( db.rawQuery("SELECT vietnam, icon FROM types WHERE english = \"" + strEnglish + "\"", null) ); }

Ly chui ting vit t truy vn

public String getTypeVN(Cursor c) { return (c.getString(0)); } Ly chui icon t truy vn public String getIcon(Cursor c) { return (c.getString(1)); }

16

IV.

Minh ha kt qu Hin th v tr ngi dng

Cnh bo ngi dng cnh bo ngi dng trc tin phi chn v tr cn n trn bn : Chn 1 v tr v click vo menu im n lu v tr. im n l H Tin HBKHN (21.004364,105.843378), v tr hin ti trn ng T Quang Bu HBKHN (21.005105,105.843077):

17

Dn ng ngi dng bng vn bn Khi click vo menu Tm ng s hin ra 2 la chn cho ngi dng. Khi click button OK chng trnh s hin th thng tin ch dn o Chn 2 v tr trn bn : Chng trnh s hin th thng tin dn ng gia 2 a im c chn trn bn (Chng trnh cho php ngi dng la chn ti 2 v tr, khi chn mi v tr ngi dng click vo menu im n lu li. o Nhp 2 a im: Ngi dng nhp im u vo im cui

Dn ng ngi dng vo m thanh dn ng ngi dng trc tin phi chn v tr cn n trn bn : Chn 1 v tr v click vo menu im n lu v tr. Sau click vo menu Voice Routing nghe thng tin ch dn Hin th thng tin thi tit Khi click vo menu Thi tit s c 3 la chn cho ngi dng. Khi click vo button OK chng trnh s hin th thng tin thi tit ti v tr chn o V tr ca bn: Chng trnh s hin th thng tin thi tit ti v tr ngi dng ang ng o V tr chn: Chng trnh s hin th thng tin thi tit ti v tr ngi dng chn trn bn o Nhp a im: Chng trnh s hin th thng tin thi tit ti v tr ngi dng nhp vo
18

Khi thng tin thi tit hin th, c 2 la chn cho ngi dng: Button Close s ng ca s hin th; Button More cho php truy nhp ti trang web cha thng tin thi tit chi tit v a im la chn.

19

V.

KT LUN

Thng qua vic nghin cu v thc hin bi tp ln chng em thu c nhiu kin thc thc t, ng thi b sung thm nhng kinh nghim qu bu cho cng vic sau ny. Do thi gian c hn nn bo co khng th trnh khi nhng sai st, rt mong c thy gp b sung gip chng em hon chnh ti ny.

20

TI LIU THAM KHO

1. Slide bi ging ca thy Nguyn Hng Quang 2. http://vietshare.vn/500/71/Android-Google-Maps-Tutorial--Phan-3.aspx 3. http://mobiforge.com/developing/story/using-google-maps-android 4. http://developer.android.com/reference/packages.html 5. https://www.box.net/shared/lc35mai44k73c8grvi1l

n.khanhhung@gmail.com

21

You might also like