how to ask user for his location in android
public class MainActivity extends AppCompatActivity {
//'LocationManager' manages location tracking
/*'LocationListener' gives us updates about whenever the device moves, it gives us updates on all those */
LocationManager locationManager;
LocationListener locationListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//STEP 1: Declare and Initialize 'LocationManager' and 'LocationListener'
//To get users location
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
//To get users permissions and updates about device movement
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Log.i("Location:", location.toString());
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
//STEP 2: Create a Pop up message that ask the user to access his location
//The following if statement will execute when the user opens the app for the first time, which means he has
//not provided permission for anything yet, in which case the we will go ahead and ask for his permission.
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
//user has already granted you permission so just go ahead and get updates. In this case the code will not continue to STEP 3.
else {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
}
//STEP 3: Respond accordingly to whether user granted permission or not
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//Check if the user granted permission in step 2
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//If Yes, then go ahead and grab the users location user 'LocationManager' and 'LocationListener'
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
}
}
}