Question Detail
How do I get current location programmatically in Android by Using GPS?
I want to get my Current location in my Android App.
How to implement GPS Location finder in android mobile and get my latitude and Longitude?
Thread Reply
Hemant Sharma
- 3 years ago
you have to add a dependency in gradle file
dependencies { implementation 'com.google.android.gms:play-services-location:15.0.1' } apply plugin: 'com.google.gms.google-services'
give some Location permissions in your Manifest file
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-feature android:name="android.hardware.location.gps" android:required="true"/>
Now Create your Location finder Activity
import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.IntentSender; import android.content.pm.PackageManager; import android.location.Location; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.PendingResult; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import com.google.android.gms.location.LocationSettingsRequest; import com.google.android.gms.location.LocationSettingsResult; import com.google.android.gms.location.LocationSettingsStatusCodes; import java.util.ArrayList; import java.util.List; public class LocationActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { private Location locationVar; private GoogleApiClient googleApiClient; private final static int REQUEST_CHECK_SETTINGS_GPS = 0x1; private final static int REQUEST_ID_MULTIPLE_PERMISSIONS = 0x2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location); setUpGClient(); } private synchronized void setUpGClient() { googleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, 0, this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); googleApiClient.connect(); } @Override public void onLocationChanged(Location location) { locationVar = location; if (locationVar != null) { Double latitude = locationVar.getLatitude(); Double longitude = locationVar.getLongitude(); String locations = "Longitude : " + longitude + " | " + "Latitude : " + latitude; Toast.makeText(this, locations, Toast.LENGTH_SHORT).show(); } } @Override public void onConnected(Bundle bundle) { checkPermissions(); } @Override public void onConnectionSuspended(int i) { //Do whatever you need //You can display a message here } @Override public void onConnectionFailed(ConnectionResult connectionResult) { //You can display a message here } private void getLocation() { if (googleApiClient != null) { if (googleApiClient.isConnected()) { int permissionLocation = ContextCompat.checkSelfPermission(LocationActivity.this, Manifest.permission.ACCESS_FINE_LOCATION); if (permissionLocation == PackageManager.PERMISSION_GRANTED) { locationVar = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); LocationRequest locationRequest = new LocationRequest(); locationRequest.setInterval(3000); locationRequest.setFastestInterval(3000); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest); builder.setAlwaysShow(true); LocationServices.FusedLocationApi .requestLocationUpdates(googleApiClient, locationRequest, this); PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi .checkLocationSettings(googleApiClient, builder.build()); result.setResultCallback(new ResultCallback<LocationSettingsResult>() { @Override public void onResult(LocationSettingsResult result) { final Status status = result.getStatus(); switch (status.getStatusCode()) { case LocationSettingsStatusCodes.SUCCESS: // All location settings are satisfied. // You can initialize location requests here. int permissionLocation = ContextCompat .checkSelfPermission(LocationActivity.this, Manifest.permission.ACCESS_FINE_LOCATION); if (permissionLocation == PackageManager.PERMISSION_GRANTED) { locationVar = LocationServices.FusedLocationApi .getLastLocation(googleApiClient); } break; case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: // Location settings are not satisfied. // But could be fixed by showing the user a dialog. try { status.startResolutionForResult(LocationActivity.this, REQUEST_CHECK_SETTINGS_GPS); } catch (IntentSender.SendIntentException e) { // Ignore the error. } break; case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: // Location settings are not satisfied. // However, we have no way // to fix the // settings so we won't show the dialog. // finish(); break; } } }); } } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CHECK_SETTINGS_GPS: switch (resultCode) { case Activity.RESULT_OK: getLocation(); break; case Activity.RESULT_CANCELED: finish(); break; } break; } } private void checkPermissions() { int permissionLocation = ContextCompat.checkSelfPermission(LocationActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION); List<String> listPermissionsNeeded = new ArrayList<>(); if (permissionLocation != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(android.Manifest.permission.ACCESS_FINE_LOCATION); if (!listPermissionsNeeded.isEmpty()) { ActivityCompat.requestPermissions(this,listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS); } } else { getLocation(); } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { int permissionLocation = ContextCompat.checkSelfPermission(LocationActivity.this, Manifest.permission.ACCESS_FINE_LOCATION); if (permissionLocation == PackageManager.PERMISSION_GRANTED) { getLocation(); } } }
Hemant Sharma
- 3 years ago
you have to add a dependency in gradle file
dependencies { implementation 'com.google.android.gms:play-services-location:15.0.1' } apply plugin: 'com.google.gms.google-services'
give some Location permissions in your Manifest file
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-feature android:name="android.hardware.location.gps" android:required="true"/>
Now Create your Location finder Activity
import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.IntentSender; import android.content.pm.PackageManager; import android.location.Location; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.PendingResult; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import com.google.android.gms.location.LocationSettingsRequest; import com.google.android.gms.location.LocationSettingsResult; import com.google.android.gms.location.LocationSettingsStatusCodes; import java.util.ArrayList; import java.util.List; public class LocationActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { private Location locationVar; private GoogleApiClient googleApiClient; private final static int REQUEST_CHECK_SETTINGS_GPS = 0x1; private final static int REQUEST_ID_MULTIPLE_PERMISSIONS = 0x2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location); setUpGClient(); } private synchronized void setUpGClient() { googleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, 0, this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); googleApiClient.connect(); } @Override public void onLocationChanged(Location location) { locationVar = location; if (locationVar != null) { Double latitude = locationVar.getLatitude(); Double longitude = locationVar.getLongitude(); String locations = "Longitude : " + longitude + " | " + "Latitude : " + latitude; Toast.makeText(this, locations, Toast.LENGTH_SHORT).show(); } } @Override public void onConnected(Bundle bundle) { checkPermissions(); } @Override public void onConnectionSuspended(int i) { //Do whatever you need //You can display a message here } @Override public void onConnectionFailed(ConnectionResult connectionResult) { //You can display a message here } private void getLocation() { if (googleApiClient != null) { if (googleApiClient.isConnected()) { int permissionLocation = ContextCompat.checkSelfPermission(LocationActivity.this, Manifest.permission.ACCESS_FINE_LOCATION); if (permissionLocation == PackageManager.PERMISSION_GRANTED) { locationVar = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); LocationRequest locationRequest = new LocationRequest(); locationRequest.setInterval(3000); locationRequest.setFastestInterval(3000); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest); builder.setAlwaysShow(true); LocationServices.FusedLocationApi .requestLocationUpdates(googleApiClient, locationRequest, this); PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi .checkLocationSettings(googleApiClient, builder.build()); result.setResultCallback(new ResultCallback<LocationSettingsResult>() { @Override public void onResult(LocationSettingsResult result) { final Status status = result.getStatus(); switch (status.getStatusCode()) { case LocationSettingsStatusCodes.SUCCESS: // All location settings are satisfied. // You can initialize location requests here. int permissionLocation = ContextCompat .checkSelfPermission(LocationActivity.this, Manifest.permission.ACCESS_FINE_LOCATION); if (permissionLocation == PackageManager.PERMISSION_GRANTED) { locationVar = LocationServices.FusedLocationApi .getLastLocation(googleApiClient); } break; case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: // Location settings are not satisfied. // But could be fixed by showing the user a dialog. try { status.startResolutionForResult(LocationActivity.this, REQUEST_CHECK_SETTINGS_GPS); } catch (IntentSender.SendIntentException e) { // Ignore the error. } break; case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: // Location settings are not satisfied. // However, we have no way // to fix the // settings so we won't show the dialog. // finish(); break; } } }); } } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CHECK_SETTINGS_GPS: switch (resultCode) { case Activity.RESULT_OK: getLocation(); break; case Activity.RESULT_CANCELED: finish(); break; } break; } } private void checkPermissions() { int permissionLocation = ContextCompat.checkSelfPermission(LocationActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION); List<String> listPermissionsNeeded = new ArrayList<>(); if (permissionLocation != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(android.Manifest.permission.ACCESS_FINE_LOCATION); if (!listPermissionsNeeded.isEmpty()) { ActivityCompat.requestPermissions(this,listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS); } } else { getLocation(); } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { int permissionLocation = ContextCompat.checkSelfPermission(LocationActivity.this, Manifest.permission.ACCESS_FINE_LOCATION); if (permissionLocation == PackageManager.PERMISSION_GRANTED) { getLocation(); } } }
Something More