title: Google Maps Android api v2 and current location
body: <p>I'm trying to use the new google maps android api v2 and i'm developing an app for android 2.3.3 or higher.
  It's a very simple app: 
  it takes the user current location (using gps or networks signal)
  it gets from db a POI
  using direction api, it drives the user to the POI.</p>
  
  <p>My problem is get the user current location. thanks to this post  <a href="https://stackoverflow.com/questions/13756261/how-to-get-the-current-lcoation-in-google-maps-android-api-v2">How to get the current location in Google Maps Android API v2?</a> I learned that i can't update current position using new google api.
  Another problem is that I can set my position using <code>GoogleMap setMyLocationEnabled(boolean enabled)</code> but I can't use <code>getMyLocation()</code> to know where user is.</p>
  
  <p>I used this guide <a href="http://www.vogella.com/articles/AndroidLocationAPI/article.html#maps_mylocation" rel="nofollow noreferrer">http://www.vogella.com/articles/AndroidLocationAPI/article.html#maps_mylocation</a> to get my location, and i tried to integrate inside my Activity to draw user position.</p>
  
  <p>here my code:</p>
  
  <p>Manifest</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="it.mappe"
      android:versionCode="1"
      android:versionName="1.0" &gt;
  
      &lt;uses-permission android:name="it.mappe.permission.MAPS_RECEIVE" /&gt;
  
      &lt;uses-sdk
          android:minSdkVersion="10"
          android:targetSdkVersion="16" /&gt;
  
      &lt;uses-permission android:name="android.permission.INTERNET" /&gt;
      &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
      &lt;uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /&gt;
  
      &lt;uses-feature
          android:glEsVersion="0x00020000"
          android:required="true" /&gt;
  
      &lt;application
          android:allowBackup="true"
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme" &gt;
  
           &lt;meta-data
          android:name="com.google.android.maps.v2.API_KEY"
          android:value="MYGMAPSKEY" /&gt;
          &lt;activity
              android:name="it.mappe.MainActivity"
              android:label="@string/app_name" &gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.intent.action.MAIN" /&gt;
  
                  &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
      &lt;/application&gt;
  
  &lt;/manifest&gt;
  </code></pre>
  
  <p>main Activity</p>
  
  <pre><code>package it.mappe;
  
  import com.google.android.gms.maps.GoogleMap;
  import com.google.android.gms.maps.SupportMapFragment;
  
  import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  import com.google.android.gms.maps.model.LatLng;
  import com.google.android.gms.maps.model.Marker;
  import com.google.android.gms.maps.model.MarkerOptions;
  
  import android.content.Context;
  import android.content.Intent;
  import android.location.Criteria;
  import android.location.Location;
  import android.location.LocationListener;
  import android.location.LocationManager;
  import android.os.Bundle;
  import android.provider.Settings;
  import android.support.v4.app.FragmentActivity;
  import android.widget.Toast;
  
  public class MainActivity extends FragmentActivity implements LocationListener {
      private GoogleMap map;
      private static final LatLng ROMA = new LatLng(42.093230818037,11.7971813678741);
      private LocationManager locationManager;
      private String provider;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
  
          LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
          boolean enabledGPS = service
                  .isProviderEnabled(LocationManager.GPS_PROVIDER);
          boolean enabledWiFi = service
                  .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
  
          // Check if enabled and if not send user to the GSP settings
          // Better solution would be to display a dialog and suggesting to 
          // go to the settings
          if (!enabledGPS) {
              Toast.makeText(this, "GPS signal not found", Toast.LENGTH_LONG).show();
              Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
              startActivity(intent);
          }
  
          locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
          // Define the criteria how to select the locatioin provider -&gt; use
          // default
          Criteria criteria = new Criteria();
          provider = locationManager.getBestProvider(criteria, false);
          Location location = locationManager.getLastKnownLocation(provider);
  
          // Initialize the location fields
          if (location != null) {
              Toast.makeText(this, "Selected Provider " + provider,
                      Toast.LENGTH_SHORT).show();
              onLocationChanged(location);
          } else {
  
              //do something
          }
  
      }
  
      /* Request updates at startup */
      @Override
      protected void onResume() {
          super.onResume();
          locationManager.requestLocationUpdates(provider, 400, 1, this);
      }
  
      /* Remove the locationlistener updates when Activity is paused */
      @Override
      protected void onPause() {
          super.onPause();
          locationManager.removeUpdates(this);
      }
  
      @Override
      public void onLocationChanged(Location location) {
          double lat =  location.getLatitude();
          double lng = location.getLongitude();
          Toast.makeText(this, "Location " + lat+","+lng,
                  Toast.LENGTH_LONG).show();
          LatLng coordinate = new LatLng(lat, lng);
          Toast.makeText(this, "Location " + coordinate.latitude+","+coordinate.longitude,
                  Toast.LENGTH_LONG).show();
          Marker startPerc = map.addMarker(new MarkerOptions()
          .position(coordinate)
          .title("Start")
          .snippet("Inizio del percorso")
          .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
      }
  
  
      @Override
      public void onProviderDisabled(String provider) {
          Toast.makeText(this, "Enabled new provider " + provider,
                  Toast.LENGTH_SHORT).show();
  
      }
  
  
      @Override
      public void onProviderEnabled(String provider) {
          Toast.makeText(this, "Disabled provider " + provider,
                  Toast.LENGTH_SHORT).show();
  
      }
  
  
      @Override
      public void onStatusChanged(String provider, int status, Bundle extras) {
          // TODO Auto-generated method stub
  
      }
  
  }
  </code></pre>
  
  <p>main layout</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;fragment xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/map"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      class="com.google.android.gms.maps.SupportMapFragment" /&gt;
  </code></pre>
  
  <p>It works but not so good, as you can see in the pictures eveytime there is a new location it adds a new Marker (ex Overlay I think... I never use old google maps api). 
  <img src="https://i.stack.imgur.com/x5ZCH.png" alt="enter image description here"></p>
  
  <p>How can I show only one markers? </p>
  
  <p>In addition on my map i need to display also POI's marker, so i think that it's not a good solution delate all marker and redraw it on the maps.
  There is another best way to get user current location, updating it every moment displaying just one custom marker?! </p>