public class GpsTracker extends Service implements LocationListener { | |
private final Context mContext; | |
// flag for GPS status | |
boolean isGPSEnabled = false; | |
// flag for network status | |
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; // 1 second | |
// Declaring a Location Manager | |
protected LocationManager locationManager; | |
public GpsTracker(Context context) { | |
this.mContext = context; | |
getLocation(); | |
} | |
public Location getLocation() { | |
if (Build.VERSION.SDK_INT >= 23 && | |
ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && | |
ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { | |
return null; | |
} | |
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) { | |
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; | |
} | |
/** | |
* Stop using GPS listener | |
* Calling this function will stop using GPS in your app | |
* */ | |
public void stopUsingGPS() { | |
if (locationManager != null) { | |
if (Build.VERSION.SDK_INT >= 23 && | |
ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && | |
ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { | |
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(){ | |
AlertDialog.Builder alertDialog = new 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); | |
((Activity)mContext).finish(); | |
} | |
}); | |
// 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) | |
{ | |
this.location = location; | |
} | |
@Override | |
public void onProviderDisabled(String provider) { | |
} | |
@Override | |
public void onProviderEnabled(String provider) { | |
} | |
@Override | |
public void onStatusChanged(String provider, int status, Bundle extras) { | |
} | |
@Override | |
public IBinder onBind(Intent arg0) { | |
return null; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment