2015-07-27 17 views
15

Ich bin neu in der Entwicklung von Android mit dem Google Maps API. Ich war in der Lage, eine Karte einzurichten und die grundlegende Funktionalität zu testen, aber ich habe Probleme, die in der Dokumentation gezeigte Logik in meinen eigenen Code zu implementieren.Wie kann ich die Traffic-Ebene von Google Maps einbeziehen?

Ich habe recherchiert und gefunden durch die Google-Dokumentation Sie die Karte überprüfen müssen, wenn Verkehrsdaten durch die Verwendung verfügbar:

public final boolean isTrafficEnabled() 

und ruft dann die Methode:

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

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

Ich bin Ich bin mir nicht sicher, wie ich das umsetzen soll, da ich neu in der Entwicklung bin. Ich fand in einer anderen Dokumentation Quelle folgendes Beispiel:

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); 

Dennoch kann ich nicht scheinen, um herauszufinden, wie man es richtig zu machen. Muss ich das Manifest-XML in irgendeiner Weise bearbeiten oder ist dies alles aus mainActivity geschehen? Hier ist mein voller Aktivitätscode:

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); 
} 

}

Die Karte lädt, aber es zeigt nicht jede Art von Verkehr. Jede und jede Hilfe würde sehr geschätzt werden; Vielen Dank im Voraus.

+0

Können Sie es mit einem fest codierten Ort wie NYC versuchen? Google Maps hat keine Verkehrsdaten für alle Länder! –

+0

Ja, Sir; Ich kann die Karte ohne ein Problem mit den Koordinaten einer Stadt in den USA laden. Ich hart in meine XML-Manifest-Datei codiert; soll ich das stattdessen in der Mainactivity erklären? –

+0

Sie müssen Ihren Standort ermitteln, um Verkehrsdaten für diesen bestimmten Standort anzuzeigen. Bitte überprüfe meine Antwort. –

Antwort

15

zu können Verkehrsdaten zeigen, sollten Sie die folgenden Punkte beachten,

  1. Stellen Sie sicher, Ihr aktueller Standort wird in Google Map gefunden

  2. Vergewissern Sie sich, dass auf Ihrer Google Map Verkehrsdaten für Ihren aktuellen Standort verfügbar sind.

Sie können auch den folgenden Code versuchen. Es initialisiert die Karte ordnungsgemäß und setzt anschließend Verkehrsdaten, nachdem Sie Ihren aktuellen Standort ermittelt haben.

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

Vielen Dank! Das hat für mich funktioniert. –

+0

Dieser Code wurde versucht, es wird jedoch Verkehrsebene auf der gesamten Karte hinzugefügt, anstatt sie nur auf der Route hinzuzufügen. – Seenu69

5

Versuchen Sie den folgenden Code in Ihrer Tätigkeit, bei der Sie die Karte laden möchten:

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

Danke für die Empfehlung! Ich habe das versucht, aber es sagt mir immer wieder, dass "try" ein unerwartetes Token ist und initializeMap(); ist nicht identifiziert. Sollte ich try {in eine Methode setzen und eine Konstante für initializeMap erstellen? Ich entschuldige mich, wenn ich ahnungslos klänge; Ich verstehe immer noch die Logik. –

+0

Ich habe meine Antwort bearbeitet, bitte überprüfen Sie – Aakash

+0

Vielen Dank noch einmal für Ihre Hilfe; aber bitte entschuldige meine Unwissenheit in dieser Sache. Ich habe Ihre Änderungen überprüft und in meinen Code implementiert, jedoch bekomme ich weiterhin "Symbol kann nicht aufgelöst werden" in 'googleMap' und 'locationManager'; Was kann ich tun, um fortzufahren? Zusätzlich musste ich eine Methode für initializeMap erstellen, um diesen Fehler zu entfernen; ist das auch falsch? –

Verwandte Themen