Проверьте, включен ли 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); 

Но в kitkat Secure.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; 

Если это неверно, ответьте на правильный код, пожалуйста.

РЕДАКТИРОВАТЬ

Я знаю LocationManager. Но для этого требуется разрешение ACCESS_FINE_LOCATION. Мне не нужно «доступ».

 LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE ); boolean isGpsOn = manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) 

Ответ

 @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); } } 
Intereting Posts
Компилировать флаги для разработки Eclipse / Android Не удается подписаться на RxJava 2, наблюдаемый с помощью TestSubscriber Как ссылаться на стиль в пользовательской теме Есть ли способ определить, установлено ли приложение с Market или нет? Запретить раскрывающийся список Spinner при изменении фокуса Студия Android (2.2.0 и 2.2.1) отправляет неправильное разделение ABI на устройство Многостраничные приложения в QML Как запустить функцию андроида каждые 15 минут, и особенно на 15-минутной отметке каждый день? LoaderManager с несколькими загрузчиками: как получить правильный загрузчик курсора Андроид, предоставляющий различные доступные ресурсы для ориентации Содержимое приложения выходит за панель навигации в android L Как заставить AlertDialog блокировать код? Нужна помощь при загрузке в фоновом режиме на Android? Android: горизонтальный Recyclerview внутри вертикального Recycliewiew Как сделать AAC доступным для HTTP-потока с помощью Android MediaPlayer?