Issuu on Google+

Google Maps Android API v1 e v2 Globalcode e StillRocker


EU! • Ricardo da Silva Ogliari • Instrutor Globalcode • Sócio StillRocker


EU! • Artigos em Revistas • +- 180 publicações


Google Maps Android


Google Maps Android


Google Maps Android • É muito completa, mas tem tudo? • Não


Como funciona? โ€ข Busca a imagem em pedaรงos - Tiles...


Como funciona? • Para buscar estes pedaços precisamos de uma chave; • Primeira grande mudança em relação as versões da Maps API;


Obtendo a chave na V1 • Pegar o MD5 da chave de assinatura; • keytool -list -alias alias_name -keystore my-release-key.keystore; • Acessar o link https://developers.google.com/maps/docu mentation/android/v1/maps-api-signup • Aceitar os termos; • Colocar o MD5 no campo específico e gerar a chave.


Obtendo a chave na versão 2 • Pegar o SHA1 da chave de assinatura; • keytool -list -alias alias_name -keystore my-release-key.keystore; • Acessar o Google APIs Console • Especificar o uso do serviço Google Maps Android API • Gerar uma Android Key passando o SHA1 mais pacote: • 3A:...:81:com.example.studingmapsapi


Obtendo a chave na vers達o 2


Obtendo a chave na vers達o 2


Uso da chave na V1 • Utilização da MapView <?xml version="1.0" encoding="utf-8"?> <com.google.android.maps.MapView xmlns:android="namespace" android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:apiKey="Your Maps API Key goes here" />


Uso da chave na V1 • Criação de uma MapActivity que utiliza a MapView • Sobrescrever isRouteDisplayed public class HelloGoogleMaps extends MapActivity{ ... @Override protected boolean isRouteDisplayed() { return false; } }


Mudanรงas no AndroidManifest - V1 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.app.android.maps" android:versionCode="2" android:versionName="1.1" > <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/icon"> <uses-library android:name="com.google.android.maps"/> <activities> </application> </manifest>


Uso da chave na V2 â&#x20AC;˘ Meta-data diretamente no AndroidManifest.xml <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="api_key"/>


AndroidManifest.xml - V2 <?xml version="1.0" encoding="utf-8"?> <manifest ... package="seupacote" > <permission android:name="seupacote.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="seupacote.permission.MAPS_RECEIVE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" />


Mostrar o mapa V2 • Utilização da MapFragment • Fragment: fragment, parte, divisão


Mostrar o mapa V2 • Utilização da MapFragment


Mostrar o mapa V2 â&#x20AC;˘ Cria o layout: <?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" android:name="com.google.android.gms.maps.MapFragment"/>


POI (Point Of Interest) • Um mapa sem POI´s não tem apelo • Existem inúmeros exemplos – Museus – Restaurantes – Estádios – Hospitais – Alagamentos – Teatros


POI (Point Of Interest) - V1

public class UseItemOv extends ItemizedOverlay { ArrayList<OverlayItem> pois = new ArrayList<OverlayItem>(); public HelloItemizedOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } protected OverlayItem createItem(int i) { return pois.get(i); } public void addOverlay(OverlayItem overlay) { pois.add(overlay); populate(); } public int size() { return pois.size(); } protected boolean onTap(int index) {} }


POI (Point Of Interest) - V1 Drawable drawable = this.getResources().getDrawable(R.drawable.flag); UseItemOv itemizedoverlay = new UseItemOv(drawable, this); GeoPoint point = new GeoPoint(-27596667, -48549167)); OverlayItem overlayitem = new OverlayItem(point, "Florian贸polis", "A capital de Santa Catarina"); itemizedoverlay.addOverlay(overlayitem); List<Overlay> mapOverlays = mapView.getOverlays(); mapOverlays.add(itemizedoverlay);


POI (Point Of Interest) - V2 â&#x20AC;˘ Markers GoogleMap mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); mMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Hello world")); Marker melbourne = mMap.addMarker(new MarkerOptions() .position(new LatLng(-37.81319, 144.96298)) .title("Melbourne") .snippet("Population: 4,137,400") .icon(BitmapDescriptorFactory.fromResource(R.drawable.img)));


Tipos de Mapa - V1 • Duas opções: mapView = (MapView) findViewById(R.id.mapview); mapView.setStreetView(true); mapView.setSatellite(true);


Tipos de Mapa - V2 • Mais opções: GoogleMap mMap; mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); mMap.setMapType(GoogleMap.MAP_TYPE_NONE); mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);


Tipos de Mapa - V2 • Opções novas: híbrido e terreno.


Outros controles - V1

mapView.setBuiltInZoomControls(true); MapController controller = mapView.getController(); controller.animateTo(new GeoPoint(lat, long)); controller.setCenter(new GeoPoint(lat, long)); controller.setZoom(15); controller.zoomIn(); controller.zoomOut();


Outros controles - V2 <fragment xmlns:map="http://schemas.android.com/apk/res-auto" class="com.google.android.gms.maps.SupportMapFragment" map:cameraBearing="90" //muda orientação para leste map:cameraTargetLat="-33.796923" map:cameraTargetLng="150.922433" map:cameraTilt="30" //angulo da visão map:cameraZoom="13" map:mapType="normal" map:uiCompass="false" map:uiRotateGestures="true" map:uiScrollGestures="false" map:uiTiltGestures="true" map:uiZoomControls="false" map:uiZoomGestures="true"/>


Outros controles - V2 GoogleMapOptions options = new GoogleMapOptions(); options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);


B么nus da V2


+ Bônus - V2 • Múltiplas linhas PolylineOptions rectOptions = new PolylineOptions() .add(new LatLng(37.35, -122.0)) .add(new LatLng(37.45, -122.0)) .add(new LatLng(37.45, -122.2)) .add(new LatLng(37.35, -122.2)) .add(new LatLng(37.35, -122.0)); Polyline polyline = myMap.addPolyline(rectOptions);


+ Bônus - V2 • Polígonos Polygon polygon = map.addPolygon(new PolygonOptions() .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0)) .strokeColor(Color.RED) .fillColor(Color.BLUE)); Polygon polygon = map.addPolygon(new PolygonOptions() .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5)) .strokeColor(Color.RED) .fillColor(Color.BLUE));


+ Bônus - V2 • Círculos CircleOptions circleOptions = new CircleOptions() .center(point) //set center .radius(500) //set radius in meters .fillColor(0x40ff0000) //semi-transparent .strokeColor(Color.BLUE) .strokeWidth(5); myCircle = myMap.addCircle(circleOptions);


+ Bônus - V2 • Círculos


OBRIGADO!!! PERGUNTAS • • • • •

rogliariping@gmail.com ricardo@stillrocker.com www.globalcode.com.br www.stillrocker.com @mobilidadetudo


Google Maps Android API V1 e V2