2015-07-27 13 views
15

Jestem nowy w rozwoju w Androidzie za pomocą Google Maps API. Mogłem skonfigurować mapę i przetestować podstawową funkcjonalność, ale mam problemy z implementacją logiki pokazanej w dokumentacji do mojego własnego kodu.Jak mogę uwzględnić warstwę ruchu w mapach google?

mam zbadane i znaleźć poprzez dokumentacji firmy google trzeba mieć kontrolę Mapa Jeżeli dane drogowe dostępne są za pomocą:

public final boolean isTrafficEnabled() 

a następnie wywołanie metody:

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

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

jestem nie wiem dokładnie, jak to zaimplementować, ponieważ jestem zupełnie nowy w rozwoju. Znalazłem się w innym źródle dokumentacji następujący przykład:

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

Jednak nie wydaje się dowiedzieć, jak to zrobić poprawnie. Czy muszę edytować plik XML w jakikolwiek sposób, czy to wszystko jest zrobione z głównej akcji? Oto mój pełny kod działalność:

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

}

Do mapa ładuje, ale nie wykazują jakiegokolwiek ruchu. Każda pomoc będzie bardzo doceniona; z góry dziękuję.

+0

Czy możesz wypróbować w mocno zakodowanym miejscu, takim jak Nowy Jork? Mapy Google nie mają danych o ruchu dla wszystkich krajów! –

+0

Tak, proszę pana; Jestem w stanie wczytać mapę bez problemu, korzystając ze współrzędnych miasta w USA. Ciężko zakodowałem do mojego pliku manifestu XML; czy powinienem raczej ogłosić to w głównej mierze? –

+0

Musisz wykryć swoją lokalizację, aby wyświetlić dane o ruchu dla tej konkretnej lokalizacji. Sprawdź moją odpowiedź. –

Odpowiedz

15

aby móc pokazać dane o ruchu należy wziąć pod uwagę następujące kwestie,

  1. Upewnij Twoja obecna lokalizacja jest wykrywana w Google Map

  2. Upewnij się, że Twoja mapa Google udostępnia dane o ruchu dla Twojej bieżącej lokalizacji.

Możesz również wypróbować poniższy kod. Odpowiednio inicjuje mapę, a następnie ustawia dane o ruchu drogowym po wykryciu bieżącej lokalizacji.

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

Dziękujemy! to działało dla mnie. –

+0

Wypróbowałem ten kod, ale dodałem warstwę ruchu po mapie zamiast dodawać ją tylko na trasie. – Seenu69

5

Wypróbuj poniższy kod w swojej działalności, w którym chcesz, aby załadować mapę:

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

Dzięki za rekomendację! Próbowałem tego, ale ciągle mówi mi, że "spróbuj" to nieoczekiwany token i initializeMap(); jest niezidentyfikowany. Czy powinienem umieścić {w metodzie i utworzyć stałą dla initializeMap? Przepraszam, jeśli brzmię nieświadomie; Wciąż rozumiem logikę. –

+0

Edytowałem swoją odpowiedź, proszę sprawdzić – Aakash

+0

Jeszcze raz dziękuję za pomoc; ale proszę, wybacz mi moją niewiedzę w tej sprawie. Sprawdziłem twoje zmiany i ponownie zaimplementowałem je w moim kodzie, jednak nadal otrzymuję komunikat "nie mogę rozwiązać symbolu" w "googleMap" i "locationManager"; co mogę zrobić, aby kontynuować? Dodatkowo musiałem stworzyć metodę inicjalizacji mapy, aby usunąć ten błąd; czy to też jest nieprawidłowe? –

Powiązane problemy