2015-07-27 8 views
15

Sono nuovo nello sviluppo di Android utilizzando l'API di Google Maps. Sono stato in grado di impostare una mappa e testare le funzionalità di base, ma ho difficoltà ad implementare la logica mostrata nella documentazione nel mio codice.Come posso includere il livello di traffico di google maps?

ho ricercato e trovato attraverso la documentazione di Google è necessario avere il controllo mappa se i dati sul traffico sono disponibili tramite:

public final boolean isTrafficEnabled() 

e quindi chiamando il metodo:

public final boolean isTrafficEnabled() { 
    return mMap.isTrafficEnabled(); 

} 
public final void setTrafficEnabled(boolean enabled) { 
    mMap.setTrafficEnabled(enabled); 
} 

Sono Non sono sicuro di come implementarlo, visto che sono completamente nuovo nello sviluppo. Ho trovato in un'altra fonte di documentazione il seguente esempio:

var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

var trafficLayer = new google.maps.TrafficLayer(); 
trafficLayer.setMap(map); 

}

google.maps.event.addDomListener(window, 'load', initialize); 

Eppure non riesco a capire come farlo correttamente. Devo modificare l'XML manifest in qualsiasi modo o è tutto fatto da mainActivity? Ecco il mio codice piena attività:

package example.testdevice; 

import android.app.Dialog; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 


public class MainActivity extends FragmentActivity { 

private static final int GPS_ERRORDIALOG_REQUEST = 9001; 
GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (servicesOK()) {               //checks if APK is available; if it is, display Map 
     setContentView(R.layout.activity_map); 

     if (initMap()){ 
      Toast.makeText(this, "Ready to Map", Toast.LENGTH_SHORT).show(); 
     } 
    else { 
      Toast.makeText(this, "Map not available!", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

public boolean servicesOK() { 
    int isAvailable = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); //pass this as context 

    if (isAvailable == ConnectionResult.SUCCESS) { 
     return true; 
    } 
    else if (GooglePlayServicesUtil.isUserRecoverableError(isAvailable)) { 
     Dialog dialog = GooglePlayServicesUtil.getErrorDialog(isAvailable, this, GPS_ERRORDIALOG_REQUEST); //error code, activity, request code 
     dialog.show(); 
    } 
    else { 
     Toast.makeText(this, "Can't connect to Google Play Services", Toast.LENGTH_SHORT).show(); 
    } 
    return false; 
    } 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

private boolean initMap() { 
    if (mMap == null) { 
     SupportMapFragment mapFrag = 
       (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); // reference to support map fragment 
     mMap = mapFrag.getMap(); 
    } 
    return (mMap != null); 
} 

public final boolean isTrafficEnabled() { 
    return mMap.isTrafficEnabled(); 

} 
public final void setTrafficEnabled(boolean enabled) { 
    mMap.setTrafficEnabled(enabled); 
} 

}

La mappa carichi, ma non mostra alcun tipo di traffico. Ogni tipo di aiuto sarà enormemente apprezzato; Grazie in anticipo.

+0

Puoi provare con una posizione codificata come NYC? Google Maps non ha dati sul traffico per tutti i paesi! –

+0

Sì signore; Sono in grado di caricare la mappa senza problemi utilizzando le coordinate di una città negli Stati Uniti. I hard coded nel mio file manifest XML; dovrei dichiararlo invece nella mainactivity? –

+0

È necessario rilevare la posizione per la visualizzazione dei dati sul traffico per quella particolare posizione. Per favore controlla la mia risposta. –

risposta

15

Per essere in grado di mostrare i dati di traffico si dovrebbe prendere in considerazione i seguenti aspetti,

  1. Assicurarsi la tua posizione corrente viene rilevata in Google Map

  2. Assicurati che la tua mappa di Google disponga di dati sul traffico disponibili per la tua posizione corrente.

Si può anche provare il seguente codice. Inizializza correttamente la mappa quindi imposta i dati sul traffico dopo aver individuato la posizione corrente.

private void setUpMapIfNeeded() { 
      // Do a null check to confirm that we have not already instantiated the map. 
      if (mMap == null) { 
       // Try to obtain the map from the SupportMapFragment. 
       mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
         .getMap(); 
       mMap.setMyLocationEnabled(true); 
       // Check if we were successful in obtaining the map. 
       if (mMap != null) { 


       mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { 

       @Override 
       public void onMyLocationChange(Location arg0) { 
       // TODO Auto-generated method stub 

       mMap.addMarker(new MarkerOptions().position(new LatLng(arg0.getLatitude(), arg0.getLongitude())).title("It's Me!")); 

       //load the traffic now 
        googleMap.setTrafficEnabled(true); 
       } 
       }); 

       } 
      } 
     } 
+0

Grazie! questo ha funzionato per me. –

+0

Ho provato questo codice ma aggiunge strato di traffico su tutta la mappa invece di aggiungerlo solo sulla rotta. – Seenu69

5

provare il seguente codice nel tuo attività in cui si desidera caricare la mappa:

private GoogleMap googleMap; 
protected LocationManager locationManager; 
    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 


    try { 
       // Loading map 
       initilizeMap(); 

       // Changing map type 
       googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
       // googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
       // googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
       // googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 
       // googleMap.setMapType(GoogleMap.MAP_TYPE_NONE); 

       // Showing/hiding your current location 
       googleMap.setMyLocationEnabled(true); 
       googleMap.setTrafficEnabled(true); 
       // Enable/Disable zooming controls 
       googleMap.getUiSettings().setZoomControlsEnabled(true); 

       // Enable/Disable my location button 
       googleMap.getUiSettings().setMyLocationButtonEnabled(true); 

       // Enable/Disable Compass icon 
       googleMap.getUiSettings().setCompassEnabled(true); 

       // Enable/Disable Rotate gesture 
       googleMap.getUiSettings().setRotateGesturesEnabled(true); 

       // Enable/Disable zooming functionality 
       googleMap.getUiSettings().setZoomGesturesEnabled(true); 
       locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 


      } catch (Exception e) { 
       e.printStackTrace(); 

      } 
} 
+0

Grazie per la raccomandazione! Ho provato a farlo ma continua a dirmi che 'try' è un token imprevisto e initializeMap(); non è identificato. Devo inserire {in un metodo e creare una costante per initializeMap? Mi scuso se suono senza tracce; Sto ancora ricevendo il controllo di capire la logica. –

+0

Ho modificato la mia risposta, per favore controlla – Aakash

+0

Grazie ancora per il tuo aiuto; ma per favore scusa la mia ignoranza in merito. Ho controllato le modifiche e l'ho implementato nuovamente nel mio codice, tuttavia continuo a ricevere "impossibile risolvere il simbolo" su "googleMap" e "locationManager"; cosa posso fare per continuare? Inoltre, ho dovuto creare un metodo per initializeMap per far sì che quell'errore scomparisse; è anche sbagliato? –