Instantly share code, notes, and snippets.

Embed
What would you like to do?
Get the current location and display a marker on Google Map.
package com.enginebai.sample;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.orhanobut.logger.Logger;
import butterknife.Bind;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity {
public static final int LOCATION_UPDATE_MIN_DISTANCE = 10;
public static final int LOCATION_UPDATE_MIN_TIME = 5000;
@Bind(R.id.mapview)
MapView mMapView;
@Bind(R.id.toolbar)
Toolbar mToolbar;
@Bind(R.id.fab)
FloatingActionButton mFab;
private GoogleMap mGoogleMap;
private LocationListener mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
Logger.d(String.format("%f, %f", location.getLatitude(), location.getLongitude()));
drawMarker(location);
mLocationManager.removeUpdates(mLocationListener);
} else {
Logger.d("Location is null");
}
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
};
private LocationManager mLocationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Logger.init();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getCurrentLocation();
}
});
mMapView.onCreate(savedInstanceState);
mGoogleMap = mMapView.getMap();
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
initMap();
getCurrentLocation();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
getCurrentLocation();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
mLocationManager.removeUpdates(mLocationListener);
}
@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;
}
@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 void initMap() {
int googlePlayStatus = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (googlePlayStatus != ConnectionResult.SUCCESS) {
GooglePlayServicesUtil.getErrorDialog(googlePlayStatus, this, -1).show();
finish();
} else {
if (mGoogleMap != null) {
mGoogleMap.setMyLocationEnabled(true);
mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true);
mGoogleMap.getUiSettings().setAllGesturesEnabled(true);
}
}
}
private void getCurrentLocation() {
boolean isGPSEnabled = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isNetworkEnabled = mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Location location = null;
if (!(isGPSEnabled || isNetworkEnabled))
Snackbar.make(mMapView, R.string.error_location_provider, Snackbar.LENGTH_INDEFINITE).show();
else {
if (isNetworkEnabled) {
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
LOCATION_UPDATE_MIN_TIME, LOCATION_UPDATE_MIN_DISTANCE, mLocationListener);
location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
if (isGPSEnabled) {
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
LOCATION_UPDATE_MIN_TIME, LOCATION_UPDATE_MIN_DISTANCE, mLocationListener);
location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
}
if (location != null) {
Logger.d(String.format("getCurrentLocation(%f, %f)", location.getLatitude(),
location.getLongitude()));
drawMarker(location);
}
}
private void drawMarker(Location location) {
if (mGoogleMap != null) {
mGoogleMap.clear();
LatLng gps = new LatLng(location.getLatitude(), location.getLongitude());
mGoogleMap.addMarker(new MarkerOptions()
.position(gps)
.title("Current Position"));
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(gps, 12));
}
}
}
@connonfodder

This comment has been minimized.

Show comment
Hide comment
@connonfodder

connonfodder Dec 6, 2016

thanks a lot

connonfodder commented Dec 6, 2016

thanks a lot

@adilazmi786

This comment has been minimized.

Show comment
Hide comment
@adilazmi786

adilazmi786 commented Aug 8, 2017

thnx

@Tiganimohammad

This comment has been minimized.

Show comment
Hide comment
@Tiganimohammad

Tiganimohammad commented Oct 22, 2017

thanks

@fanshaohui

This comment has been minimized.

Show comment
Hide comment
@fanshaohui

fanshaohui Nov 10, 2017

thank you so mach

fanshaohui commented Nov 10, 2017

thank you so mach

@saileshnarayanan

This comment has been minimized.

Show comment
Hide comment
@saileshnarayanan

saileshnarayanan Nov 16, 2017

Thanks ..but still getting an error for location.Can you please list down all the JAR files that you have used.Im trying to fetch current location but unable to do so.

saileshnarayanan commented Nov 16, 2017

Thanks ..but still getting an error for location.Can you please list down all the JAR files that you have used.Im trying to fetch current location but unable to do so.

@ekaperintis

This comment has been minimized.

Show comment
Hide comment
@ekaperintis

ekaperintis commented Mar 20, 2018

Thanks

@AbdulRehmanAB

This comment has been minimized.

Show comment
Hide comment
@AbdulRehmanAB

AbdulRehmanAB Apr 26, 2018

sir how ro add marshmallow runtime permisson in the google maps ?????????? plz update this with marshmallow thanks

AbdulRehmanAB commented Apr 26, 2018

sir how ro add marshmallow runtime permisson in the google maps ?????????? plz update this with marshmallow thanks

@tianlongli124

This comment has been minimized.

Show comment
Hide comment
@tianlongli124

tianlongli124 May 15, 2018

Thanks. But If can, post all project. regards

tianlongli124 commented May 15, 2018

Thanks. But If can, post all project. regards

@SENYANGE

This comment has been minimized.

Show comment
Hide comment
@SENYANGE

SENYANGE commented Jul 15, 2018

thanks

@MoeidHeidari

This comment has been minimized.

Show comment
Hide comment
@MoeidHeidari

MoeidHeidari Aug 13, 2018

You can use this library
https://github.com/MoeidHeidari/LocationTracker
public class MainActivity extends AppCompatActivity {
LocationTracker tracker;
@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tracker =new LocationTracker(this);
Toast.makeText(this, String.valueOf(tracker.getLatitude()),
Toast.LENGTH_LONG).show();
tracker.setOnLocationChanged(new OnLocationChanged() {
@override
public void OnChange(Location location) {

            //Write your codes here
        }
    });


}

}

MoeidHeidari commented Aug 13, 2018

You can use this library
https://github.com/MoeidHeidari/LocationTracker
public class MainActivity extends AppCompatActivity {
LocationTracker tracker;
@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tracker =new LocationTracker(this);
Toast.makeText(this, String.valueOf(tracker.getLatitude()),
Toast.LENGTH_LONG).show();
tracker.setOnLocationChanged(new OnLocationChanged() {
@override
public void OnChange(Location location) {

            //Write your codes here
        }
    });


}

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment