Location Manager remove updates permission
Since SDK 23, you should/need to check the permission before you call Location API functionality. Here is an example of how to do it:
if (locationManager != null) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
locationManager.removeUpdates(GPSListener.this);
}
}
There is checkSelfPermission()
, which is to check if 'you' (this app) has the correct permissions. There is also checkPermission()
, which is to check if another process has the correct permissions.
Notes
- next to doing this runtime check, it is still also necessary to require the relevant permissions in the AndroidManifest.
- if your targetSdk is < 23, you should use
ContextCompat.checkSelfPermission()
instead (thanks to JerryBrady)
I wasn't able to use checkSelfPermission()
, because my min API is 14 and 23 is required. Knowing that, you can also try
to catch
a SecurityException
.
Example:
try {
locationManager.removeUpdates(GPSListener.this);
} catch (SecurityException e) {
Log.e("PERMISSION_EXCEPTION","PERMISSION_NOT_GRANTED");
}
To add to Jerry Brady's comment regarding ContextCompat, this is be the full code for < 23:
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)