how to enable location on dialog click without going to setting screen
//first add permission in to Manifest file.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
//intialize googleapiclient
private GoogleApiClient googleApiClient;
//check that location enables or not if not open dialog
public void getLocation()
{
final LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
//what you want to do locationenable();
}
else {
}
}
public void locationenable()
{
googleApiClient = new GoogleApiClient.Builder(context)
.addApi(LocationServices.API)
.build();
googleApiClient.connect();
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(30 * 1000);
locationRequest.setFastestInterval(5 * 1000);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest);
//************************** builder.setAlwaysShow(true); //this is the key ingredient //**************************
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();
final LocationSettingsStates state = result.getLocationSettingsStates();
switch (status.getStatusCode())
{
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can initialize location // requests here.
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the user // a dialog. try {
// Show the dialog by calling startResolutionForResult(), // and check the result in onActivityResult(). status.startResolutionForResult(
(Activity) context, 1000);
}
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. break;
case LocationSettingsStatusCodes.CANCELED:
// Location settings are not satisfied. However, we have no way to fix the // settings so we won't show the dialog. break;
}
}
});
}
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1000)
{
getLocation();
}
else
{
}
}
//above code is for enable location on dialog click and call getlocation() method in onresume if latitude or latitude not found
//now providing the location manager class through u can get all the location related stuff.
// Gps Tracker class is providing all the location listner properties for getting lattitude ,longitude ,address on lat-lng etc.
import android.Manifest;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
public class GPSTracker extends Service implements LocationListener
{
private final Context mContext;
// flag for GPS status public boolean isGPSEnabled = false;
// flag for network status public boolean isNetworkEnabled = false;
// flag for GPS status boolean canGetLocation = false;
Location location; // location double latitude; // latitude double longitude; // longitude // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters // The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute // Declaring a Location Manager protected LocationManager locationManager;
SharedPreferences prefs;
public GPSTracker(Context context)
{
this.mContext = context;
getLocation();
}
public Location getLocation()
{
try {
locationManager = (LocationManager) mContext .getSystemService(LOCATION_SERVICE);
// getting GPS status isGPSEnabled = locationManager .isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled)
{
// no network provider is enabled }
else {
this.canGetLocation = true;
// First get location from Network Provider if (isNetworkEnabled)
{
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
// TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return location;
}
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null)
{
location = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null)
{
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services if (isGPSEnabled)
{
if (location == null)
{
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null)
{
location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null)
{
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return location;
}
/** * Get list of address by latitude and longitude * * @return null or List<Address>
*/ public List<Address> getGeocoderAddress(Context context)
{
if (location != null)
{
Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
try {
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
return addresses;
}
catch (IOException e)
{
// e.printStackTrace(); Log.e("Error : Geocoder", "Impossible to connect to Geocoder", e);
}
}
return null;
}
/** * Try to get AddressLine * * @return null or addressLine */ public String getAddressLine(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
String result = "";
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
{
sb.append(address.getAddressLine(i)).append("\n");
}
sb.append(address.getLocality()).append("\n");
sb.append(address.getCountryName());
result = sb.toString();
return result;
}
else {
return null;
}
}
/** * Try to get Locality * * @return null or locality */ public String getLocality(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String locality = address.getLocality();
return locality;
}
else {
return null;
}
}
/** * Try to get Postal Code * * @return null or postalCode */ public String getPostalCode(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String postalCode = address.getPostalCode();
return postalCode;
}
else {
return null;
}
}
/** * Try to get CountryName * * @return null or postalCode */ public String getCountryName(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String countryName = address.getCountryName();
return countryName;
}
else {
return null;
}
}
/** * Stop using GPS listener Calling this function will stop using GPS in your app */ public void stopUsingGPS()
{
if (locationManager != null)
{
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
// TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return;
}
locationManager.removeUpdates(GPSTracker.this);
}
}
/** * Function to get latitude */ public double getLatitude()
{
if (location != null)
{
latitude = location.getLatitude();
}
// return latitude return latitude;
}
/** * Function to get longitude */ public double getLongitude()
{
if (location != null)
{
longitude = location.getLongitude();
}
// return longitude return longitude;
}
/** * Function to check GPS/wifi enabled * * @return boolean */ public boolean canGetLocation()
{
return this.canGetLocation;
}
/** * Function to show settings alert dialog On pressing Settings button will lauch Settings Options */ public void showSettingsAlert()
{
android.support.v7.app.AlertDialog.Builder alertDialog = new android.support.v7.app.AlertDialog.Builder(mContext);
// Setting Dialog Title alertDialog.setTitle("GPS settings");
// Setting Dialog Message alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
// On pressing Settings button alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});
// on pressing cancel button alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
dialog.cancel();
}
});
// Showing Alert Message alertDialog.show();
}
@Override public void onLocationChanged(Location location)
{
// TODO Auto-generated method stub }
@Override public void onProviderDisabled(String provider)
{
// TODO Auto-generated method stub }
@Override public void onProviderEnabled(String provider)
{
// TODO Auto-generated method stub
}
@Override public void onStatusChanged(String provider, int status, Bundle extras)
{
// TODO Auto-generated method stub }
@Override public IBinder onBind(Intent intent)
{
// TODO Auto-generated method stub return null;
}
}
//full and final code for location enable and get latitude longitude for just intializing the Gps tracker class and u can do all the location related stuff.
By Darshan Patel