Проверьте, включен ли gps в Kitkat (4.4)
Ниже kitkat, я получаю, если gps включен со списком поставщиков
String providers = Secure.getString(context.getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED);
if (TextUtils.isEmpty(providers)) {
return false;
}
return providers.contains(LocationManager.GPS_PROVIDER);
Но в киткате, в безопасности.LOCATION_PROVIDERS_ALLOWED является устаревшим.
Javaodc говорят: "используйте Secure.LOCATION_MODE", режимы расположения находятся ниже...
Secure.LOCATION_MODE_OFF
Secure.LOCATION_MODE_SENSORS_ONLY
Secure.LOCATION_MODE_BATTERY_SAVING
Secure.LOCATION_MODE_HIGH_ACCURACY
Но я не знаю точно, что ниже код правильный. (У меня нет устройств kitkat)
int locationMode = Secure.getInt(context.getContentResolver(), Secure.LOCATION_MODE);
boolean isGpsOn = locationMode != Secure.LOCATION_MODE_OFF;
Если неверно, ответьте на правильный код, пожалуйста.
EDIT
Я знаю LocationManager. Но для этого требуется разрешение ACCESS_FINE_LOCATION. Мне это не нужно. чтобы" получить доступ " к местоположению.
LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
boolean isGpsOn = manager.isProviderEnabled( LocationManager.GPS_PROVIDER )
1 ответ:
Самоответ
@TargetApi(Build.VERSION_CODES.KITKAT) @SuppressWarnings("deprecation") public static boolean isGpsEnabled(Context context) { if (PackageUtil.checkPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)) { LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); return lm.isProviderEnabled(LocationManager.GPS_PROVIDER); } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { String providers = Secure.getString(context.getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED); if (TextUtils.isEmpty(providers)) { return false; } return providers.contains(LocationManager.GPS_PROVIDER); } else { final int locationMode; try { locationMode = Secure.getInt(context.getContentResolver(), Secure.LOCATION_MODE); } catch (SettingNotFoundException e) { e.printStackTrace(); return false; } switch (locationMode) { case Secure.LOCATION_MODE_HIGH_ACCURACY: case Secure.LOCATION_MODE_SENSORS_ONLY: return true; case Secure.LOCATION_MODE_BATTERY_SAVING: case Secure.LOCATION_MODE_OFF: default: return false; } } }
И добавьте этот метод в класс packageutils:
public static class PackageUtil { static boolean checkPermission(Context context, String accessFineLocation) { int res = context.checkCallingOrSelfPermission(accessFineLocation); return (res == PackageManager.PERMISSION_GRANTED); } }