This is a sample Android application to show how to track user's location and manage the updates
Getting current location through FusedLocationAPI provided by Google is a bit tricky to implement, but the below step-by-step guidelines will explain the procedure.
- First, you need to add the needed dependency in your build.gradle file.
compile 'com.google.android.gms:play-services-location:10.+’
- Then add the following permissions into the AndroidManifest.xml file.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
-
Next is permission check, From Android 6.0 user can deny the permission request, so before try to get the location we need to check the status of the location access. For this use PermissionUtil class.
-
For making a connection with Location API, need to create an instance of GoogleApiCLient.
GoogleApiClient mGoogleApiClient; mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API).build(); mGoogleApiClient.connect();
- At next implement the OnConnectionFailedListener and ConnectionCallbacks for managing the GoogleApiclient connection.
public class MyLocationUsingLocationAPI extends AppCompatActivity implements ConnectionCallbacks, OnConnectionFailedListener,OnRequestPermissionsResultCallback, { @Override public void onConnectionFailed(ConnectionResult result) { Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = "+ result.getErrorCode()); } @Override public void onConnected(Bundle arg0) { // Once connected with google api, get the location } @Override public void onConnectionSuspended(int arg0) { mGoogleApiClient.connect(); } }
- For refreshing the location of the device at regular intervals, use LocationRequest objects.
LocationRequest mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(10000); mLocationRequest.setFastestInterval(5000); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(mLocationRequest);
- Then check the google play service availability, if available get the last known location of the user's device from the Location service as follows.
mLastLocation = LocationServices.FusedLocationApi .getLastLocation(mGoogleApiClient);
- Using the Geocoder class you can get the address from the above location.
public Address getAddress(double latitude,double longitude) { Geocoder geocoder; List addresses; geocoder = new Geocoder(this, Locale.getDefault()); try { // Here 1 represent max location result to returned, by documents it recommended 1 to 5 addresses = geocoder.getFromLocation(latitude,longitude, 1); return addresses.get(0); } catch (IOException e) { e.printStackTrace(); } return null; }
For more information, check out my detailed guide here : http://droidmentor.com/get-the-current-location-in-android/