How to check if Location Services are enabled?
You can use the below code to check whether gps provider and network providers are enabled or not.
LocationManager lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);boolean gps_enabled = false;boolean network_enabled = false;try { gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);} catch(Exception ex) {}try { network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);} catch(Exception ex) {}if(!gps_enabled && !network_enabled) { // notify user new AlertDialog.Builder(context) .setMessage(R.string.gps_network_not_enabled) .setPositiveButton(R.string.open_location_settings, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface paramDialogInterface, int paramInt) { context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } }) .setNegativeButton(R.string.Cancel,null) .show(); }
And in the manifest file, you will need to add the following permissions
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
I use this code for checking:
public static boolean isLocationEnabled(Context context) { int locationMode = 0; String locationProviders; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ try { locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE); } catch (SettingNotFoundException e) { e.printStackTrace(); return false; } return locationMode != Settings.Secure.LOCATION_MODE_OFF; }else{ locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); return !TextUtils.isEmpty(locationProviders); }}
As now in 2020
Latest, Best and shortest way is
@SuppressWarnings("deprecation")public static Boolean isLocationEnabled(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { // This is a new method provided in API 28 LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); return lm.isLocationEnabled(); } else { // This was deprecated in API 28 int mode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); return (mode != Settings.Secure.LOCATION_MODE_OFF); }}