2013-02-28 6 views
46

Ho cercato in alto e in basso una risposta, e nessuno, in nessuna domanda del forum, è stato in grado di aiutare. Ho cercato tra le esercitazioni. Il API Guide dice:Come visualizzare la mia posizione sull'API di Google Maps per Android v2

il pulsante La mia posizione viene visualizzato nell'angolo in alto a destra dello schermo solo quando lo strato di La mia posizione è abilitato.

Quindi ho cercato questo livello La mia posizione e non sono riuscito a trovare nulla. Come faccio a mostrare la mia posizione su una mappa di Google?

+0

ci sono diversi ot le sue domande su come trovare la posizione corrente su Google Maps Android V2 su SO. Detto questo, ecco una soluzione che abiliterà la posizione e ti consentirà di reagire alle modifiche della posizione: http://stackoverflow.com/a/13753518/1103584 – DiscDev

+0

Grazie per il collegamento. Avevo già capito come accedere al GPS e centrare la mappa sull'utente. La guida alle API è arrivata lì. Stavo cercando il codice specifico che mostra la posizione dell'utente sulla mappa come il punto blu. – Yos233

risposta

114

La guida alle API ha sbagliato tutto (davvero Google?). Con Maps v2 non è necessario abilitare un livello per mostrarti, c'è una semplice chiamata all'istanza di GoogleMaps che hai creato con la tua mappa.

Google Documentation

La documentazione reale che Google fornisce ti dà la risposta. Chiama il numero

e osserva la magia.

+9

Esiste un metodo per fare clic automaticamente su MyLocationButton per centrare la mappa? Ora devo usare LocationClient per fare lo stesso cosa fa MyLocationButton. – iForests

+0

Non credo che ci sia un modo per chiamare a livello di programmazione il pulsante MyLocation. Tuttavia, è possibile utilizzare un oggetto LocationManager. – Yos233

+0

Quindi puoi utilizzare un oggetto CameraPosition per spostare la mappa ovunque desideri. – Yos233

10

Per visualizzare il pulsante "La mia posizione" bisogna chiamare

map.getUiSettings().setMyLocationButtonEnabled(true); 

sull'oggetto GoogleMap.

+2

Ma prima la mappa deve mostrare all'utente Posizione. Questo è quello che stavo chiedendo. Il pulsante non va bene se non c'è un punto blu. – Yos233

+1

Se si utilizza MapView, quindi: map.setMyLocationEnabled (true); map.getUiSettings(). SetMyLocationButtonEnabled (true); entrambi devono essere scritti – Bam

31

codice Java:

public class MapActivity extends FragmentActivity implements LocationListener { 

    GoogleMap googleMap; 
    LatLng myPosition; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_map); 

     // Getting reference to the SupportMapFragment of activity_main.xml 
     SupportMapFragment fm = (SupportMapFragment) 
     getSupportFragmentManager().findFragmentById(R.id.map); 

     // Getting GoogleMap object from the fragment 
     googleMap = fm.getMap(); 

     // Enabling MyLocation Layer of Google Map 
     googleMap.setMyLocationEnabled(true); 

     // Getting LocationManager object from System Service LOCATION_SERVICE 
     LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

     // Creating a criteria object to retrieve provider 
     Criteria criteria = new Criteria(); 

     // Getting the name of the best provider 
     String provider = locationManager.getBestProvider(criteria, true); 

     // Getting Current Location 
     Location location = locationManager.getLastKnownLocation(provider); 

     if (location != null) { 
      // Getting latitude of the current location 
      double latitude = location.getLatitude(); 

      // Getting longitude of the current location 
      double longitude = location.getLongitude(); 

      // Creating a LatLng object for the current location 
      LatLng latLng = new LatLng(latitude, longitude); 

      myPosition = new LatLng(latitude, longitude); 

      googleMap.addMarker(new MarkerOptions().position(myPosition).title("Start")); 
     } 
    } 
} 

activity_map.xml:

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:map="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/map" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    class="com.google.android.gms.maps.SupportMapFragment"/> 

Si otterrà la posizione corrente in un cerchio blu.

+0

Bella risposta funziona per me –

+0

Grazie UdiT, sembra molto bello. Ma cosa fai con la tua variabile 'latLing'? Questo codice mostra che non è in uso. Grazie. – Azurespot

+0

Ah, non importa, suppongo che 2 oggetti LatLng non siano necessari, quindi ne ho cancellato uno e ho usato myPosition. Ha funzionato! Grazie ancora! – Azurespot

7

chiamata GoogleMap.setMyLocationEnabled(true) nel vostro Activity, e aggiungere questo codice 2 righe nel Manifest:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
11

da Android 6.0 è necessario controllare l'autorizzazione dell'utente, se si desidera utilizzare GoogleMap.setMyLocationEnabled(true) otterrete Call requires permission which may be rejected by user errore

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) { 
    mMap.setMyLocationEnabled(true); 
} else { 
// Show rationale and request permission. 
} 

se volete saperne di più, controllare google map docs